<?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>227989</bug_id>
          
          <creation_ts>2021-07-15 07:48:46 -0700</creation_ts>
          <short_desc>for-in should only emit one loop in bytecode</short_desc>
          <delta_ts>2021-08-25 08:05:24 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=228919</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=229495</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keith Miller">keith_miller</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>thorton</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1777198</commentid>
    <comment_count>0</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-15 07:48:46 -0700</bug_when>
    <thetext>for-in should only emit one loop in bytecode</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777199</commentid>
    <comment_count>1</comment_count>
      <attachid>433583</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-15 07:51:29 -0700</bug_when>
    <thetext>Created attachment 433583
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1778700</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-22 07:49:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/80960811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779248</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2021-07-23 16:55:05 -0700</bug_when>
    <thetext>*** Bug 172458 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779602</commentid>
    <comment_count>4</comment_count>
      <attachid>434250</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-26 15:27:55 -0700</bug_when>
    <thetext>Created attachment 434250
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779830</commentid>
    <comment_count>5</comment_count>
      <attachid>434311</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-27 13:55:47 -0700</bug_when>
    <thetext>Created attachment 434311
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779836</commentid>
    <comment_count>6</comment_count>
      <attachid>434316</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-27 14:25:09 -0700</bug_when>
    <thetext>Created attachment 434316
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780120</commentid>
    <comment_count>7</comment_count>
      <attachid>434437</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 10:49:10 -0700</bug_when>
    <thetext>Created attachment 434437
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780123</commentid>
    <comment_count>8</comment_count>
      <attachid>434438</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 11:06:23 -0700</bug_when>
    <thetext>Created attachment 434438
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780124</commentid>
    <comment_count>9</comment_count>
      <attachid>434439</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 11:07:57 -0700</bug_when>
    <thetext>Created attachment 434439
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780132</commentid>
    <comment_count>10</comment_count>
      <attachid>434442</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 11:26:20 -0700</bug_when>
    <thetext>Created attachment 434442
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780146</commentid>
    <comment_count>11</comment_count>
      <attachid>434444</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 12:04:00 -0700</bug_when>
    <thetext>Created attachment 434444
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780148</commentid>
    <comment_count>12</comment_count>
      <attachid>434445</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 12:10:58 -0700</bug_when>
    <thetext>Created attachment 434445
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780150</commentid>
    <comment_count>13</comment_count>
      <attachid>434446</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 12:16:57 -0700</bug_when>
    <thetext>Created attachment 434446
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780158</commentid>
    <comment_count>14</comment_count>
      <attachid>434448</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 12:28:26 -0700</bug_when>
    <thetext>Created attachment 434448
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780161</commentid>
    <comment_count>15</comment_count>
      <attachid>434449</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-07-28 12:39:16 -0700</bug_when>
    <thetext>Created attachment 434449
test32bit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781713</commentid>
    <comment_count>16</comment_count>
      <attachid>434857</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-08-03 12:55:00 -0700</bug_when>
    <thetext>Created attachment 434857
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782267</commentid>
    <comment_count>17</comment_count>
      <attachid>435002</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-08-05 10:27:24 -0700</bug_when>
    <thetext>Created attachment 435002
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782284</commentid>
    <comment_count>18</comment_count>
      <attachid>435008</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-08-05 10:57:08 -0700</bug_when>
    <thetext>Created attachment 435008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782325</commentid>
    <comment_count>19</comment_count>
      <attachid>435019</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-08-05 13:36:27 -0700</bug_when>
    <thetext>Created attachment 435019
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782367</commentid>
    <comment_count>20</comment_count>
      <attachid>435019</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-05 15:28:18 -0700</bug_when>
    <thetext>Comment on attachment 435019
Patch

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

Still reviewing.

&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.h:-96
&gt; -    AuxiliaryBarrier&lt;WriteBarrier&lt;JSString&gt;*&gt; m_propertyNames;
&gt; -    WriteBarrier&lt;StructureChain&gt; m_prototypeChain;

Why is it moved? I think putting large fields first is the better ordering to prevent adding paddings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782368</commentid>
    <comment_count>21</comment_count>
      <attachid>435019</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-05 15:29:21 -0700</bug_when>
    <thetext>Comment on attachment 435019
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:-2170
&gt; -                // FIXME: We can expand this for non x86 environments.
&gt; -                // https://bugs.webkit.org/show_bug.cgi?id=134641
&gt; -                if (!isX86())
&gt; -                    return false;

Non-x86 architecture does not have TSO, so I think removing this is not correct since IIRC some code in this lambda relies on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782382</commentid>
    <comment_count>22</comment_count>
      <attachid>435019</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-08-05 16:00:41 -0700</bug_when>
    <thetext>Comment on attachment 435019
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:-2170
&gt;&gt; -                    return false;
&gt; 
&gt; Non-x86 architecture does not have TSO, so I think removing this is not correct since IIRC some code in this lambda relies on that.

Yeah, I forgot why I removed this. I think I was thinking it was doing something else... I&apos;ll re-add it.

&gt;&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.h:-96
&gt;&gt; -    WriteBarrier&lt;StructureChain&gt; m_prototypeChain;
&gt; 
&gt; Why is it moved? I think putting large fields first is the better ordering to prevent adding paddings.

I&apos;m not sure why I added it. I agree, I&apos;ll revert this relocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782425</commentid>
    <comment_count>23</comment_count>
      <attachid>435019</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-05 19:01:46 -0700</bug_when>
    <thetext>Comment on attachment 435019
Patch

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

Still reviewing.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:8405
&gt; +            auto seenModes = metadata.m_enumeratorMetadata;

Lets&apos; align it to the other like `auto seenModes = OptionSet&lt;JSPropertyNameEnumerator::Mode&gt;::fromRaw(metadata.m_enumeratorMetadata);`

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3017
&gt; +        emitGetVirtualRegister(index, indexGPR);
&gt; +        Jump notInit = branchTest32(Zero, modeGPR);
&gt; +        // Need to use add64 since this is a JSValue int32.
&gt; +        add64(TrustedImm32(1), indexGPR);

It is possible that indexGPR is double due to DFG (e.g. DFG OSR exits and it becomes double because DFG compiler thinks this is better to hold it double).
Can we have a check for that? (if it is double, let&apos;s go to the operation path).

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3064
&gt; +    or8(regT2, AbsoluteAddress(&amp;metadata.m_enumeratorMetadata));

Ditto about DFG double.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3078
&gt; +    // Compute the offset.
&gt; +    emitGetVirtualRegister(index, regT1);
&gt; +    // If index is less than the enumerator&apos;s cached inline storage, then it&apos;s an inline access
&gt; +    Jump outOfLineAccess = branch32(AboveOrEqual, regT1, Address(regT2, JSPropertyNameEnumerator::cachedInlineCapacityOffset()));

Ditto about DFG double.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3101
&gt; +    emitGetVirtualRegister(index, regT1);

Why is it necessary? Soon after this, regT1 is overridden with `emitGetVirtualRegister(propertyName, regT1);`.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3140
&gt; +    emitGetVirtualRegister(mode, regT0);
&gt; +    or8(regT0, AbsoluteAddress(&amp;metadata.m_enumeratorMetadata));

Ditto about DFG double

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:988
&gt; +    auto mode = static_cast&lt;JSPropertyNameEnumerator::Mode&gt;(modeRegister.jsValue().asUInt32());

It is possible that DFG makes it double, so let&apos;s use asUInt32AsAnyInt

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:989
&gt; +    uint32_t index = indexRegister.jsValue().asUInt32();

Ditto.

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1014
&gt; +    auto mode = static_cast&lt;JSPropertyNameEnumerator::Mode&gt;(GET(bytecode.m_mode).jsValue().asUInt32());

Ditto

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1018
&gt; +    unsigned index = GET(bytecode.m_index).jsValue().asInt32();

Ditto.

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1030
&gt; +        } else

We do not need this else since the above branch finishes with RETURN_PROFILED.

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1040
&gt; +        // TODO Does this actually ever throw? Isn&apos;t string backed by a UUID?

Maybe, changing it to FIXME?

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1058
&gt; +    auto mode = static_cast&lt;JSPropertyNameEnumerator::Mode&gt;(GET(bytecode.m_mode).jsValue().asUInt32());

Ditto.

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1068
&gt; +            RETURN(jsBoolean(base-&gt;hasProperty(globalObject, GET(bytecode.m_index).jsValue().asUInt32())));

Ditto about asUInt32.

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1081
&gt; +    auto mode = static_cast&lt;JSPropertyNameEnumerator::Mode&gt;(GET(bytecode.m_mode).jsValue().asUInt32());

Ditto

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1090
&gt; +            RETURN(jsBoolean(base-&gt;hasOwnProperty(globalObject, GET(bytecode.m_index).jsValue().asUInt32())));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782465</commentid>
    <comment_count>24</comment_count>
      <attachid>435019</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-08-06 04:05:53 -0700</bug_when>
    <thetext>Comment on attachment 435019
Patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGClobberize.h:343
&gt; +    case EnumeratorNextUpdatePropertyName:

To define PureValue, you need to pass valid OpInfos too. In this node&apos;s case, seenModes info is missing in PureValue.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:-1124
&gt; -                        

Can we share the code with setJSArraySaneChainIfPossible?
It looks like this is very similar and having the exact same long comment.

&gt; Source/JavaScriptCore/dfg/DFGNode.h:3273
&gt; +    EnumeratorMetadata enumeratorMetadata()
&gt; +    {
&gt; +        return m_opInfo2.as&lt;EnumeratorMetadata&gt;();
&gt; +    }

How about returning OptionSet from this function?

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2481
&gt; +    JSValue result = bitwise_cast&lt;JSValue&gt;(static_cast&lt;uint64_t&gt;(mode) &lt;&lt; 32 | index | JSValue::NumberTag);

This is making broken JSInt32 (this pattern never appears in the valid number). I think we should mimic double&apos;s pattern instead.
For example, we can make it DoubleEncodeOffset | static_cast&lt;uint64_t&gt;(mode) &lt;&lt; 32 | index. This is better since this is still a valid JSValue double&apos;s bit pattern.

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2483
&gt; +    JSValue result = JSValue(mode, index);

I think we can do the same thing for 32bit too: I mean, let&apos;s just encode mode and index into double value bit pattern.
In 32bit case, we are not using offset. So, `uint64_t value = static_cast&lt;uint64_t&gt;(mode) &lt;&lt; 32 | index` can be a valid JSValue double pattern in 32bit, correct?
So, we can make DFG AI valid.

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2517
&gt; +    scope.assertNoException();

RETURN_IF_EXCEPTION(scope, { }); is better since there is terminated exception.

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2534
&gt; +        return JSValue::encode(jsBoolean(base.getObject()-&gt;hasProperty(globalObject, index)));

Use `jsCast&lt;JSObject*&gt;` instead of getObject since we already checked this is an object.

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2550
&gt; +        return JSValue::encode(jsBoolean(base.getObject()-&gt;hasOwnProperty(globalObject, index)));

Use `jsCast&lt;JSObject*&gt;` instead of getObject since we already checked this is an object.

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:473
&gt;              Edge child1 = m_graph.child(node, 0);

This clause does not include `EnumeratorGetByVal` while we are checking `node-&gt;op() == EnumeratorGetByVal`. Is it missing?

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:1233
&gt; +            // This can actually return a JS null but we branch of that case in the same basic block so we don&apos;t want to mess with
&gt; +            // fixup&apos;s logic.

I think we can make valid JSValue double bit pattern anytime, so we do not need to have this comment.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:2669
&gt; +        else

Add ASSERT for else case with expected format type.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:13490
&gt; +#if USE(JSVALUE64)
&gt; +        m_jit.move(TrustedImm64(JSValue::NumberTag | static_cast&lt;uint64_t&gt;(JSPropertyNameEnumerator::IndexedMode) &lt;&lt; 32), resultRegs.payloadGPR());
&gt; +        m_jit.or64(scratch.gpr(), resultRegs.payloadGPR());
&gt; +#else
&gt; +        m_jit.move(TrustedImm32(JSPropertyNameEnumerator::IndexedMode), resultRegs.tagGPR());
&gt; +#endif

Ditto. We should make it valid double bit pattern.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:13519
&gt; +#if USE(JSVALUE64)
&gt; +        m_jit.or64(TrustedImm64(JSValue::NumberTag | static_cast&lt;uint64_t&gt;(JSPropertyNameEnumerator::OwnStructureMode) &lt;&lt; 32), resultRegs.payloadGPR());
&gt; +#else
&gt; +        m_jit.move(TrustedImm32(JSPropertyNameEnumerator::OwnStructureMode), resultRegs.tagGPR());
&gt; +#endif

Ditto. We should make it valid double bit pattern.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:13560
&gt; +    m_jit.rshift64(pairGPR, TrustedImm32(32), resultGPR);

We have double-offset (or NumberTag in the current code). In ARM64, we can use bit-extract to get appropriate bits easily.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13063
&gt; +            m_out.appendTo(increment);

Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13096
&gt; +            m_out.appendTo(increment);

Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13102
&gt; +            setJSValue(m_out.bitOr(m_out.zeroExt(index, Int64), m_out.constInt64(JSValue::NumberTag | static_cast&lt;uint64_t&gt;(JSPropertyNameEnumerator::OwnStructureMode) &lt;&lt; 32)));

Should we remove some bits from NumberTag here? If we use full NumberTag, the generated bit pattern becomes broken Int32 (this bit pattern never appears in the usual JSValue). I think we should make it look like some sort of Encoded Double.
Like adding double-offset instead.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13169
&gt; +                cachedNameResult = m_out.anchor(m_out.zeroExtPtr(m_out.loadPtr(m_out.baseIndex(m_heaps.WriteBarrierBuffer_bufferContents.atAnyIndex(), namesVector, m_out.zeroExt(index, Int64), ScalePtr))));

m_out.zeroExtPtr is not necessary since this is the result of loadPtr.

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

Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13189
&gt; +        LValue result = m_out.phi(Int64);
&gt; +        ASSERT(outOfBoundsResult || cachedNameResult || operationResult);
&gt; +        m_out.addIncomingToPhiIfSet(result, outOfBoundsResult, cachedNameResult, operationResult);

Why not using existing Vector&lt;ValueFromBlock, N&gt; results, and m_out.phi(Int64, results)?
We can just append LValue only when it exists. And then we can pass this vector to `m_out.phi`. So we do not need to check whether each ValueFromBlock is nullptr or not.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13223
&gt; +        m_out.appendTo(checkIsCellBlock);

Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13294
&gt; +        LValue result = m_out.phi(Int64, genericICResult, outOfLineResult, inlineResult);
&gt; +        if (badStructureSlowPathResult)
&gt; +            m_out.addIncomingToPhi(result, badStructureSlowPathResult);
&gt; +        setJSValue(result);

Ditto. Why not using existing Vector&lt;ValueFromBlock, N&gt; results, and m_out.phi(Int64, results)?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13315
&gt; +        m_out.appendTo(isNamedBlock);

Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1029
&gt; +            RETURN_PROFILED(baseValue.getObject()-&gt;getDirect(index &lt; enumerator-&gt;cachedInlineCapacity() ? index : index - enumerator-&gt;cachedInlineCapacity() + firstOutOfLineOffset));

Let&apos;s just use `jsCast&lt;JSObject*&gt;` instead of getObject() since we know that this is JSObject*.

&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.cpp:177
&gt; +        scope.assertNoException();

Since there is termination exception, I suggest just using RETURN_IF_EXCEPTION(scope, nullptr);

&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.cpp:202
&gt; +            scope.assertNoException();

Since there is termination exception, I suggest just using RETURN_IF_EXCEPTION(scope, nullptr);

&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.cpp:209
&gt; +        scope.assertNoException();

Since there is termination exception, I suggest just using RETURN_IF_EXCEPTION(scope, nullptr);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782725</commentid>
    <comment_count>25</comment_count>
      <attachid>435019</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-08-07 13:18:14 -0700</bug_when>
    <thetext>Comment on attachment 435019
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:8405
&gt;&gt; +            auto seenModes = metadata.m_enumeratorMetadata;
&gt; 
&gt; Lets&apos; align it to the other like `auto seenModes = OptionSet&lt;JSPropertyNameEnumerator::Mode&gt;::fromRaw(metadata.m_enumeratorMetadata);`

Done.

&gt;&gt; Source/JavaScriptCore/dfg/DFGNode.h:3273
&gt;&gt; +    }
&gt; 
&gt; How about returning OptionSet from this function?

Nice! done.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2481
&gt;&gt; +    JSValue result = bitwise_cast&lt;JSValue&gt;(static_cast&lt;uint64_t&gt;(mode) &lt;&lt; 32 | index | JSValue::NumberTag);
&gt; 
&gt; This is making broken JSInt32 (this pattern never appears in the valid number). I think we should mimic double&apos;s pattern instead.
&gt; For example, we can make it DoubleEncodeOffset | static_cast&lt;uint64_t&gt;(mode) &lt;&lt; 32 | index. This is better since this is still a valid JSValue double&apos;s bit pattern.

Yeah, I think you&apos;re right. I&apos;ll switch it to `DoubleEncodeOffset | static_cast&lt;uint64_t&gt;(mode) &lt;&lt; 32 | index`

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2483
&gt;&gt; +    JSValue result = JSValue(mode, index);
&gt; 
&gt; I think we can do the same thing for 32bit too: I mean, let&apos;s just encode mode and index into double value bit pattern.
&gt; In 32bit case, we are not using offset. So, `uint64_t value = static_cast&lt;uint64_t&gt;(mode) &lt;&lt; 32 | index` can be a valid JSValue double pattern in 32bit, correct?
&gt; So, we can make DFG AI valid.

I think this is a double in 32-bit though? It&apos;s in double form as long as the tag is below the last explicit tag (-8 I believe).

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2485
&gt; +    ASSERT(result.isNumber());

I&apos;ll change this assert to `isDouble()` too.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2517
&gt;&gt; +    scope.assertNoException();
&gt; 
&gt; RETURN_IF_EXCEPTION(scope, { }); is better since there is terminated exception.

What&apos;s the value in having assertNoException then? Seems like it&apos;s mostly pointless and will probably lead to bugs.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2534
&gt;&gt; +        return JSValue::encode(jsBoolean(base.getObject()-&gt;hasProperty(globalObject, index)));
&gt; 
&gt; Use `jsCast&lt;JSObject*&gt;` instead of getObject since we already checked this is an object.

Seems like the extra check should get eliminated but I&apos;ll make the change.

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:2550
&gt;&gt; +        return JSValue::encode(jsBoolean(base.getObject()-&gt;hasOwnProperty(globalObject, index)));
&gt; 
&gt; Use `jsCast&lt;JSObject*&gt;` instead of getObject since we already checked this is an object.

Ditto.

&gt;&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:473
&gt;&gt;              Edge child1 = m_graph.child(node, 0);
&gt; 
&gt; This clause does not include `EnumeratorGetByVal` while we are checking `node-&gt;op() == EnumeratorGetByVal`. Is it missing?

Ah, yeah, that&apos;s leftover from when I was implementing EnumeratorGetByVal by just copying the logic of GetByVal. But EnumeratorGetByVal accesses non-indexed properties so you can&apos;t infer anything about what the produced value will be based on the indexing type, like we can for GetByVal. So I removed most of the code but I guess I left that check behind.

Will remove.

&gt;&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:1233
&gt;&gt; +            // fixup&apos;s logic.
&gt; 
&gt; I think we can make valid JSValue double bit pattern anytime, so we do not need to have this comment.

Yeah, that&apos;s a stale comment. Will remove.

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:1239
&gt; +            // FIXME: We should have a value profile whether we&apos;ve ever actually seen a symbol/string.

This is also stale, removing.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:2669
&gt;&gt; +        else
&gt; 
&gt; Add ASSERT for else case with expected format type.

Done.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:13490
&gt;&gt; +#endif
&gt; 
&gt; Ditto. We should make it valid double bit pattern.

Done.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:13519
&gt;&gt; +#endif
&gt; 
&gt; Ditto. We should make it valid double bit pattern.

Done.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:13560
&gt;&gt; +    m_jit.rshift64(pairGPR, TrustedImm32(32), resultGPR);
&gt; 
&gt; We have double-offset (or NumberTag in the current code). In ARM64, we can use bit-extract to get appropriate bits easily.

I&apos;ll add the ARM64 flavor. I&apos;m not sure what you mean by the NumberTag comment though.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13063
&gt;&gt; +            m_out.appendTo(increment);
&gt; 
&gt; Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

Nope, lastNext will always be preserved as long as no-one overwrites it via the 2 argument `appendTo`. i.e. as long as any of these functions never calls the 2 argument `appendTo` last next should be preserved.  

FWIW, I never really understood why so much code here uses the lastNext idiom, I personally find it very confusing.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13096
&gt;&gt; +            m_out.appendTo(increment);
&gt; 
&gt; Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

Ditto.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13102
&gt;&gt; +            setJSValue(m_out.bitOr(m_out.zeroExt(index, Int64), m_out.constInt64(JSValue::NumberTag | static_cast&lt;uint64_t&gt;(JSPropertyNameEnumerator::OwnStructureMode) &lt;&lt; 32)));
&gt; 
&gt; Should we remove some bits from NumberTag here? If we use full NumberTag, the generated bit pattern becomes broken Int32 (this bit pattern never appears in the usual JSValue). I think we should make it look like some sort of Encoded Double.
&gt; Like adding double-offset instead.

Done.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13169
&gt;&gt; +                cachedNameResult = m_out.anchor(m_out.zeroExtPtr(m_out.loadPtr(m_out.baseIndex(m_heaps.WriteBarrierBuffer_bufferContents.atAnyIndex(), namesVector, m_out.zeroExt(index, Int64), ScalePtr))));
&gt; 
&gt; m_out.zeroExtPtr is not necessary since this is the result of loadPtr.

I added it to help with any future arm64_32 FTL.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13185
&gt;&gt; +            m_out.appendTo(continuation);
&gt; 
&gt; Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

Ditto.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13189
&gt;&gt; +        m_out.addIncomingToPhiIfSet(result, outOfBoundsResult, cachedNameResult, operationResult);
&gt; 
&gt; Why not using existing Vector&lt;ValueFromBlock, N&gt; results, and m_out.phi(Int64, results)?
&gt; We can just append LValue only when it exists. And then we can pass this vector to `m_out.phi`. So we do not need to check whether each ValueFromBlock is nullptr or not.

That&apos;s a good idea! Changed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13223
&gt;&gt; +        m_out.appendTo(checkIsCellBlock);
&gt; 
&gt; Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

Ditto.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13294
&gt;&gt; +        setJSValue(result);
&gt; 
&gt; Ditto. Why not using existing Vector&lt;ValueFromBlock, N&gt; results, and m_out.phi(Int64, results)?

Good idea. done.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:13315
&gt;&gt; +        m_out.appendTo(isNamedBlock);
&gt; 
&gt; Don&apos;t we need to get lastNext here and append it later as m_out.appendTo(continuation, lastNext) ?

Ditto.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3017
&gt;&gt; +        add64(TrustedImm32(1), indexGPR);
&gt; 
&gt; It is possible that indexGPR is double due to DFG (e.g. DFG OSR exits and it becomes double because DFG compiler thinks this is better to hold it double).
&gt; Can we have a check for that? (if it is double, let&apos;s go to the operation path).

Per, discussion offline. Since we know the variable associated with the index will only have one SetLocal in DFG and that SetLocal will always see a `SpecInt32Any` we will always OSR exit with an int32 form.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3064
&gt;&gt; +    or8(regT2, AbsoluteAddress(&amp;metadata.m_enumeratorMetadata));
&gt; 
&gt; Ditto about DFG double.

Ditto.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3078
&gt;&gt; +    Jump outOfLineAccess = branch32(AboveOrEqual, regT1, Address(regT2, JSPropertyNameEnumerator::cachedInlineCapacityOffset()));
&gt; 
&gt; Ditto about DFG double.

Ditto.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3101
&gt;&gt; +    emitGetVirtualRegister(index, regT1);
&gt; 
&gt; Why is it necessary? Soon after this, regT1 is overridden with `emitGetVirtualRegister(propertyName, regT1);`.

Oh, the emitGetVirtualRegister(propertyName, regT1); should be right after the structureMismatch link above. But I actually think we can load the index into regT3 and not touch propertyName/regT1.

The point of this load is to provide the IC the int32 value rather than the propertyName JSString for IndexedMode. That should be faster, at least as long as there&apos;s not indexed getters or something weird.

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:3140
&gt;&gt; +    or8(regT0, AbsoluteAddress(&amp;metadata.m_enumeratorMetadata));
&gt; 
&gt; Ditto about DFG double

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:988
&gt;&gt; +    auto mode = static_cast&lt;JSPropertyNameEnumerator::Mode&gt;(modeRegister.jsValue().asUInt32());
&gt; 
&gt; It is possible that DFG makes it double, so let&apos;s use asUInt32AsAnyInt

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:989
&gt;&gt; +    uint32_t index = indexRegister.jsValue().asUInt32();
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1014
&gt;&gt; +    auto mode = static_cast&lt;JSPropertyNameEnumerator::Mode&gt;(GET(bytecode.m_mode).jsValue().asUInt32());
&gt; 
&gt; Ditto

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1018
&gt;&gt; +    unsigned index = GET(bytecode.m_index).jsValue().asInt32();
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1029
&gt;&gt; +            RETURN_PROFILED(baseValue.getObject()-&gt;getDirect(index &lt; enumerator-&gt;cachedInlineCapacity() ? index : index - enumerator-&gt;cachedInlineCapacity() + firstOutOfLineOffset));
&gt; 
&gt; Let&apos;s just use `jsCast&lt;JSObject*&gt;` instead of getObject() since we know that this is JSObject*.

Ditto. Made the change anyway.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1030
&gt;&gt; +        } else
&gt; 
&gt; We do not need this else since the above branch finishes with RETURN_PROFILED.

True fixed.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1040
&gt;&gt; +        // TODO Does this actually ever throw? Isn&apos;t string backed by a UUID?
&gt; 
&gt; Maybe, changing it to FIXME?

Per the discussion on TerminationException we should keep the CHECK_EXCEPTION() and I&apos;ll delete this comment.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1058
&gt;&gt; +    auto mode = static_cast&lt;JSPropertyNameEnumerator::Mode&gt;(GET(bytecode.m_mode).jsValue().asUInt32());
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1068
&gt;&gt; +            RETURN(jsBoolean(base-&gt;hasProperty(globalObject, GET(bytecode.m_index).jsValue().asUInt32())));
&gt; 
&gt; Ditto about asUInt32.

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1081
&gt;&gt; +    auto mode = static_cast&lt;JSPropertyNameEnumerator::Mode&gt;(GET(bytecode.m_mode).jsValue().asUInt32());
&gt; 
&gt; Ditto

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/CommonSlowPaths.cpp:1090
&gt;&gt; +            RETURN(jsBoolean(base-&gt;hasOwnProperty(globalObject, GET(bytecode.m_index).jsValue().asUInt32())));
&gt; 
&gt; Ditto.

Ditto.

&gt;&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.cpp:177
&gt;&gt; +        scope.assertNoException();
&gt; 
&gt; Since there is termination exception, I suggest just using RETURN_IF_EXCEPTION(scope, nullptr);

I don&apos;t think we can have a TerminationException here. hasEnumerableProperty returns false if any exception is thrown.

&gt;&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.cpp:202
&gt;&gt; +            scope.assertNoException();
&gt; 
&gt; Since there is termination exception, I suggest just using RETURN_IF_EXCEPTION(scope, nullptr);

Yeah, I guess that&apos;s fair, I&apos;ll change this code.

&gt;&gt; Source/JavaScriptCore/runtime/JSPropertyNameEnumerator.cpp:209
&gt;&gt; +        scope.assertNoException();
&gt; 
&gt; Since there is termination exception, I suggest just using RETURN_IF_EXCEPTION(scope, nullptr);

I don&apos;t think we can have a TerminationException here. hasEnumerableProperty returns false if any exception is thrown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782727</commentid>
    <comment_count>26</comment_count>
      <attachid>435135</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2021-08-07 13:21:08 -0700</bug_when>
    <thetext>Created attachment 435135
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1782733</commentid>
    <comment_count>27</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-08-07 14:39:06 -0700</bug_when>
    <thetext>Committed r280760 (240345@main): &lt;https://commits.webkit.org/240345@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 435135.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433583</attachid>
            <date>2021-07-15 07:51:29 -0700</date>
            <delta_ts>2021-07-26 15:27:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-227989-20210715105128.patch</filename>
            <type>text/plain</type>
            <size>237505</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5NzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NDc5MTRhNzhlZTE1ZmE2NzY5NWNiOTA1ZmFjNzc2MGExNWUwMjUwLi4yMGRjMjBiYWZkNGZiN2Yz
NTZlMWU0YzFlZWYxYzhiNjJiZWQ5OTU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNzYgQEAKKzIwMjEtMDctMTUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0
NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
SW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1w
bCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpyZXdyaXRlT3Ap
OgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZv
ckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9w
SW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojps
b2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAg
IChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29u
dGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0
ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0
dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJ
bkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVy
YXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0OjppbmRleCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAg
ICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6
OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBk
ZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RP
U1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxl
KToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNB
cnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0
YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToK
KyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0
QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVy
YXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9j
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAg
IChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3Rv
cmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdl
T3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3Bl
cmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6
Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5
OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVj
a3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5
UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dl
ckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNM
LnJiOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyLmg6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRv
cj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3By
b3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJv
cGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0
KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oOgorCiAyMDIx
LTA3LTA4ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IGRpc3BsYXktcHJvZmlsZXItb3V0cHV0IHNob3VsZCBiZSBhYmxlIHRvIHByaW50IGRpc2Fzc2Vt
Ymx5IGZvciB0aGUgRlRMCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggYTI2NTUzYTViY2UwZmNmN2Jm
MDgwNzJmNTk4MmM5YjUwNzYyMGFlZi4uZGFlY2JlNzI3NTczNmJlODRlOTlmNzhmNTA3ZTg0Njcy
OGNjMjc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBwdWJsaWM6
CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2Us
IGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJlZ2lzdGVy
SUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBv
cjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAgdm9pZCBv
cjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2Vt
Ymxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYgKzY3MSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2FzdDxpbnQ4
X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMy
IGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgb3I4
KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZvaWQgb3Iz
MihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDMzNDcyZGQ5MzFhOTdi
MDliOTdkYzkyZjUxMWU2YzIyZGNhMzIxMjIuLjY5MWI2NTBkYjQwOTlmNzQxZDI5Mzc2ZmRmM2Qw
N2NjNjVmNmIxNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1YmxpYzoKICAg
ICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9CiAKLSAg
ICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKLSAg
ICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJl
Z2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7
Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1f
cHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBUcnVz
dGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3ZlKHNyYywg
ZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB1
cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAg
ICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggMTgyNWVjMmFkNWEw
MzM5ZDRmM2VmMTk1ZGQ2ZjlmY2YyMmQwNjQ5Yy4uOTcyOTYzMGRiZGJhMzkwZDYzNTQwMjgxY2M0
YmQxNmUzOTM2NjVlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCkBAIC0yOSw2ICsyOSw3IEBAIHR5cGVzIFsKICAgICA6RGVidWdIb29rVHlw
ZSwKICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCisgICAgOkVu
dW1lcmF0b3JNZXRhZGF0YSwKICAgICA6R2V0QnlJZE1vZGUsCiAgICAgOkdldEJ5SWRNb2RlTWV0
YWRhdGEsCiAgICAgOkdldEJ5VmFsSGlzdG9yeSwKQEAgLTEyNDEsNiArMTI0Miw2NSBAQCBvcCA6
dG9faW5kZXhfc3RyaW5nLAogCiBvcCA6dW5yZWFjaGFibGUKIAorb3AgOmVudW1lcmF0b3JfbmV4
dCwKKyAgICBhcmdzOiB7CisgICAgICAgICMgb3V0CisgICAgICAgIHByb3BlcnR5TmFtZTogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICAjIGluL291dAorICAgICAgICBtb2RlOiBWaXJ0dWFsUmVn
aXN0ZXIsICMgV2lsbCBhbHdheXMgYmUgYSBKUyBVSW50MzIgcmVwcmVzZW50aW5nIGEgSlNGb3JJ
bk1vZGUuCisgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsICMgR2V0cyByZXNldCB0byB6
ZXJvIGV2ZXJ5IHRpbWUgbW9kZSBjaGFuZ2VzLgorICAgICAgICAjIGluCisgICAgICAgIGJhc2U6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAor
ICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAorICAg
IH0KKworb3AgOmVudW1lcmF0b3JfZ2V0X2J5X3ZhbCwKKyAgICBhcmdzOiB7CisgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAg
ICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1l
cmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAorICAg
IH0KKworb3AgOmVudW1lcmF0b3JfaW5fYnlfdmFsLAorICAgIGFyZ3M6IHsKKyAgICAgICAgZHN0
OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxS
ZWdpc3RlciwKKyAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTog
RW51bWVyYXRvck1ldGFkYXRhLAorICAgIH0KKworb3AgOmVudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSwKKyAgICBhcmdzOiB7CisgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwK
KyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGluZGV4OiBW
aXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKKyAgICB9
CisKIG9wIDpjcmVhdGVfcmVzdCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJl
Z2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlVXNlRGVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5jcHAKaW5kZXggMDc1NjE4OTlhNjIwOWUzNmNiZmE3MmEwNTRmMTUxMmQ2NzM4YzBjYy4u
OWI0MTU5M2YzNDRkODdjNGY1MDZmYzRiMTY1MDRhMWM4ZjYxMDE3NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCkBAIC0yOTUsNiAr
Mjk1LDExIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFy
Z3VtZW50KQogCisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwg
ZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBw
cm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBV
U0VTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUs
IGluZGV4LCBlbnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5
bWJvbENhbGwsIGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUp
OwpAQCAtNTY3LDYgKzU3MiwxMSBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleElt
cGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogCiAgICAgREVG
UyhPcENhdGNoLCBleGNlcHRpb24sIHRocm93blZhbHVlKQogCisgICAgREVGUyhPcEVudW1lcmF0
b3JOZXh0LCBwcm9wZXJ0eU5hbWUsIG1vZGUsIGluZGV4KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
R2V0QnlWYWwsIGRzdCkKKyAgICBERUZTKE9wRW51bWVyYXRvckluQnlWYWwsIGRzdCkKKyAgICBE
RUZTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBkc3QpCisKICAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAppbmRleCBmY2ZhMjkyYWQwNGVmMTA2MDUyNWUzN2YxYTg4NjYxNGQzNTQ4NzQ4Li45
OWEzNmYxODFhZjMxZmRlZmRhYmFhMDM2YjYwNzk0MGZjZDdjYTlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNTAzLDYgKzUwMywxMSBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGluawogCiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxl
KQogCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElO
SyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRv
ckhhc093blByb3BlcnR5LCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5
VmFsLCBwcm9maWxlKQorCiAgICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBM
SU5LKE9wVGFpbENhbGwsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmls
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAppbmRleCA0ODZjMTUxMmE5
ODQzMGExZDMyNGI2Mzg1YTU1M2MxZjk1ZGY0ZDE5Li45N2I4NTZkNWQxZjNiMDViNDEzM2E1NzFh
YTUwYWU2MzMyZTNmNGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CkBAIC05OSw2ICs5OSw3IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JN
YXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BU
YWlsQ2FsbEZvcndhcmRBcmd1bWVudHMpIFwKICAgICBtYWNybyhPcENvbnN0cnVjdFZhcmFyZ3Mp
IFwKICAgICBtYWNybyhPcEdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlW
YWwpIFwKICAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCiAgICAgbWFjcm8oT3BHZXRCeUlk
KSBcCiAgICAgbWFjcm8oT3BHZXRCeUlkV2l0aFRoaXMpIFwKQEAgLTEzNiw2ICsxMzcsMTAgQEAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxlbmd0aCA9IFdU
Rjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcEluQnlWYWwpIFwKICAgICBtYWNy
byhPcFB1dEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BQdXRCeVZhbERpcmVjdCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvck5leHQpIFwKKyAgICBtYWNybyhPcEVudW1lcmF0b3JHZXRCeVZhbCkgXAor
ICAgIG1hY3JvKE9wRW51bWVyYXRvckluQnlWYWwpIFwKKyAgICBtYWNybyhPcEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZX0FM
TE9DQVRJT05fUFJPRklMRShtYWNybykgXAogICAgIG1hY3JvKE9wTmV3QXJyYXkpIFwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKaW5kZXggNzM5MGQ1MmM0YWUxYWExYzNlMjI2Yzk1MjJmN2I0NDY3OWM5NmRlMy4u
ODQ5MGMyNjg5ZDE3YzJjMmNmMjVjNjk5YzQwYzE0ODQ1MWM1MDA4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKQEAgLTE1MDMsMTEgKzE1MDMsMTEgQEAgdW5zaWduZWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRXaWRlSnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKgogICAgIHJl
dHVybiBtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6cmVjb3JkSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbkZvckluTG9vcChTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQmIHN0cnVjdHVyZUNvbnRleHQsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFi
ZWwmIGdlbmVyaWNQYXRoKQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duUHJv
cGVydHlJbkZvckluTG9vcChGb3JJbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIGJyYW5jaE9m
ZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKQogewogICAgIFJFTEVBU0VfQVNTRVJUKGdlbmVyaWNQ
YXRoLmlzQm91bmQoKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWdlbmVyaWNQYXRoLmlzRm9yd2Fy
ZCgpKTsKLSAgICBzdHJ1Y3R1cmVDb250ZXh0LmFkZEhhc093blByb3BlcnR5SnVtcChicmFuY2hP
ZmZzZXQsIGdlbmVyaWNQYXRoLmxvY2F0aW9uKCkpOworICAgIGNvbnRleHQuYWRkSGFzT3duUHJv
cGVydHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CiB9CiAKIGJv
b2wgQnl0ZWNvZGVHZW5lcmF0b3I6Omhhc0NvbnN0YW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50
KSBjb25zdApAQCAtMjU4MSwxMiArMjU4MSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5CeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHByb3BlcnR5CiAg
ICAgICAgIGlmIChjb250ZXh0LmxvY2FsKCkgIT0gcHJvcGVydHkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBpZiAoIWNvbnRleHQuaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSkK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3Ry
dWN0dXJlQ29udGV4dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAg
ICAgT3BJblN0cnVjdHVyZVByb3BlcnR5OjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4odGhpcywg
ZHN0LCBiYXNlLCBwcm9wZXJ0eSwgc3RydWN0dXJlQ29udGV4dC5lbnVtZXJhdG9yKCkpOwotICAg
ICAgICBzdHJ1Y3R1cmVDb250ZXh0LmFkZEluSW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQo
KSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICBPcEVudW1lcmF0b3JJbkJ5VmFsOjplbWl0
PE9wY29kZVNpemU6OldpZGUzMj4odGhpcywgZHN0LCBiYXNlLCBjb250ZXh0Lm1vZGUoKSwgcHJv
cGVydHksIGNvbnRleHQucHJvcGVydHlPZmZzZXQoKSwgY29udGV4dC5lbnVtZXJhdG9yKCkpOwor
ICAgICAgICBjb250ZXh0LmFkZEluSW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJv
cGVydHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtMjczNCwy
NCArMjczMCwyNSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUgogICAgICAgICBpZiAoY29udGV4
dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
aWYgKGNvbnRleHQuaXNJbmRleGVkRm9ySW5Db250ZXh0KCkpIHsKLSAgICAgICAgICAgIGF1dG8m
IGluZGV4ZWRDb250ZXh0ID0gY29udGV4dC5hc0luZGV4ZWRGb3JJbkNvbnRleHQoKTsKLSAgICAg
ICAgICAgIGtpbGwoZHN0KTsKLSAgICAgICAgICAgIGlmIChPcEdldEJ5VmFsOjpjaGVja1dpdGhv
dXRNZXRhZGF0YUlEPE9wY29kZVNpemU6Ok5hcnJvdz4odGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0
eSkpCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFsbGVzdFNpemVSZXF1
aXJlbWVudDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRl
eHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChPcEdldEJ5VmFsOjpjaGVja1dpdGhv
dXRNZXRhZGF0YUlEPE9wY29kZVNpemU6OldpZGUxNj4odGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0
eSkpCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFsbGVzdFNpemVSZXF1
aXJlbWVudDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRl
eHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZh
bDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRl
eHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBpbmRleGVkQ29udGV4dC5hZGRHZXRJbnN0KG1fbGFz
dEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZHN0OwotICAgICAgICB9CisgICAgICAgIC8vIGlmIChjb250ZXh0LmlzSW5kZXhlZEZv
ckluQ29udGV4dCgpKSB7CisgICAgICAgIC8vICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNv
bnRleHQuYXNJbmRleGVkRm9ySW5Db250ZXh0KCk7CisgICAgICAgIC8vICAgICBraWxsKGRzdCk7
CisgICAgICAgIC8vICAgICBpZiAoT3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxP
cGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQorICAgICAgICAv
LyAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bj
b2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkp
OworICAgICAgICAvLyAgICAgZWxzZSBpZiAoT3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRh
dGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQorICAg
ICAgICAvLyAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1l
bnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0Lmlu
ZGV4KCkpOworICAgICAgICAvLyAgICAgZWxzZQorICAgICAgICAvLyAgICAgICAgIE9wR2V0QnlW
YWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGluZGV4ZWRDb250
ZXh0LmluZGV4KCkpOworICAgICAgICAvLyAgICAgaW5kZXhlZENvbnRleHQuYWRkR2V0SW5zdCht
X2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAv
LyAgICAgcmV0dXJuIGRzdDsKKyAgICAgICAgLy8gfQogCi0gICAgICAgIC8vIFdlIGNhbm5vdCBk
byB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9PiBP
cEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFsbG9j
YXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCA9
IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJlY3RQ
bmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwgcHJv
cGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVtZXJh
dG9yKCkpOworICAgICAgICAvLyAvLyBXZSBjYW5ub3QgZG8gdGhlIGFib3ZlIG9wdGltaXphdGlv
biBoZXJlIHNpbmNlIE9wR2V0RGlyZWN0UG5hbWUgPT4gT3BHZXRCeVZhbCBjb252ZXJzaW9uIGlu
dm9sdmVzIGRpZmZlcmVudCBtZXRhZGF0YSBJRCBhbGxvY2F0aW9uLgorICAgICAgICAvLyBTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQmIHN0cnVjdHVyZUNvbnRleHQgPSBjb250ZXh0LmFzU3RydWN0dXJl
Rm9ySW5Db250ZXh0KCk7CisgICAgICAgIC8vIE9wR2V0RGlyZWN0UG5hbWU6OmVtaXQ8T3Bjb2Rl
U2l6ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVD
b250ZXh0LmluZGV4KCksIHN0cnVjdHVyZUNvbnRleHQuZW51bWVyYXRvcigpKTsKIAotICAgICAg
ICBzdHJ1Y3R1cmVDb250ZXh0LmFkZEdldEluc3QobV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCks
IHByb3BlcnR5LT5pbmRleCgpKTsKKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8
T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgp
LCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3Io
KSk7CisgICAgICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQo
KSwgcHJvcGVydHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAt
NDU4Miw2ICs0NTc5LDE3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFz
T3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpCiAgICAgcmV0dXJuIGRz
dDsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JOZXh0KFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogbW9kZSwgUmVnaXN0ZXJJRCogaW5kZXgs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpCit7CisgICAgT3BFbnVt
ZXJhdG9yTmV4dDo6ZW1pdCh0aGlzLCBwcm9wZXJ0eU5hbWUsIG1vZGUsIGluZGV4LCBiYXNlLCBl
bnVtZXJhdG9yKTsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVt
ZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBS
ZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGlu
ZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQoreworICAgIE9wRW51bWVyYXRvckhhc093blBy
b3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwg
ZW51bWVyYXRvcik7CisgICAgcmV0dXJuIGRzdDsKK30KKwogUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlKQogewogICAgIE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yOjplbWl0KHRoaXMs
IGRzdCwgYmFzZSk7CkBAIC00NjQ4LDIyICs0NjU2LDIyIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SXNFbXB0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykK
ICAgICByZXR1cm4gZHN0OwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhl
ZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUo
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IEluZGV4ZWRG
b3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgaW5kZXhSZWdpc3RlciwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7Ci19CisvLyB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZv
ckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlcikKKy8vIHsKKy8vICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCisvLyAgICAgICAgIHJldHVy
bjsKKy8vICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9u
cygpLnNpemUoKTsKKy8vICAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigq
bmV3IEluZGV4ZWRGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgaW5kZXhSZWdpc3RlciwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpKSk7CisvLyB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6
OnBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCi17Ci0gICAg
aWYgKCFsb2NhbFJlZ2lzdGVyKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgYm9keUJ5
dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250
ZXh0U3RhY2subGFzdCgpLT5hc0luZGV4ZWRGb3JJbkNvbnRleHQoKS5maW5hbGl6ZSgqdGhpcywg
bV9jb2RlQmxvY2suZ2V0KCksIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0gICAgbV9mb3JJbkNv
bnRleHRTdGFjay5yZW1vdmVMYXN0KCk7Ci19CisvLyB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpw
b3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQorLy8geworLy8g
ICAgIGlmICghbG9jYWxSZWdpc3RlcikKKy8vICAgICAgICAgcmV0dXJuOworLy8gICAgIHVuc2ln
bmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKKy8vICAg
ICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+YXNJbmRleGVkRm9ySW5Db250ZXh0KCkuZmlu
YWxpemUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwor
Ly8gICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOworLy8gfQogCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0aW9uTGV4aWNhbEVudmly
b25tZW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CkBAIC00NzY4LDIwICs0Nzc2
LDM3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXRUaGlzVG9BcnJvd0Z1bmN0aW9u
Q29udGV4dFNjb3BlKCkKICAgICB9CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hT
dHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQq
IGluZGV4UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQq
IGVudW1lcmF0b3JSZWdpc3Rlciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxl
KQorLy8gdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBz
dGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUpCisvLyB7CisvLyAgICAgaWYgKCFs
b2NhbFJlZ2lzdGVyKQorLy8gICAgICAgICByZXR1cm47CisvLyAgICAgdW5zaWduZWQgYm9keUJ5
dGVjb2RlU3RhcnRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7CisvLyAgICAgbV9mb3JJ
bkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5ldyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQo
bG9jYWxSZWdpc3RlciwgaW5kZXhSZWdpc3RlciwgcHJvcGVydHlSZWdpc3RlciwgZW51bWVyYXRv
clJlZ2lzdGVyLCBiYXNlVmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOworLy8g
fQorCisvLyB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCisvLyB7CisvLyAgICAgaWYgKCFsb2NhbFJlZ2lzdGVy
KQorLy8gICAgICAgICByZXR1cm47CisvLyAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zm
c2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOworLy8gICAgIG1fZm9ySW5Db250ZXh0U3RhY2su
bGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVC
bG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKKy8vICAgICBtX2ZvckluQ29udGV4
dFN0YWNrLnJlbW92ZUxhc3QoKTsKKy8vIH0KKwordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVz
aEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVy
dHlOYW1lUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0UmVnaXN0ZXIsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3JSZWdpc3RlciwgUmVnaXN0ZXJJRCogbW9kZVJlZ2lzdGVyLCBzdGQ6
Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lz
dGVyKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZz
ZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBl
bmQoYWRvcHRSZWYoKm5ldyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgaW5k
ZXhSZWdpc3RlciwgcHJvcGVydHlSZWdpc3RlciwgZW51bWVyYXRvclJlZ2lzdGVyLCBiYXNlVmFy
aWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOworICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIHByb3Bl
cnR5TmFtZVJlZ2lzdGVyLCBwcm9wZXJ0eU9mZnNldFJlZ2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0
ZXIsIG1vZGVSZWdpc3RlciwgYmFzZVZhcmlhYmxlLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkp
KTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZShS
ZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wRm9y
SW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQogewogICAgIGlmICghbG9jYWxSZWdp
c3RlcikKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNl
dCA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3Qo
KS0+YXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKS5maW5hbGl6ZSgqdGhpcywgbV9jb2RlQmxvY2su
Z2V0KCksIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5s
YXN0KCktPmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKICAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIApAQCAt
NTM4NCwzNCArNTQwOSw3IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRPcHRpb25hbENo
ZWNrKFJlZ2lzdGVySUQqIHNyYykKICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWRP
ck51bGwobmV3VGVtcG9yYXJ5KCksIHNyYyksIG1fb3B0aW9uYWxDaGFpblRhcmdldFN0YWNrLmxh
c3QoKS5nZXQoKSk7CiB9CiAKLXZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2Nr
LCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCi17Ci0gICAgLy8gTGV4aWNhbGx5IGlu
dmFsaWRhdGluZyBGb3JJbkNvbnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9u
bHkgb2NjdXJzIGlmCi0gICAgLy8gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBp
cyB0cnVlOgotICAgIC8vCi0gICAgLy8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBp
cyByZS1hc3NpZ25lZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AuCi0gICAgLy8gKDIpIFRo
ZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29w
ZSBvZiB0aGUgZnVuY3Rpb24uCi0gICAgLy8KLSAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBv
Y2N1ciBzdWZmaWNpZW50bHkgcmFyZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxl
IG9mCi0gICAgLy8gImFuYWx5c2lzIiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRp
ZG4ndCB3YW50IHRvIGRvIHRoaXMsIHdlIHdvdWxkIGVpdGhlciBoYXZlCi0gICAgLy8gdG8gcGVy
Zm9ybSBzb21lIGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29w
IGl0ZXJhdGlvbiB2YXJpYWJsZSB3YXMKLSAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUg
dG8gcmVzb3J0IHRvIHJ1bnRpbWUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJl
ZW4KLSAgICAvLyByZWFzc2lnbmVkIGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgotCi0gICAgZm9y
ICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyBpc1ZhbGlkKCkg
JiYgb2Zmc2V0IDwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0OykgewotICAgICAgICBhdXRvIGluc3Ry
dWN0aW9uID0gZ2VuZXJhdG9yLmluc3RydWN0aW9ucygpLmF0KG9mZnNldCk7Ci0gICAgICAgIEFT
U0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wRW50ZXI+KCkpOwotICAgICAgICBmb3IgKENoZWNrcG9p
bnQgY2hlY2twb2ludCA9IGluc3RydWN0aW9uLT5udW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNr
cG9pbnQtLTspIHsKLSAgICAgICAgICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLnB0cigpLCBjaGVja3BvaW50LCBbJl0gKFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2FsKCktPnZpcnR1YWxSZWdpc3Rl
cigpID09IG9wZXJhbmQpCi0gICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGUoKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgICAgIG9mZnNldCArPSBpbnN0cnVjdGlvbi0+c2l6
ZSgpOwotICAgIH0KLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9wVHlwZSwgdHlwZW5hbWUg
VHVwbGVUeXBlPgordGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9wVHlwZSwgdHlwZW5hbWUgTmV3T3BU
eXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+CiBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3cml0ZU9wKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFR1cGxlVHlwZSYgaW5zdFR1cGxlKQogewogICAg
IHVuc2lnbmVkIGluc3RJbmRleCA9IHN0ZDo6Z2V0PDA+KGluc3RUdXBsZSk7CkBAIC01NDMxLDM0
ICs1NDI5LDUyIEBAIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiAgICAgLy8gMi4gYmFzZSBzdGF5
cyB0aGUgc2FtZS4KICAgICAvLyAzLiBwcm9wZXJ0eSBnZXRzIHN3aXRjaGVkIHRvIHRoZSBvcmln
aW5hbCBwcm9wZXJ0eS4KIAotICAgIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlw
ZSwgT3BHZXREaXJlY3RQbmFtZT46OnZhbHVlKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6
ZW9mKE9wR2V0QnlWYWwpIDw9IHNpemVvZihPcEdldERpcmVjdFBuYW1lKSk7Ci0gICAgICAgIE9w
R2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPigmZ2VuZXJhdG9yLCBieXRlY29kZS5t
X2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRleCkp
OwotICAgIH0gZWxzZSBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxPbGRPcFR5cGUsIE9wSW5T
dHJ1Y3R1cmVQcm9wZXJ0eT46OnZhbHVlKSB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KE9wSW5CeVZhbCkgPD0gc2l6ZW9mKE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eSkpOwotICAgICAgICBP
cEluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPigmZ2VuZXJhdG9yLCBieXRlY29kZS5t
X2RzdCwgYnl0ZWNvZGUubV9iYXNlLCBWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRleCkp
OwotICAgIH0gZWxzZQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHN0YXRpY19hc3NlcnQoc2l6ZW9mKE5ld09wVHlwZSkgPD0gc2l6ZW9mKE9sZE9wVHlwZSkpOwor
ICAgIE5ld09wVHlwZTo6ZW1pdCgmZ2VuZXJhdG9yLCBieXRlY29kZS5tX2RzdCwgYnl0ZWNvZGUu
bV9iYXNlLCBWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRleCkpOwogCiAgICAgLy8gNC4g
bm9wIG91dCB0aGUgcmVtYWluaW5nIGJ5dGVzCiAgICAgd2hpbGUgKGdlbmVyYXRvci5tX3dyaXRl
ci5wb3NpdGlvbigpIDwgZW5kKQogICAgICAgICBPcE5vcDo6ZW1pdDxPcGNvZGVTaXplOjpOYXJy
b3c+KCZnZW5lcmF0b3IpOwogfQogCi12b2lkIFN0cnVjdHVyZUZvckluQ29udGV4dDo6ZmluYWxp
emUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQordm9pZCBGb3JJ
bkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9m
ZnNldCkKIHsKLSAgICBCYXNlOjpmaW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5
dGVjb2RlRW5kT2Zmc2V0KTsKLSAgICBpZiAoaXNWYWxpZCgpKQorICAgIC8vIExleGljYWxseSBp
bnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsgc2F1Y2UsIGJ1dCBpdCBv
bmx5IG9jY3VycyBpZgorICAgIC8vIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
aXMgdHJ1ZToKKyAgICAvLworICAgIC8vICgxKSBUaGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUg
aXMgcmUtYXNzaWduZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29wLgorICAgIC8vICgyKSBU
aGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgaXMgY2FwdHVyZWQgaW4gdGhlIGxleGljYWwgc2Nv
cGUgb2YgdGhlIGZ1bmN0aW9uLgorICAgIC8vCisgICAgLy8gVGhlc2UgdHdvIHNpdHVhdGlvbnMg
b2NjdXIgc3VmZmljaWVudGx5IHJhcmVseSB0aGF0IGl0J3Mgb2theSB0byB1c2UgdGhpcyBzdHls
ZSBvZgorICAgIC8vICJhbmFseXNpcyIgdG8gbWFrZSBpdGVyYXRpb24gZmFzdGVyLiBJZiB3ZSBk
aWRuJ3Qgd2FudCB0byBkbyB0aGlzLCB3ZSB3b3VsZCBlaXRoZXIgaGF2ZQorICAgIC8vIHRvIHBl
cmZvcm0gc29tZSBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcyB0byBzZWUgaWYvd2hlbiB0aGUgbG9v
cCBpdGVyYXRpb24gdmFyaWFibGUgd2FzCisgICAgLy8gcmVhc3NpZ25lZCwgb3Igd2UnZCBoYXZl
IHRvIHJlc29ydCB0byBydW50aW1lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHZhcmlhYmxlIGhhZCBi
ZWVuCisgICAgLy8gcmVhc3NpZ25lZCBmcm9tIGl0cyBvcmlnaW5hbCB2YWx1ZS4KKworICAgIGJv
b2wgZXNjYXBlZCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgb2Zmc2V0ID0gYm9keUJ5dGVj
b2RlU3RhcnRPZmZzZXQoKTsgIWVzY2FwZWQgJiYgb2Zmc2V0IDwgYm9keUJ5dGVjb2RlRW5kT2Zm
c2V0OykgeworICAgICAgICBhdXRvIGluc3RydWN0aW9uID0gZ2VuZXJhdG9yLmluc3RydWN0aW9u
cygpLmF0KG9mZnNldCk7CisgICAgICAgIEFTU0VSVCghaW5zdHJ1Y3Rpb24tPmlzPE9wRW50ZXI+
KCkpOworICAgICAgICBmb3IgKENoZWNrcG9pbnQgY2hlY2twb2ludCA9IGluc3RydWN0aW9uLT5u
dW1iZXJPZkNoZWNrcG9pbnRzKCk7IGNoZWNrcG9pbnQtLTspIHsKKyAgICAgICAgICAgIGNvbXB1
dGVEZWZzRm9yQnl0ZWNvZGVJbmRleChjb2RlQmxvY2ssIGluc3RydWN0aW9uLnB0cigpLCBjaGVj
a3BvaW50LCBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7CisgICAgICAgICAgICAgICAg
aWYgKGxvY2FsKCktPnZpcnR1YWxSZWdpc3RlcigpID09IG9wZXJhbmQpCisgICAgICAgICAgICAg
ICAgICAgIGVzY2FwZWQgPSB0cnVlOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7CisgICAgfQorCisgICAgaWYgKCFlc2Nh
cGVkKQogICAgICAgICByZXR1cm47CiAKICAgICBPcGNvZGVJRCBsYXN0T3Bjb2RlSUQgPSBnZW5l
cmF0b3IubV9sYXN0T3Bjb2RlSUQ7CiAgICAgSW5zdHJ1Y3Rpb25TdHJlYW06Ok11dGFibGVSZWYg
bGFzdEluc3RydWN0aW9uID0gZ2VuZXJhdG9yLm1fbGFzdEluc3RydWN0aW9uOwogCiAgICAgZm9y
IChjb25zdCBhdXRvJiBpbnN0VHVwbGUgOiBtX2dldEluc3RzKQotICAgICAgICByZXdyaXRlT3A8
T3BHZXREaXJlY3RQbmFtZT4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOworICAgICAgICByZXdyaXRl
T3A8T3BFbnVtZXJhdG9yR2V0QnlWYWwsIE9wR2V0QnlWYWw+KGdlbmVyYXRvciwgaW5zdFR1cGxl
KTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdFR1cGxlIDogbV9pbkluc3RzKQotICAgICAg
ICByZXdyaXRlT3A8T3BJblN0cnVjdHVyZVByb3BlcnR5PihnZW5lcmF0b3IsIGluc3RUdXBsZSk7
CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JJbkJ5VmFsLCBPcEluQnlWYWw+KGdlbmVy
YXRvciwgaW5zdFR1cGxlKTsKIAogICAgIGZvciAoY29uc3QgYXV0byYgaGFzT3duUHJvcGVydHlU
dXBsZSA6IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHMpIHsKICAgICAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoT3BKbXApIDw9IHNpemVvZihPcEpuZXFQdHIpKTsKQEAgLTU0ODcsMjEgKzU1MDMs
NjUgQEAgdm9pZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUIKICAgICB9CiB9CiAKLXZvaWQgSW5kZXhlZEZv
ckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KQotewotICAgIEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5
Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgIGlmIChpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsK
IAotICAgIGZvciAoY29uc3QgYXV0byYgaW5zdFBhaXIgOiBtX2dldEluc3RzKSB7Ci0gICAgICAg
IHVuc2lnbmVkIGluc3RJbmRleCA9IGluc3RQYWlyLmZpcnN0OwotICAgICAgICBpbnQgcHJvcGVy
dHlSZWdJbmRleCA9IGluc3RQYWlyLnNlY29uZDsKLSAgICAgICAgZ2VuZXJhdG9yLm1fd3JpdGVy
LnJlZihpbnN0SW5kZXgpLT5jYXN0PE9wR2V0QnlWYWw+KCktPnNldFByb3BlcnR5KFZpcnR1YWxS
ZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSwgW10oKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAg
ICAgfSk7Ci0gICAgfQotfQorCisvLyB2b2lkIFN0cnVjdHVyZUZvckluQ29udGV4dDo6ZmluYWxp
emUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQorLy8geworLy8g
ICAgIEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRP
ZmZzZXQpOworLy8gICAgIGlmIChpc1ZhbGlkKCkpCisvLyAgICAgICAgIHJldHVybjsKKworLy8g
ICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsKKy8v
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CisKKy8vICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RU
dXBsZSA6IG1fZ2V0SW5zdHMpCisvLyAgICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1l
PihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CisKKy8vICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RU
dXBsZSA6IG1faW5JbnN0cykKKy8vICAgICAgICAgcmV3cml0ZU9wPE9wSW5TdHJ1Y3R1cmVQcm9w
ZXJ0eT4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOworCisvLyAgICAgZm9yIChjb25zdCBhdXRvJiBo
YXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0eUp1bXBJbnN0cykgeworLy8gICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6ZW9mKE9wSm5lcVB0cikpOwor
Ly8gICAgICAgICB1bnNpZ25lZCBicmFuY2hJbnN0SW5kZXggPSBzdGQ6OmdldDwwPihoYXNPd25Q
cm9wZXJ0eVR1cGxlKTsKKy8vICAgICAgICAgdW5zaWduZWQgbmV3QnJhbmNoVGFyZ2V0ID0gc3Rk
OjpnZXQ8MT4oaGFzT3duUHJvcGVydHlUdXBsZSk7CisKKy8vICAgICAgICAgYXV0byBpbnN0cnVj
dGlvbiA9IGdlbmVyYXRvci5tX3dyaXRlci5yZWYoYnJhbmNoSW5zdEluZGV4KTsKKy8vICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaW5zdHJ1Y3Rpb24tPmlzPE9wSm5lcVB0cj4oKSk7CisvLyAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGluc3RydWN0aW9uLT5pc1dpZGUzMigpKTsKKy8vICAgICAgICAg
YXV0byBlbmQgPSBicmFuY2hJbnN0SW5kZXggKyBpbnN0cnVjdGlvbi0+c2l6ZSgpOworCisvLyAg
ICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5zZWVrKGJyYW5jaEluc3RJbmRleCk7CisKKy8vICAg
ICAgICAgZ2VuZXJhdG9yLmRpc2FibGVQZWVwaG9sZU9wdGltaXphdGlvbigpOworCisvLyAgICAg
ICAgIE9wSm1wOjplbWl0KCZnZW5lcmF0b3IsIEJvdW5kTGFiZWwoc3RhdGljX2Nhc3Q8aW50Pihu
ZXdCcmFuY2hUYXJnZXQpIC0gc3RhdGljX2Nhc3Q8aW50PihicmFuY2hJbnN0SW5kZXgpKSk7CisK
Ky8vICAgICAgICAgd2hpbGUgKGdlbmVyYXRvci5tX3dyaXRlci5wb3NpdGlvbigpIDwgZW5kKQor
Ly8gICAgICAgICAgICAgT3BOb3A6OmVtaXQ8T3Bjb2RlU2l6ZTo6TmFycm93PigmZ2VuZXJhdG9y
KTsKKy8vICAgICB9CisKKy8vICAgICBnZW5lcmF0b3IubV93cml0ZXIuc2VlayhnZW5lcmF0b3Iu
bV93cml0ZXIuc2l6ZSgpKTsKKy8vICAgICBpZiAoZ2VuZXJhdG9yLm1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpICsgZ2VuZXJhdG9yLm1fbGFzdEluc3RydWN0aW9uLT5zaXplKCkgIT0gZ2VuZXJh
dG9yLm1fd3JpdGVyLnNpemUoKSkgeworLy8gICAgICAgICBnZW5lcmF0b3IubV9sYXN0T3Bjb2Rl
SUQgPSBsYXN0T3Bjb2RlSUQ7CisvLyAgICAgICAgIGdlbmVyYXRvci5tX2xhc3RJbnN0cnVjdGlv
biA9IGxhc3RJbnN0cnVjdGlvbjsKKy8vICAgICB9CisvLyB9CisKKy8vIHZvaWQgSW5kZXhlZEZv
ckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5r
ZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KQorLy8geworLy8gICAgIEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2Nr
LCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworLy8gICAgIGlmIChpc1ZhbGlkKCkpCisvLyAgICAg
ICAgIHJldHVybjsKKworLy8gICAgIGZvciAoY29uc3QgYXV0byYgaW5zdFBhaXIgOiBtX2dldElu
c3RzKSB7CisvLyAgICAgICAgIHVuc2lnbmVkIGluc3RJbmRleCA9IGluc3RQYWlyLmZpcnN0Owor
Ly8gICAgICAgICBpbnQgcHJvcGVydHlSZWdJbmRleCA9IGluc3RQYWlyLnNlY29uZDsKKy8vICAg
ICAgICAgZ2VuZXJhdG9yLm1fd3JpdGVyLnJlZihpbnN0SW5kZXgpLT5jYXN0PE9wR2V0QnlWYWw+
KCktPnNldFByb3BlcnR5KFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSwgW10oKSB7
CisvLyAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKy8vICAgICAgICAgICAgIHJl
dHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKKy8vICAgICAgICAgfSk7CisvLyAgICAgfQorLy8gfQog
CiB2b2lkIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXM6OnJlY29yZCgpCiB7CkBAIC01NTI4LDE3ICs1
NTg4LDE0IEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb1RoaXMoKQogICAgIE9wVG9U
aGlzOjplbWl0KHRoaXMsIGtpbGwoJm1fdGhpc1JlZ2lzdGVyKSwgZWNtYU1vZGUoKSk7CiB9CiAK
LVN0cnVjdHVyZUZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCitGb3JJbkNvbnRleHQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KQogewogICAg
IGZvciAoc2l6ZV90IGkgPSBtX2ZvckluQ29udGV4dFN0YWNrLnNpemUoKTsgaS0tOyApIHsKICAg
ICAgICAgRm9ySW5Db250ZXh0JiBjb250ZXh0ID0gbV9mb3JJbkNvbnRleHRTdGFja1tpXS5nZXQo
KTsKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZvckluQ29udGV4
dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgcmV0dXJuICZjb250ZXh0LmFzU3Ry
dWN0dXJlRm9ySW5Db250ZXh0KCk7CisgICAgICAgIHJldHVybiAmY29udGV4dDsKICAgICB9CiAK
ICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAyZjVmZjcyMzI2NDI2YjEyZTRh
MDNjY2M3Y2ZkYjY4NGRhZTU5OTE0Li5mOTI3ZTY2MDNjYTczOTQzZGE0MWY2ZWQ3YmNhMjkzMjQ4
ZjQ5OTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC02MSw4ICs2MSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgY2xhc3MgSlNJbW11dGFibGVCdXR0ZXJmbHk7CiAgICAgY2xhc3MgSWRlbnRpZmllcjsK
LSAgICBjbGFzcyBJbmRleGVkRm9ySW5Db250ZXh0OwotICAgIGNsYXNzIFN0cnVjdHVyZUZvcklu
Q29udGV4dDsKKyAgICBjbGFzcyBGb3JJbkNvbnRleHQ7CiAKICAgICBlbnVtIEV4cGVjdGVkRnVu
Y3Rpb24gewogICAgICAgICBOb0V4cGVjdGVkRnVuY3Rpb24sCkBAIC0yNTUsNzIgKzI1NCwxOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBGb3JJbkNvbnRleHQgOiBwdWJsaWMgUmVmQ291
bnRlZDxGb3JJbkNvbnRleHQ+IHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAg
ICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZvckluQ29udGV4dCk7Ci0gICAgcHVibGljOgot
ICAgICAgICB2aXJ0dWFsIH5Gb3JJbkNvbnRleHQoKSA9IGRlZmF1bHQ7Ci0KLSAgICAgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9Ci0gICAgICAgIHZvaWQgaW52
YWxpZGF0ZSgpIHsgbV9pc1ZhbGlkID0gZmFsc2U7IH0KLQotICAgICAgICBlbnVtIGNsYXNzIFR5
cGUgOiB1aW50OF90IHsKLSAgICAgICAgICAgIEluZGV4ZWRGb3JJbiwKLSAgICAgICAgICAgIFN0
cnVjdHVyZUZvckluCi0gICAgICAgIH07Ci0KLSAgICAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9Ci0gICAgICAgIGJvb2wgaXNJbmRleGVkRm9ySW5Db250ZXh0KCkgY29u
c3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkluZGV4ZWRGb3JJbjsgfQotICAgICAgICBib29s
IGlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6
OlN0cnVjdHVyZUZvckluOyB9Ci0KLSAgICAgICAgSW5kZXhlZEZvckluQ29udGV4dCYgYXNJbmRl
eGVkRm9ySW5Db250ZXh0KCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKGlzSW5kZXhl
ZEZvckluQ29udGV4dCgpKTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxJ
bmRleGVkRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQmIGFzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkKLSAgICAgICAgewotICAg
ICAgICAgICAgQVNTRVJUKGlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpOwotICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PFN0cnVjdHVyZUZvckluQ29udGV4dCo+KHRoaXMpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwoKSBjb25zdCB7IHJldHVybiBt
X2xvY2FsUmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgIHByb3RlY3RlZDoKLSAgICAgICAgRm9ySW5D
b250ZXh0KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFR5cGUgdHlwZSwgdW5zaWduZWQgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IG1fbG9jYWxSZWdpc3Rlcihsb2Nh
bFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3R5cGUodHlwZSkKLSAgICAgICAgICAgICwgbV9i
b2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAg
eyB9Ci0KLSAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9Ci0KLSAgICAgICAgdm9pZCBmaW5h
bGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgdW5z
aWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBtX2xvY2FsUmVnaXN0ZXI7Ci0gICAgICAgIGJvb2wgbV9pc1ZhbGlk
IHsgdHJ1ZSB9OwotICAgICAgICBUeXBlIG1fdHlwZTsKLSAgICAgICAgdW5zaWduZWQgbV9ib2R5
Qnl0ZWNvZGVTdGFydE9mZnNldDsKLSAgICB9OwotCi0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5D
b250ZXh0IDogcHVibGljIEZvckluQ29udGV4dCB7Ci0gICAgICAgIHVzaW5nIEJhc2UgPSBGb3JJ
bkNvbnRleHQ7CiAgICAgcHVibGljOgogICAgICAgICB1c2luZyBHZXRJbnN0ID0gc3RkOjp0dXBs
ZTx1bnNpZ25lZCwgaW50PjsKICAgICAgICAgdXNpbmcgSW5JbnN0ID0gR2V0SW5zdDsKICAgICAg
ICAgdXNpbmcgSGFzT3duUHJvcGVydHlKdW1wSW5zdCA9IHN0ZDo6dHVwbGU8dW5zaWduZWQsIHVu
c2lnbmVkPjsKIAotICAgICAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9j
YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVy
dHlSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFs
PFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0
KQotICAgICAgICAgICAgOiBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgVHlwZTo6U3RydWN0
dXJlRm9ySW4sIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4
UmVnaXN0ZXIoaW5kZXhSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV9wcm9wZXJ0eVJlZ2lzdGVy
KHByb3BlcnR5UmVnaXN0ZXIpCi0gICAgICAgICAgICAsIG1fZW51bWVyYXRvclJlZ2lzdGVyKGVu
dW1lcmF0b3JSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV9iYXNlVmFyaWFibGUoYmFzZVZhcmlh
YmxlKQotICAgICAgICB7Ci0gICAgICAgIH0KKyAgICAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpIHsgbV9pc1Zh
bGlkID0gZmFsc2U7IH0KIAotICAgICAgICBSZWdpc3RlcklEKiBpbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXhSZWdpc3Rlci5nZXQoKTsgfQotICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlSZWdpc3Rlci5nZXQoKTsgfQotICAgICAgICBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lbnVtZXJhdG9yUmVnaXN0
ZXIuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWwoKSBjb25zdCB7IHJldHVybiBt
X2xvY2FsUmVnaXN0ZXIuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU5hbWUuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5T2Zmc2V0Lmdl
dCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBt
X2VudW1lcmF0b3IuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogbW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZS5nZXQoKTsgfQogICAgICAgICBjb25zdCBzdGQ6Om9wdGlvbmFsPFZhcmlh
YmxlPiYgYmFzZVZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlVmFyaWFibGU7IH0KIAog
ICAgICAgICB2b2lkIGFkZEdldEluc3QodW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlS
ZWdJbmRleCkKQEAgLTMzOCwzNiArMjg0LDE1MSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHMuYXBwZW5kKEhhc093blByb3BlcnR5SnVtcElu
c3QgeyBicmFuY2hJbnN0SW5kZXgsIGdlbmVyaWNQYXRoVGFyZ2V0IH0pOwogICAgICAgICB9CiAK
KyAgICAgICAgRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlPZmZzZXQsIFJlZ2lzdGVySUQq
IGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIG1vZGUsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCisgICAgICAgICAg
ICA6IG1fbG9jYWxSZWdpc3Rlcihsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX3Byb3Bl
cnR5TmFtZShwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICAsIG1fcHJvcGVydHlPZmZzZXQocHJv
cGVydHlPZmZzZXQpCisgICAgICAgICAgICAsIG1fZW51bWVyYXRvcihlbnVtZXJhdG9yKQorICAg
ICAgICAgICAgLCBtX21vZGUobW9kZSkKKyAgICAgICAgICAgICwgbV9iYXNlVmFyaWFibGUoYmFz
ZVZhcmlhYmxlKQorICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KGJvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICB7IH0KKworICAgICAgICB1bnNpZ25lZCBib2R5
Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQ7IH0KKwogICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQp
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdp
c3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVydHlSZWdpc3RlcjsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvclJlZ2lzdGVyOworICAgICAgICAv
LyBUT0RPOiAgRG9lcyB0aGlzIHJlYWxseSBuZWVkIHRvIGJlIGEgUmVmUHRyPworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJlZ2lzdGVyOworICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gbV9wcm9wZXJ0eU5hbWU7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3Bl
cnR5T2Zmc2V0OworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9lbnVtZXJhdG9yOworICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9tb2RlOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFZh
cmlhYmxlPiBtX2Jhc2VWYXJpYWJsZTsKLSAgICAgICAgVmVjdG9yPEdldEluc3Q+IG1fZ2V0SW5z
dHM7CisgICAgICAgIGJvb2wgbV9pc1ZhbGlkIHsgdHJ1ZSB9OworICAgICAgICB1bnNpZ25lZCBt
X2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OwogICAgICAgICBWZWN0b3I8SW5JbnN0PiBtX2luSW5z
dHM7CisgICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOwogICAgICAgICBWZWN0b3I8
SGFzT3duUHJvcGVydHlKdW1wSW5zdD4gbV9oYXNPd25Qcm9wZXJ0eUp1bXBJbnN0czsKICAgICB9
OwogCi0gICAgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQg
ewotICAgICAgICB1c2luZyBCYXNlID0gRm9ySW5Db250ZXh0OwotICAgIHB1YmxpYzoKLSAgICAg
ICAgSW5kZXhlZEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEKiBpbmRleFJlZ2lzdGVyLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAg
ICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIFR5cGU6OkluZGV4ZWRGb3JJ
biwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3Rl
cihpbmRleFJlZ2lzdGVyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpc3Rl
cklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhSZWdpc3Rlci5nZXQoKTsgfQotCi0g
ICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0gICAgICAgIHZv
aWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eUluZGV4KSB7IG1f
Z2V0SW5zdHMuYXBwZW5kKHsgaW5zdEluZGV4LCBwcm9wZXJ0eUluZGV4IH0pOyB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVyOwotICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCBpbnQ+PiBtX2dldEluc3RzOwotICAgIH07
CisgICAgLy8gY2xhc3MgRm9ySW5Db250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9ySW5Db250
ZXh0PiB7CisgICAgLy8gICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIC8vICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShGb3JJbkNvbnRleHQpOworICAgIC8vIHB1YmxpYzoKKyAgICAv
LyAgICAgdmlydHVhbCB+Rm9ySW5Db250ZXh0KCkgPSBkZWZhdWx0OworCisgICAgLy8gICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorICAgIC8vICAgICB2b2lk
IGludmFsaWRhdGUoKSB7IG1faXNWYWxpZCA9IGZhbHNlOyB9CisKKyAgICAvLyAgICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgLy8gICAgICAgICBJbmRleGVkRm9ySW4sCisgICAg
Ly8gICAgICAgICBTdHJ1Y3R1cmVGb3JJbgorICAgIC8vICAgICB9OworCisgICAgLy8gICAgIFR5
cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIC8vICAgICBib29sIGlzSW5k
ZXhlZEZvckluQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpJbmRleGVk
Rm9ySW47IH0KKyAgICAvLyAgICAgYm9vbCBpc1N0cnVjdHVyZUZvckluQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpTdHJ1Y3R1cmVGb3JJbjsgfQorCisgICAgLy8gICAg
IEluZGV4ZWRGb3JJbkNvbnRleHQmIGFzSW5kZXhlZEZvckluQ29udGV4dCgpCisgICAgLy8gICAg
IHsKKyAgICAvLyAgICAgICAgIEFTU0VSVChpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSk7CisgICAg
Ly8gICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhlZEZvckluQ29udGV4dCo+
KHRoaXMpOworICAgIC8vICAgICB9CisKKyAgICAvLyAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0
JiBhc1N0cnVjdHVyZUZvckluQ29udGV4dCgpCisgICAgLy8gICAgIHsKKyAgICAvLyAgICAgICAg
IEFTU0VSVChpc1N0cnVjdHVyZUZvckluQ29udGV4dCgpKTsKKyAgICAvLyAgICAgICAgIHJldHVy
biAqcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqPih0aGlzKTsKKyAgICAv
LyAgICAgfQorCisgICAgLy8gICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9CisKKyAgICAvLyBwcm90ZWN0ZWQ6CisgICAgLy8gICAg
IEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBUeXBlIHR5cGUsIHVuc2ln
bmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgIC8vICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAvLyAgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAg
Ly8gICAgICAgICAsIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQpCisgICAgLy8gICAgIHsgfQorCisgICAgLy8gICAgIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldDsg
fQorCisgICAgLy8gICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CisK
KyAgICAvLyBwcml2YXRlOgorICAgIC8vICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJl
Z2lzdGVyOworICAgIC8vICAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAvLyAgICAg
VHlwZSBtX3R5cGU7CisgICAgLy8gICAgIHVuc2lnbmVkIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZz
ZXQ7CisgICAgLy8gfTsKKworICAgIC8vIGNsYXNzIFN0cnVjdHVyZUZvckluQ29udGV4dCA6IHB1
YmxpYyBGb3JJbkNvbnRleHQgeworICAgIC8vICAgICB1c2luZyBCYXNlID0gRm9ySW5Db250ZXh0
OworICAgIC8vIHB1YmxpYzoKKyAgICAvLyAgICAgdXNpbmcgR2V0SW5zdCA9IHN0ZDo6dHVwbGU8
dW5zaWduZWQsIGludD47CisgICAgLy8gICAgIHVzaW5nIEluSW5zdCA9IEdldEluc3Q7CisgICAg
Ly8gICAgIHVzaW5nIEhhc093blByb3BlcnR5SnVtcEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVk
LCB1bnNpZ25lZD47CisKKyAgICAvLyAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVy
SUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIsIFJlZ2lzdGVySUQq
IHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JSZWdpc3Rlciwgc3RkOjpv
cHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKKyAgICAvLyAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIFR5
cGU6OlN0cnVjdHVyZUZvckluLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKKyAgICAvLyAgICAg
ICAgICwgbV9pbmRleFJlZ2lzdGVyKGluZGV4UmVnaXN0ZXIpCisgICAgLy8gICAgICAgICAsIG1f
cHJvcGVydHlSZWdpc3Rlcihwcm9wZXJ0eVJlZ2lzdGVyKQorICAgIC8vICAgICAgICAgLCBtX2Vu
dW1lcmF0b3JSZWdpc3RlcihlbnVtZXJhdG9yUmVnaXN0ZXIpCisgICAgLy8gICAgICAgICAsIG1f
YmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAgICAvLyAgICAgeworICAgIC8vICAgICB9CisK
KyAgICAvLyAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVn
aXN0ZXIuZ2V0KCk7IH0KKyAgICAvLyAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0ZXIuZ2V0KCk7IH0KKyAgICAvLyAgICAgUmVnaXN0ZXJJ
RCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvclJlZ2lzdGVyLmdldCgp
OyB9CisgICAgLy8gICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFyaWFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQorCisgICAgLy8gICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQorICAg
IC8vICAgICB7CisgICAgLy8gICAgICAgICBtX2dldEluc3RzLmFwcGVuZChHZXRJbnN0IHsgaW5z
dEluZGV4LCBwcm9wZXJ0eVJlZ0luZGV4IH0pOworICAgIC8vICAgICB9CisKKyAgICAvLyAgICAg
dm9pZCBhZGRJbkluc3QodW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlSZWdJbmRleCkK
KyAgICAvLyAgICAgeworICAgIC8vICAgICAgICAgbV9pbkluc3RzLmFwcGVuZChJbkluc3QgeyBp
bnN0SW5kZXgsIHByb3BlcnR5UmVnSW5kZXggfSk7CisgICAgLy8gICAgIH0KKworICAgIC8vICAg
ICB2b2lkIGFkZEhhc093blByb3BlcnR5SnVtcCh1bnNpZ25lZCBicmFuY2hJbnN0SW5kZXgsIHVu
c2lnbmVkIGdlbmVyaWNQYXRoVGFyZ2V0KQorICAgIC8vICAgICB7CisgICAgLy8gICAgICAgICBt
X2hhc093blByb3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsg
YnJhbmNoSW5zdEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKKyAgICAvLyAgICAgfQorCisg
ICAgLy8gICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CisKKyAgICAv
LyBwcml2YXRlOgorICAgIC8vICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVy
OworICAgIC8vICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eVJlZ2lzdGVyOworICAg
IC8vICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9lbnVtZXJhdG9yUmVnaXN0ZXI7CisgICAgLy8g
ICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IG1fYmFzZVZhcmlhYmxlOworICAgIC8vICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKKyAgICAvLyAgICAgVmVjdG9yPEluSW5zdD4gbV9p
bkluc3RzOworICAgIC8vICAgICBWZWN0b3I8SGFzT3duUHJvcGVydHlKdW1wSW5zdD4gbV9oYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0czsKKyAgICAvLyB9OworCisgICAgLy8gY2xhc3MgSW5kZXhlZEZv
ckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQgeworICAgIC8vICAgICB1c2luZyBCYXNl
ID0gRm9ySW5Db250ZXh0OworICAgIC8vIHB1YmxpYzoKKyAgICAvLyAgICAgSW5kZXhlZEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lz
dGVyLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKKyAgICAvLyAgICAgICAgIDog
Rm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIFR5cGU6OkluZGV4ZWRGb3JJbiwgYm9keUJ5dGVj
b2RlU3RhcnRPZmZzZXQpCisgICAgLy8gICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRleFJl
Z2lzdGVyKQorICAgIC8vICAgICB7CisgICAgLy8gICAgIH0KKworICAgIC8vICAgICBSZWdpc3Rl
cklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhSZWdpc3Rlci5nZXQoKTsgfQorCisg
ICAgLy8gICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVC
bG9ja0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CisgICAgLy8g
ICAgIHZvaWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eUluZGV4
KSB7IG1fZ2V0SW5zdHMuYXBwZW5kKHsgaW5zdEluZGV4LCBwcm9wZXJ0eUluZGV4IH0pOyB9CisK
KyAgICAvLyBwcml2YXRlOgorICAgIC8vICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJl
Z2lzdGVyOworICAgIC8vICAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCBpbnQ+PiBtX2dl
dEluc3RzOworICAgIC8vIH07CiAKICAgICBzdHJ1Y3QgVHJ5RGF0YSB7CiAgICAgICAgIFJlZjxM
YWJlbD4gdGFyZ2V0OwpAQCAtMzk5LDExICs0NjAsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVjb2RlR2VuZXJhdG9yKTsKIAogICAgICAgICBm
cmllbmQgY2xhc3MgRmluYWxseUNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBJbmRleGVk
Rm9ySW5Db250ZXh0OwotICAgICAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0
OworICAgICAgICBmcmllbmQgY2xhc3MgRm9ySW5Db250ZXh0OwogICAgICAgICBmcmllbmQgY2xh
c3MgU3RyaWN0TW9kZVNjb3BlOwogCi0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPbGRPcFR5
cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgTmV3T3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+CiAgICAgICAgIGZy
aWVuZCB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYsIFR1cGxlVHlwZSYpOwogCiAg
ICAgcHVibGljOgpAQCAtNjgxLDcgKzc0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHZvaWQgaG9pc3RTbG9wcHlNb2RlRnVuY3Rpb25JZk5lY2Vzc2FyeShjb25zdCBJZGVudGlmaWVy
JiBmdW5jdGlvbk5hbWUpOwogCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCogZmluZFN0
cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eSk7CisgICAgICAgIEZvcklu
Q29udGV4dCogZmluZEZvckluQ29udGV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eSk7CiAKICAgICBw
cml2YXRlOgogICAgICAgICB2b2lkIGVtaXRUeXBlUHJvZmlsZXJFeHByZXNzaW9uSW5mbyhjb25z
dCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24mIGVuZERp
dm90KTsKQEAgLTkxNyw3ICs5NzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0SnVtcElmTm90RnVuY3Rpb25DYWxsKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQp
OwogICAgICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KFJlZ2lzdGVySUQqIGNv
bmQsIExhYmVsJiB0YXJnZXQpOwogICAgICAgICB1bnNpZ25lZCBlbWl0V2lkZUp1bXBJZk5vdEZ1
bmN0aW9uSGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7Ci0g
ICAgICAgIHZvaWQgcmVjb3JkSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbkZvckluTG9vcChTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQmLCB1bnNpZ25lZCBicmFuY2hPZmZzZXQsIExhYmVsJiBnZW5lcmlj
UGF0aCk7CisgICAgICAgIHZvaWQgcmVjb3JkSGFzT3duUHJvcGVydHlJbkZvckluTG9vcChGb3JJ
bkNvbnRleHQmLCB1bnNpZ25lZCBicmFuY2hPZmZzZXQsIExhYmVsJiBnZW5lcmljUGF0aCk7CiAK
ICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQmluT3AsIHR5cGVuYW1lIEptcE9wPgogICAgICAg
ICBib29sIGZ1c2VDb21wYXJlQW5kSnVtcChSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0
LCBib29sIHN3YXBPcGVyYW5kcyA9IGZhbHNlKTsKQEAgLTkzNCw2ICs5OTQsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc093blN0cnVjdHVyZVByb3BlcnR5
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlO
YW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdl
dFByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGJhc2UpOworICAgICAgICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGlu
ZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5
TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0R2V0U3RydWN0dXJlUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3RoKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdEdldEdlbmVyaWNQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgsIFJlZ2lzdGVySUQqIHN0
cnVjdHVyZUVudW1lcmF0b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51bWVyYXRvclN0
cnVjdHVyZVByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IsIFJlZ2lzdGVySUQqIGluZGV4KTsKQEAgLTk1Nyw3ICsxMDE5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NhbGxhYmxlKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzQ29uc3RydWN0b3Io
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXNOdW1iZXIoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwotICAgICAgICBS
ZWdpc3RlcklEKiBlbWl0SXNOdWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7
IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywgZW1pdExvYWQobnVs
bHB0ciwganNOdWxsKCkpKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNOdWxsKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5hcnlPcDxPcEVxTnVs
bD4oZHN0LCBzcmMpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc1VuZGVmaW5lZChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdEVxdWFsaXR5T3A8T3BT
dHJpY3RlcT4oZHN0LCBzcmMsIGVtaXRMb2FkKG51bGxwdHIsIGpzVW5kZWZpbmVkKCkpKTsgfQog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNVbmRlZmluZWRPck51bGwoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNFbXB0eShSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CkBAIC0xMDU3LDEwICsxMTE5LDEzIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0
ZXJJRCogZHN0LCBib29sIGlzRGVsZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVj
ayhSZWdpc3RlcklEKiBzcmMpOwogCi0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3Bl
KFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9w
SW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hT
dHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwg
UmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9u
YWw8VmFyaWFibGU+IGJhc2UpOwotICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUo
UmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAgICAvLyB2b2lkIHB1c2hJbmRleGVkRm9ySW5TY29w
ZShSZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAgICAvLyB2b2lk
IHBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKKyAgICAgICAgLy8gdm9p
ZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCog
aW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBzdGQ6
Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlKTsKKyAgICAgICAgLy8gdm9pZCBwb3BTdHJ1Y3R1cmVG
b3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKKworICAgICAgICB2b2lkIHB1c2hGb3JJblNj
b3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVy
SUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBt
b2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlKTsKKyAgICAgICAgdm9pZCBwb3BGb3JJ
blNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAgICAgICBMYWJlbFNjb3BlKiBicmVha1Rh
cmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIExhYmVsU2NvcGUqIGNvbnRpbnVlVGFy
Z2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2Fl
NDRjYWI1ZWRjOTY2MWM0ZmY3Li43OWI2M2UzNzM3MmVlY2E5MGY5YjNlMzM5ZTJlZjI3NzQ3YjM3
Y2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0IEBAIFJlZ2lzdGVySUQqIEhhc093blBy
b3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5tX2xpc3ROb2RlICYmIG1fYXJncy0+bV9s
aXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dCk7ICAKICAgICBF
eHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhwcjsKICAg
ICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNvbHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQgPSBudWxscHRyOworICAgIEZvckluQ29u
dGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFyaWFibGUgYXJndW1lbnRWYXJpYWJsZSA9
IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+
aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRWYXJpYWJsZS5pc0xvY2FsKCkpIHsKICAg
ICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0g
ICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0b3IuZmluZFN0cnVjdHVyZUZvckluQ29u
dGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQgPSBnZW5lcmF0b3IuZmluZEZvckluQ29u
dGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVy
dHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVyZUNvbnRleHQpCisgICAgICAgIGlmICgh
Y29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAgICAgaWYgKCFjb250ZXh0LT5iYXNlVmFy
aWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKG1fYmFzZS0+
aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci52YXJpYWJsZShz
dGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSkgPT0gc3RydWN0
dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVu
dGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIGlm
IChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAgICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9y
LmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tlZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6
YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0
ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhp
c1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpID09IHN0cnVjdHVyZUNv
bnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJh
dG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhp
c1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpID09IGNvbnRleHQtPmJh
c2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZwogICAg
ICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCiAgICAgICAgIHVu
c2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5j
dGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0
KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCksIHN0cnVjdHVyZUNv
bnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBiYXNlLmdldCgpLCBjb250ZXh0LT5tb2Rl
KCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCksIGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0
KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChl
bmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocmVhbENhbGwuZ2V0KCkp
OwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJRCogSGFzT3duUHJvcGVydHlGdW5jdGlv
bkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGcKIAogICAgICAg
ICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJl
Y29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJbkxvb3AoKnN0cnVjdHVyZUNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxD
YWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMo
Z2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAgLTQxODQsOCArNDE4NCw2IEBAIHZvaWQg
Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iuc2hvdWxkQmVDb25jZXJuZWRXaXRoQ29t
cGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhhc0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkp
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOwogCi0gICAg
UmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLQogICAgIFJlZ2lzdGVySUQq
IGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAgICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2Fs
U2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwg
Qnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNv
ZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNOZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFi
bGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEzIEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAg
ICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7
CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3RoOwotICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhw
cik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2Nh
bChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9ySW5kZXg7Cisg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1vZGUgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbml0TW9kZSkpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gaW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBq
c051bWJlcigwKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2VW
YXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEzNyAr
NDIwOCwxNTggQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAgICAgIGJhc2VWYXJpYWJsZSA9IGdl
bmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1lcygp
LnRoaXNQcml2YXRlTmFtZSgpLCBUaGlzUmVzb2x1dGlvblR5cGU6OkxvY2FsKTsKICAgICB9CiAK
LSAgICAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4u
aW4gaXRlcmF0aW9uLgotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOwotCiAg
ICAgaW50IHByb2ZpbGVyU3RhcnRPZmZzZXQgPSBtX3N0YXRlbWVudC0+c3RhcnRPZmZzZXQoKTsK
ICAgICBpbnQgcHJvZmlsZXJFbmRPZmZzZXQgPSBtX3N0YXRlbWVudC0+ZW5kT2Zmc2V0KCkgKyAo
bV9zdGF0ZW1lbnQtPmlzQmxvY2soKSA/IDEgOiAwKTsKIAotICAgIGVudW1lcmF0b3IgPSBnZW5l
cmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGJhc2UuZ2V0KCkpOwotCi0gICAgQnl0ZWNvZGVHZW5lcmF0b3I6OlByZXNlcnZlZFREWlN0YWNr
IHByZXNlcnZlZFREWlN0YWNrOwotICAgIGdlbmVyYXRvci5wcmVzZXJ2ZVREWlN0YWNrKHByZXNl
cnZlZFREWlN0YWNrKTsKLQotICAgIC8vIEluZGV4ZWQgcHJvcGVydHkgbG9vcC4KICAgICB7CiAg
ICAgICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExh
YmVsU2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKIAotICAgICAgICBsZW5ndGggPSBnZW5lcmF0b3IuZW1pdEdldEVudW1lcmFibGVM
ZW5ndGgoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBlbnVtZXJhdG9yLmdldCgpKTsKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBw
cm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIGVudW1lcmF0
b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVt
cG9yYXJ5KCksIGJhc2UuZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9v
cFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisgICAgICAg
IGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhp
cywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2so
bV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2gg
Zm9yLi5pbiBpdGVyYXRpb24uCiAKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9
IGdlbmVyYXRvci5lbWl0QmluYXJ5T3A8T3BMZXNzPihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCks
IGkuZ2V0KCksIGxlbmd0aC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFs
c2UocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgaS5n
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAq
c2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhh
dmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxseSB1c2luZyB0aGUgcHJvcGVydHlO
YW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9ieV92YWwuIElmIG5vdCwgd2UgY291
bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9wY29kZS4KKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUuZ2V0KCksIG1vZGUuZ2V0KCksIGlu
ZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKKworICAgICAgICAvLyBO
b3RlLCBjaG9vc2luZyBVbmRlZmluZWQgb3IgbnVsbCBoZWxwcyBwbGVhc2UgREZHJ3MgQWJzdHJh
Y3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlzaCBudWxsIGFuZCB1bmRlZmlu
ZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJ
ZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVha1RhcmdldCgpKTsKIAotICAg
ICAgICBnZW5lcmF0b3IuZW1pdFRvSW5kZXhTdHJpbmcocHJvcGVydHlOYW1lLmdldCgpLCBpLmdl
dCgpKTsKICAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5h
bWUuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyU3RhcnRPZmZzZXQpOwogCi0gICAgICAgIGdlbmVyYXRvci5wdXNoSW5kZXhlZEZvcklu
U2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IucHVzaEZvcklu
U2NvcGUobG9jYWwuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgaW5kZXguZ2V0KCksIGVudW1l
cmF0b3IuZ2V0KCksIG1vZGUuZ2V0KCksIGJhc2VWYXJpYWJsZSk7CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKLSAgICAgICAgZ2VuZXJhdG9yLnBvcEluZGV4
ZWRGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEZvckluU2Nv
cGUobG9jYWwuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xG
bG93KHByb2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpz
Y29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNh
bFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNz
aW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1
bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+
YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOwogICAgIH0KLSAgICBn
ZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFREWlN0YWNrKTsKIAotICAgIC8vIFN0
cnVjdHVyZSBwcm9wZXJ0eSBsb29wLgotICAgIHsKLSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNj
b3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAg
IFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJl
ZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIC8vIC8vIEluZGV4
ZWQgcHJvcGVydHkgbG9vcC4KKyAgICAvLyB7CisgICAgLy8gICAgIFJlZjxMYWJlbFNjb3BlPiBz
Y29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAgIC8v
ICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIC8v
ICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKIAotICAgICAg
ICBlbnVtZXJhdG9ySW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpLCBqc051bWJlcigwKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0
eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1l
cmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7CisgICAgLy8gICAgIGxlbmd0aCA9
IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJsZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGVudW1lcmF0b3IuZ2V0KCkpOworICAgIC8vICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9
IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDAp
KTsKKyAgICAvLyAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFy
dC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKKyAgICAvLyAgICAg
Z2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgIC8vICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9
IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlO
YW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQo
KSwgbG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzRW51bWVyYWJsZVN0
cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1lLmdl
dCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxz
ZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgLy8gICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wPE9wTGVzcz4o
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBpLmdldCgpLCBsZW5ndGguZ2V0KCkpOworICAgIC8v
ICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQo
KSk7CisgICAgLy8gICAgIGdlbmVyYXRvci5lbWl0SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0KCkpOworICAgIC8vICAgICBnZW5lcmF0
b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgKnNjb3BlLT5jb250aW51ZVRhcmdldCgp
KTsKIAotICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFt
ZS5nZXQoKSk7CisgICAgLy8gICAgIGdlbmVyYXRvci5lbWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0
eU5hbWUuZ2V0KCksIGkuZ2V0KCkpOworICAgIC8vICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihn
ZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CisgICAgLy8gICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyU3RhcnRPZmZzZXQpOwogCi0gICAg
ICAgIGdlbmVyYXRvci5wdXNoU3RydWN0dXJlRm9ySW5TY29wZShsb2NhbC5nZXQoKSwgZW51bWVy
YXRvckluZGV4LmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGJh
c2VWYXJpYWJsZSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50
KTsKLSAgICAgICAgZ2VuZXJhdG9yLnBvcFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCkp
OworICAgIC8vICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3BlKGxvY2FsLmdldCgp
LCBpLmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1l
bnQpOworICAgIC8vICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9jYWwuZ2V0
KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVy
RW5kT2Zmc2V0KTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3co
cHJvZmlsZXJFbmRPZmZzZXQpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3Bl
LT5jb250aW51ZVRhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2Nv
cGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlvbih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEluYyhlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1l
LmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhtX2xleHByKTsgLy8gUGF1c2UgYXQgdGhlIGFzc2ln
bm1lbnQgZXhwcmVzc2lvbiBmb3IgZWFjaCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7CisgICAgLy8gICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9y
LnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlvbih0aGlzLCBmb3JMb29w
U3ltYm9sVGFibGUpOworICAgIC8vICAgICBnZW5lcmF0b3IuZW1pdEluYyhpLmdldCgpKTsKKyAg
ICAvLyAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRo
ZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCisgICAg
Ly8gICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOworCisgICAgLy8gICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgIC8vICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChsb29wRW5kLmdldCgpKTsKKyAgICAvLyB9CisgICAgLy8gZ2VuZXJhdG9yLnJlc3RvcmVU
RFpTdGFjayhwcmVzZXJ2ZWRURFpTdGFjayk7CisKKyAgICAvLyAvLyBTdHJ1Y3R1cmUgcHJvcGVy
dHkgbG9vcC4KKyAgICAvLyB7CisgICAgLy8gICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdl
bmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOworICAgIC8vICAgICBSZWY8
TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOworICAgIC8vICAgICBSZWY8
TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKworICAgIC8vICAgICBlbnVt
ZXJhdG9ySW5kZXggPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBqc051bWJlcigwKSk7CisgICAgLy8gICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5h
bWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgLy8gICAgIGdlbmVyYXRvci5lbWl0
RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1l
cmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7CisKKyAgICAvLyAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOworICAgIC8vICAgICBnZW5lcmF0b3IuZW1p
dExvb3BIaW50KCk7CisKKyAgICAvLyAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdl
bmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1l
LmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3VsdC5nZXQo
KSwgbG9vcEVuZC5nZXQoKSk7CisgICAgLy8gICAgIGdlbmVyYXRvci5lbWl0SGFzRW51bWVyYWJs
ZVN0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHlOYW1l
LmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
SWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisKKyAgICAv
LyAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkp
OworCisgICAgLy8gICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVy
U3RhcnRPZmZzZXQpOworCisgICAgLy8gICAgIGdlbmVyYXRvci5wdXNoU3RydWN0dXJlRm9ySW5T
Y29wZShsb2NhbC5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0
KCksIGVudW1lcmF0b3IuZ2V0KCksIGJhc2VWYXJpYWJsZSk7CisgICAgLy8gICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLnBvcFN0
cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCkpOworCisgICAgLy8gICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyRW5kT2Zmc2V0KTsKKworICAgIC8vICAgICBn
ZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgLy8gICAg
IGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhp
cywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51
bWVyYXRvckluZGV4LmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9y
U3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQo
KSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9y
IGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCisgICAgLy8gICAgIGdlbmVyYXRvci5lbWl0SnVtcChs
b29wU3RhcnQuZ2V0KCkpOwogICAgICAgICAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChz
Y29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0
KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOwotICAgIH0K
LSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFREWlN0YWNrKTsKKyAgICAv
LyAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgLy8g
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOworICAgIC8vICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOworICAgIC8vIH0KKyAgICAvLyBnZW5lcmF0b3IucmVz
dG9yZVREWlN0YWNrKHByZXNlcnZlZFREWlN0YWNrKTsKIAotICAgIC8vIEdlbmVyaWMgcHJvcGVy
dHkgbG9vcC4KLSAgICB7Ci0gICAgICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRv
ci5uZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxv
b3BTdGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BF
bmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAvLyAvLyBHZW5lcmljIHByb3BlcnR5IGxv
b3AuCisgICAgLy8geworICAgIC8vICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUgPSBnZW5lcmF0
b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKKyAgICAvLyAgICAgUmVmPExhYmVs
PiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKKyAgICAvLyAgICAgUmVmPExhYmVs
PiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAvLyAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JHZW5lcmljUHJvcGVydHlO
YW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4
LmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3Bl
cnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJ
bmRleC5nZXQoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0
KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CisgICAgLy8gICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVt
aXRMb29wSGludCgpOwogCi0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5l
cmF0b3IuZW1pdElzTnVsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5n
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxv
b3BFbmQuZ2V0KCkpOworICAgIC8vICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2Vu
ZXJhdG9yLmVtaXRJc051bGwoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUu
Z2V0KCkpOworICAgIC8vICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgp
LCBsb29wRW5kLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQ
cm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNv
bnRpbnVlVGFyZ2V0KCkpOworICAgIC8vICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQ
cm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Cisg
ICAgLy8gICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwogCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAvLyAgICAgdGhpcy0+ZW1pdExvb3BIZWFk
ZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5l
bWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyU3RhcnRPZmZzZXQpOworICAgIC8vICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKIAot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgLy8gICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKIAotICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKCpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5wcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9v
cFN5bWJvbFRhYmxlKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4
LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5
TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRl
eC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQ
YXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0
aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAv
LyAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAg
IC8vICAgICBnZW5lcmF0b3IucHJlcGFyZUxleGljYWxTY29wZUZvck5leHRGb3JMb29wSXRlcmF0
aW9uKHRoaXMsIGZvckxvb3BTeW1ib2xUYWJsZSk7CisgICAgLy8gICAgIGdlbmVyYXRvci5lbWl0
SW5jKGVudW1lcmF0b3JJbmRleC5nZXQoKSk7CisgICAgLy8gICAgIGdlbmVyYXRvci5lbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9y
LmdldCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOworICAgIC8vICAgICBnZW5lcmF0b3IuZW1p
dERlYnVnSG9vayhtX2xleHByKTsgLy8gUGF1c2UgYXQgdGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lv
biBmb3IgZWFjaCBmb3IuLmluIGl0ZXJhdGlvbi4KKyAgICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGxvb3BTdGFydC5nZXQoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29w
ZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOwotICAgIH0KKyAg
ICAvLyAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAg
Ly8gICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOworICAgIC8vICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOworICAgIC8vIH0KIAotICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwoZW5kLmdldCgpKTsKICAgICBnZW5lcmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMp
OwogICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyRW5kT2Zmc2V0
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCA0YjVmMGQ2MjAwOWVlNjkwYmRkZjQzMzAxMDIy
OGFkMGE0YWU0Njc1Li42MDdmYmUxOTVkNmQyYWI5MTg4OGFiYTQyMmEwNjlkMjRkNjNiYjg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCkBAIC0yMTUxLDcgKzIxNTEsMTQgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xv
YmJlckxpbWkKICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgc2V0Rm9yTm9kZShub2Rl
LCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgCisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGNoZWNrIHRoYXQgdGhlIHN0cnVjdHVyZSBkb2Vzbid0IGhhdmUgYW55IGdldHRl
cnMgb3IgcHJvdG90eXBlIGdldHRlcnMgdGhlbiB3ZSBjYW4gdXNlIG1vc3Qgb2YgdGhlIGNvZGUg
YmVsb3cuCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5v
ZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgR2V0QnlWYWw6CiAg
ICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoKQEAgLTIxNjIsMTIgKzIx
NjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgQXRvbWljc1N0b3JlOgog
ICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6IHsKKyAgICAgICAgLy8g
V2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1dCBpdCdzIHVubGlrZWx5
IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0
QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25Db25zdGFudFByb3BlcnR5
ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkgewotICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4ODYgZW52aXJvbm1lbnRz
LgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGFy
cmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQzMDQsNiArNDMwOCw0NCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0
cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgIEFycmF5TW9kZSBh
cnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgaWYgKGFycmF5TW9kZS5pc1Nh
bmVDaGFpbigpKQorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgp
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1i
ZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9CisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgc2V0VHlw
ZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hl
biB0aGUgcHJvcGVydHkgZGVmaW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKKyAgICAg
ICAgLy8gdmFsdWUgaW5mb3JtYXRpb24uCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAg
ICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICB9CisKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgbWFrZUhlYXBUb3BG
b3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5oCmluZGV4IDExMTFmODlmOWQ3YjViOTc3NzhjMTZjOGQ1NDY0MGJlYTM3NDQy
YjIuLmEwMjZhYWQxODkzYmYyM2M1NzE5NmZjYzZjOTFmYzIwMDAzYzQ1NjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaApAQCAtMjg5LDYgKzI4OSwxMSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kc1Nh
bmVDaGFpbjsKICAgICB9CiAKKyAgICBib29sIGlzU2FuZUNoYWluKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0luQm91bmRzU2FuZUNoYWluKCkgfHwgaXNPdXRPZkJvdW5kc1NhbmVD
aGFpbigpOworICAgIH0KKwogICAgIGJvb2wgaXNPdXRPZkJvdW5kcygpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgfHwgc3Bl
Y3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcAppbmRleCBkYjM3ZjRkZGRiZjgwY2Q2NmViNTc4N2Q3YmFhMmJmNTNhZjg5MDc2Li45ZGJk
MGI0N2Q5ZGZmNGNmNjAzOGFmNTAwMTc5MzQ4YmUwYWVhMjk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAKQEAgLTM5MCw3ICszOTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbm9kZS0+Y2hpbGQy
KCktPm1lcmdlRmxhZ3MoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2RlTmVlZHNOZWdaZXJvKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAgICAgICBjYXNlIEVu
dW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNvZGVVc2Vz
QXNWYWx1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLT5tZXJn
ZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5vZGVCeXRlY29kZVVzZXNBc090aGVy
IHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVjb2RlVXNlc0FzQXJyYXlJbmRleCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmlu
ZGV4IGEyOTZjNGI4N2M4NTg4NjRmYmRlZGQ3NGVmNzI3ZTU0ZDk1ZmQ2OTQuLjUwOWVjYjU4OTI0
NTRiNGIzNjg1NDc2YzA3N2FkYWFiZjFiYWNjOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC04NDg2LDYgKzg0ODYsMTI0IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOwogICAgICAgICB9CiAKKyAgICAgICAg
Y2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7CisgICAgICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAg
ICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlLCBBcnJheTo6UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2Rl
Lm1fYmFzZSk7CisgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChieXRlY29kZS5tX2luZGV4
KTsKKyAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVtZXJh
dG9yKTsKKyAgICAgICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNvZGUubV9tb2RlKTsKKwor
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChtb2RlKTsKKyAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQobnVsbHB0cik7IC8vIHN0b3JhZ2UgZm9yIEluZGV4ZWRNb2RlIG9ubHkuCisgICAgICAgICAg
ICBOb2RlKiB1cGRhdGVkSW5kZXhBbmRNb2RlID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgp
KSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisKKyAgICAgICAgICAg
IE5vZGUqIHVwZGF0ZWRNb2RlID0gYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2Rl
LCB1cGRhdGVkSW5kZXhBbmRNb2RlKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX21vZGUs
IHVwZGF0ZWRNb2RlKTsKKworICAgICAgICAgICAgTm9kZSogdXBkYXRlZEluZGV4ID0gYWRkVG9H
cmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCwgdXBkYXRlZEluZGV4QW5kTW9kZSk7Cisg
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9pbmRleCwgdXBkYXRlZEluZGV4KTsKKworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lLCBhZGRUb0dyYXBoKEVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB1cGRhdGVkSW5kZXgsIHVwZGF0ZWRNb2RlLCBlbnVtZXJh
dG9yKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfbmV4dCk7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDogeworICAg
ICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2V0QnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0
QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jaykubV9hcnJheVByb2ZpbGUsIEFy
cmF5OjpSZWFkKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gZ2V0
UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7CisKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBn
ZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5TmFtZSA9IGdl
dChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdl
dChieXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNv
ZGUubV9tb2RlKTsKKyAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yKTsKKworICAgICAgICAgICAgdWludDhfdCBzZWVuTW9kZXMgPSBtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YTsKKyAgICAgICAgICAgIC8vIFRPRE86IHVzZSBoZWxwZXIg
Yml0IG1hc2sgbGlicmFyeSwgd2hhdCBldmVyIHRoYXQgaXMuCisgICAgICAgICAgICBpZiAoc2Vl
bk1vZGVzID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAg
ICAgICAgICAgICBOb2RlKiBiYWRNb2RlID0gYWRkVG9HcmFwaChBcml0aEJpdEFuZCwgbW9kZSwg
anNDb25zdGFudChqc051bWJlcihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2Rl
IHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAg
ICAgICAvLyBXZSBrbm93IHRoZSBBcml0aEJpdEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNvIGl0
J3Mgb2sgdG8gZXhpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzTnVt
YmVyKDApKSksIGJhZE1vZGUpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFz
ZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXgg
c28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0
byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
UGhhbnRvbSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIGVudW1lcmF0b3IpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBD
aGVja2luZyBmb3IgYSBCYWRDb25zdGFudFZhbHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNlIHRo
ZSBHZW5lcmljIHZhcmlhbnQgaWYgd2Ugc3dpdGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJbmRl
eGVkTW9kZSArIE5hbWVkTW9kZSBldmVuIHRob3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAg
ICAgICAgICBpZiAoc2Vlbk1vZGVzICYmICEoc2Vlbk1vZGVzICYgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpHZW5lcmljTW9kZSkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRW
YWx1ZSkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmls
ZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbW9kZVRlc3QgPSBhZGRUb0dyYXBoKFNhbWVWYWx1ZSwgbW9kZSwganNDb25zdGFu
dChqc051bWJlcihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSkpOworICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5m
cmVlemVTdHJvbmcoanNCb29sZWFuKGZhbHNlKSkpLCBtb2RlVGVzdCk7CisKKyAgICAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChpbmRleCk7IC8vIFVzZSBpbmRleCBzbyB3ZSdsbCB1c2UgdGhlIG5vcm1hbCBpbmRleGVkIG9w
dGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8v
IEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNoIEdldEJ5VmFsLgorICAgICAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCht
b2RlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9yKTsKKyAgICAg
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBF
bnVtZXJhdG9yR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3Bl
Y3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFz
ZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eU5hbWUpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1h
dGNoIEdldEJ5VmFsLgorICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChl
bnVtZXJhdG9yKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChO
b2RlOjpWYXJBcmcsIEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQo
KSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKKworICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
ZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZW51
bWVyYXRvcl9pbl9ieV92YWw6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgICAgICAgICBBcnJh
eU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
aykubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0
KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVj
b2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckluQnlWYWwsIE9wSW5mbyhhcnJheU1vZGUu
YXNXb3JkKCkpKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaW5f
YnlfdmFsKTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9oYXNfb3du
X3Byb3BlcnR5OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKTsKKyAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworCisgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KGdldChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQo
Ynl0ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRv
R3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE9wSW5mbyhhcnJh
eU1vZGUuYXNXb3JkKCkpKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0
b3JfaGFzX293bl9wcm9wZXJ0eSk7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2dldF9p
bnRlcm5hbF9maWVsZDogewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRJbnRlcm5hbEZpZWxkPigpOwogICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEludGVybmFsRmllbGQsIE9wSW5mbyhieXRlY29kZS5t
X2luZGV4KSwgT3BJbmZvKGdldFByZWRpY3Rpb24oKSksIGdldChieXRlY29kZS5tX2Jhc2UpKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IGNjMGQwMTRk
YTI5MzFmZjNlY2RjZTk0MjljYzI2MjU2MWUyZjdmNzYuLjA2ZDE5ZDE3Mzk3MzAzZjc0MWJlNmIw
MmJmMDEwNTdmNzIyNTY0ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhh
c2UuY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2co
IiAgIEZvdW5kIG11c3QtaGFuZGxlIGJsb2NrOiAiLCAqYmxvY2ssICJcbiIpOwogICAgICAgICAK
ICAgICAgICAgLy8gVGhpcyBtZXJnZXMgc25hcHNob3Qgb2Ygc3RhY2sgdmFsdWVzIHdoaWxlIENG
QSBwaGFzZSB3YW50IHRvIGhhdmUgcHJvdmVuIHR5cGVzIGFuZCB2YWx1ZXMuIFRoaXMgaXMgc29t
ZXdoYXQgdHJpY2t5LgotICAgICAgICAvLyBCdXQgdGhpcyBpcyBPSyBhcyBsb25nIGFzIERGRyBP
U1IgZW50cnkgdmFsaWRhdGVzIHRoZSBpbnB1dHMgd2l0aCAqcHJvdmVuKiBBYnN0cmFjVmFsdWUg
dmFsdWVzLiBBbmQgaXQgdHVybnMgb3V0IHRoYXQgdGhpcworICAgICAgICAvLyBCdXQgdGhpcyBp
cyBPSyBhcyBsb25nIGFzIERGRyBPU1IgZW50cnkgdmFsaWRhdGVzIHRoZSBpbnB1dHMgd2l0aCAq
cHJvdmVuKiBBYnN0cmFjdFZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMK
ICAgICAgICAgLy8gdHlwZSB3aWRlbmluZyBpcyBjcml0aWNhbCB0byBuYXZpZXItc3Rva2VzLiBX
aXRob3V0IGl0LCBuYXZpZXItc3Rva2VzIGhhcyBtb3JlIHN0cmljdCBjb25zdHJhaW50IG9uIE9T
UiBlbnRyeSBhbmQKICAgICAgICAgLy8gZmFpbHMgT1NSIGVudHJ5IHJlcGVhdGVkbHkuCiAgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGM3MTY0YjMwZjQ2NGViMGQ0MzgyZTJjY2E0MmQ1Njk5
NjRkMWJmNjcuLjc0M2JjZDM1MzE0YTQzMzM2NGUzYTkwNGU4MjBkZjVlMDIzZTQzMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTI5OSw2
ICsyOTksMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNv
ZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX3NldF9wcml2
YXRlX2JyYW5kOgogICAgIGNhc2Ugb3BfY2hlY2tfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9w
X3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6CisgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2luX2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eToKICAgICAgICAgcmV0
dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX2NhbGxfZXZhbDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOWQxMDA0ZmU1M2YzZDQ0
N2RmMTAzZmFjYTBkMmUxMGVjNGZmNWY0Ni4uNzZjMDhhYzVhMmM4Mjk4ZGRiMmNjMjNjMzEyYmUx
ZmRlMjYzODQzYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
QEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgY2Fz
ZSBDaGVja0FycmF5OgogICAgICAgICBjYXNlIENoZWNrQXJyYXlPckVtcHR5OgogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6
CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEdldEFycmF5
TGVuZ3RoOgogICAgICAgICBjYXNlIEdldFZlY3Rvckxlbmd0aDoKQEAgLTM0Myw2ICszNDcsOSBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoK
ICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWU6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7CkBAIC0zNTAsNiAr
MzU3LDY2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAg
IGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7
CisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3
aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7Cisg
ICAgICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAgICBpZiAobW9kZS5p
c1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAg
ICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRl
eGVkSW50MzJQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNo
YWluKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91
YmxlUHJvcGVydGllcywgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hh
aW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAg
ICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVk
Q29udGlndW91c1Byb3BlcnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG1vZGUu
aXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVu
Z3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVz
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGNsb2JiZXJUb3AoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgogICAgIGNhc2UgSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7CkBA
IC03MDUsNiArNzcyLDggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFRvUHJp
bWl0aXZlOgogICAgIGNhc2UgVG9Qcm9wZXJ0eUtleToKICAgICBjYXNlIEluQnlWYWw6CisgICAg
Y2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eToKICAgICBjYXNlIEluQnlJZDoKICAgICBjYXNlIEhhc1ByaXZhdGVOYW1lOgogICAgIGNhc2Ug
SGFzUHJpdmF0ZUJyYW5kOgpAQCAtOTA2LDYgKzk3NSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3Jp
dGVGdQogICAgICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCAr
IHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8v
IEZJWE1FOiBUaGlzIGlzIGZhciB0b28gY29uc2VydmF0aXZlIGZvciB0aGUgY2hpbGQxKCkudXNl
S2luZCgpID09IEludDMyVXNlIGNhc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsK
KyAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAK
ICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJy
YXlNb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNh
YmZlYTkxZGYyMjRiZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNTJhNzMxNjU2NTg2MTI1MDY1
NjBlM2JmM2Y1MWI5NTEzZjNiOWE3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcApAQCAtMzk1LDYgKzM5NSwxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6CiAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKKyAg
ICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3Bl
cnR5OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKICAgICBjYXNlIE1hdGVyaWFsaXpl
TmV3T2JqZWN0OgogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0Ogog
ICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgpAQCAtNTA0LDEwICs1MDgsMTUg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogCiAgICAgY2FzZSBHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QnlWYWw6CisgICAgY2FzZSBFbnVt
ZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0g
QXJyYXk6OlN0cmluZykKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAg
Y2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICBjYXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0QnlW
YWxBbGlhczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmlu
ZGV4IDQ3MjAyZDZkYmFkOTFjNzZmNTk3OGRhMjhjYTFjNDk3NzE1NWE4MTkuLjU1YmMwYThmOTQ2
MjY0NjFlNThmOWE3OGMxYTZmZGZhNTk3OWFlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMTAyNCw2ICsxMDI0LDEzIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPiht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25D
ZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDUpKTsKKyAgICAgICAgICAgIEZBTExU
SFJPVUdIOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAg
ICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKApAQCAtMTA5Niw3ICsxMTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgLy8gc29tZSBhY2Nlc3NlcyB0aGF0IGhpdCBhIGhvbGUgd2lsbCBub3cgbmVl
ZCB0byB0YWtlIHRoZSBmdWxsLWJsb3duCiAgICAgICAgICAgICAgICAgICAgIC8vIG91dC1vZi1i
b3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKICAgICAgICAgICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDY2OAotICAg
ICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9k
ZS50eXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlv
bigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5v
cmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQpAQCAtMTExMSw3ICsxMTE4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFycmF5TW9kZS5zcGVjdWxh
dGlvbigpID09IEFycmF5OjpJbkJvdW5kcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
YW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBIb2xlcyBsb29rIGxpa2UgTmFOIGFscmVhZHksIHNvIGlmIHRoZSB1
c2VyIGRvZXNuJ3QgY2FyZQpAQCAtMTEyMSw3ICsxMTI4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxh
dGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2Rl
LT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWlu
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKKwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTExNzgsNyArMTE4NSwxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4ndCBzZXQgYSBub24t
SlNWYWx1ZSByZXN1bHQgZm9yIEVudW1lcmF0b3JHZXRCeVZhbCBzaW5jZSB3ZSBjb3VsZCBzdGls
bCBkbyBhIE5hbWVkTW9kZSBwcm9wZXJ0eSBhY2Nlc3MuIFdlIGFsc28gZG9uJ3QgaGF2ZSBhIGdv
b2Qgd2F5IHRvCisgICAgICAgICAgICAvLyBwcm92ZSB0aGVyZSdzIG5vIHN0cnVjdHVyZSBwcm9w
ZXJ0aWVzIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVt
ZXJhdG9yR2V0QnlWYWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToK
ICAgICAgICAgICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkKQEAgLTIzNDUs
NiArMjM1Niw0OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBj
YXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgICAgICBFZGdl
JiBiYXNlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICAgICAgICAgIEVkZ2Um
IGluZGV4ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKKyAgICAgICAgICAgIEVkZ2Um
IHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hp
bGRJbmRleCgpKTsKKworICAgICAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgp
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAg
ICAgICBmaXhFZGdlPENlbGxVc2U+KGJhc2UpOworICAgICAgICAgICAgICAgIGJsZXNzQXJyYXlP
cGVyYXRpb24oYmFzZSwgaW5kZXgsIHN0b3JhZ2VFZGdlKTsKKworICAgICAgICAgICAgICAgIEFy
cmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJyYXlNb2RlLmJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgc2V0U2FuZUNoYWluSWZQb3NzaWJsZShub2RlLCBhcnJheU1vZGUuc3BlY3VsYXRpb24o
KSA9PSBBcnJheTo6SW5Cb3VuZHMgPyBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6
T3V0T2ZCb3VuZHNTYW5lQ2hhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaXhF
ZGdlPEtub3duSW50MzJVc2U+KGluZGV4KTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQz
MlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgICAgICBmaXhFZGdl
PEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
SW5kZXg6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZTogeworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MygpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9ySGFzT3duUHJvcGVydHk6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5zaG91bGRTcGVj
dWxhdGVDZWxsKCkpCisgICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4o
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3du
SW50MzJVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgZml4
RWRnZTxLbm93bkNlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CiAg
ICAgICAgICAgICAvLyBXZSB3YW50IHRvIGluc2VydCB0eXBlIGNoZWNrcyBiYXNlZCBvbiB0aGUg
aW5zdHJ1Y3Rpb25UeXBlU2V0IG9mIHRoZSBUeXBlTG9jYXRpb24sIG5vdCB0aGUgZ2xvYmFsVHlw
ZVNldC4KICAgICAgICAgICAgIC8vIEJlY2F1c2UgdGhlIGluc3RydWN0aW9uVHlwZVNldCBpcyBj
b250YWluZWQgaW4gZ2xvYmFsVHlwZVNldCwgaWYgd2UgcHJvZHVjZSBhIHR5cGUgY2hlY2sgZm9y
CkBAIC0zNjkwLDYgKzM3NDQsNjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIE9wSW5mbyhhcnJh
eU1vZGUuYXNXb3JkKCkpLCBFZGdlKGFycmF5LCBLbm93bkNlbGxVc2UpKTsKICAgICB9CiAKKyAg
ICB2b2lkIHNldEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAg
IHN0ZDo6b3B0aW9uYWw8QXJyYXk6OlNwZWN1bGF0aW9uPiBzYW5lQ2hhaW5TcGVjdWxhdGlvbjsK
KyAgICAgICAgaWYgKGFycmF5TW9kZS5pc0pTQXJyYXlXaXRoT3JpZ2luYWxTdHJ1Y3R1cmUoKSkg
eworICAgICAgICAgICAgLy8gQ2hlY2sgaWYgSW5Cb3VuZHNTYW5lQ2hhaW4gd2lsbCB3b3JrIG9u
IGEgcGVyLXR5cGUgYmFzaXMuIE5vdGUgdGhhdDoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyAxKSBXZSBkb24ndCB3YW50IGRvdWJsZSBhcnJheXMgdG8gc29tZXRpbWVzIHJldHVybiB1
bmRlZmluZWQsIHNpbmNlCisgICAgICAgICAgICAvLyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBjaGFu
Z2UgdG8gdGhlIHJldHVybiB0eXBlIGFuZCBpdCB3b3VsZCBwZXNzaW1pc2UKKyAgICAgICAgICAg
IC8vIHRoaW5ncyBhIGxvdC4gU28sIHdlJ2Qgb25seSB3YW50IHRvIGRvIHRoYXQgaWYgd2UgYWN0
dWFsbHkgaGFkCisgICAgICAgICAgICAvLyBldmlkZW5jZSB0aGF0IHdlIGNvdWxkIHJlYWQgZnJv
bSBhIGhvbGUuIFRoYXQncyBwcmV0dHkgYW5ub3lpbmcuCisgICAgICAgICAgICAvLyBMaWtlbHkg
dGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGF0IGNhc2UgaXMgd2l0aCBhbiBlcXVpdmFsZW50IG9m
CisgICAgICAgICAgICAvLyBJbkJvdW5kc1NhbmVDaGFpbiBmb3IgT3V0T2ZCb3VuZHMuIEZvciBu
b3cgd2UganVzdCBkZXRlY3Qgd2hlbiBVbmRlZmluZWQgYW5kCisgICAgICAgICAgICAvLyBOYU4g
YXJlIGluZGlzdGluZ3Vpc2hhYmxlIGFjY29yZGluZyB0byBiYWNrd2FyZHMgcHJvcGFnYXRpb24s
IGFuZCBqdXN0CisgICAgICAgICAgICAvLyB1c2UgSW5Cb3VuZHNTYW5lQ2hhaW4gaW4gdGhhdCBj
YXNlLiBUaGlzIGhhcHBlbnMgdG8gY2F0Y2ggYSBsb3Qgb2YgY2FzZXMuCisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gMikgV2UgZG9uJ3Qgd2FudCBpbnQzMiBhcnJheSBsb2FkcyB0byBo
YXZlIHRvIGRvIGEgaG9sZSBjaGVjayBqdXN0IHRvCisgICAgICAgICAgICAvLyBjb2VyY2UgdG8g
VW5kZWZpbmVkLCBzaW5jZSB0aGF0IHdvdWxkIG1lYW4gdHdpY2UgdGhlIGNoZWNrcy4gV2Ugd2Fu
dCB0bworICAgICAgICAgICAgLy8gYmUgYWJsZSB0byBzYXkgd2UgYWx3YXlzIHJldHVybiBJbnQz
Mi4gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIHByb2ZpbGluZworICAgICAgICAgICAgLy8g
YmFzZWQ/CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gVGhpcyBoYXMgdHdvIGltcGxp
Y2F0aW9ucy4gRmlyc3QsIHdlIGhhdmUgdG8gZG8gbW9yZSBjaGVja3MgdGhhbiB3ZSdkCisgICAg
ICAgICAgICAvLyBsaWtlLiBJdCdzIHVuZm9ydHVuYXRlIHRoYXQgd2UgaGF2ZSB0byBkbyB0aGUg
aG9sZSBjaGVjay4gU2Vjb25kLAorICAgICAgICAgICAgLy8gc29tZSBhY2Nlc3NlcyB0aGF0IGhp
dCBhIGhvbGUgd2lsbCBub3cgbmVlZCB0byB0YWtlIHRoZSBmdWxsLWJsb3duCisgICAgICAgICAg
ICAvLyBvdXQtb2YtYm91bmRzIHNsb3cgcGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CisgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4
CisKKyAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgeworICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFz
RXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4KSkKKyAgICAgICAg
ICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgaGFwcGVucyB0byBiZSBlbnRp
cmVseSBuYXR1cmFsLiBXZSBhbHJlYWR5IHdvdWxkIGhhdmUKKyAgICAgICAgICAgICAgICAvLyBy
ZXR1cm5lZCBhbnkgSlNWYWx1ZSwgYW5kIG5vdyB3ZSdsbCByZXR1cm4gVW5kZWZpbmVkLiBXZSBz
dGlsbCBkbworICAgICAgICAgICAgICAgIC8vIHRoZSBjaGVjayBidXQgaXQgZG9lc24ndCByZXF1
aXJlIHRha2luZyBhbnkga2luZCBvZiBzbG93IHBhdGguCisgICAgICAgICAgICAgICAgaWYgKGlz
NjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMg
JiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUlu
ZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6
T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlNb2Rl
LnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKQorICAgICAgICAgICAgICAgICAgICBz
YW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgorICAgICAg
ICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikg
JiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIEhvbGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwgc28gaWYgdGhlIHVz
ZXIgZG9lc24ndCBjYXJlCisgICAgICAgICAgICAgICAgICAgIC8vIGFib3V0IHRoZSBkaWZmZXJl
bmNlIGJldHdlZW4gVW5kZWZpbmVkIGFuZCBOYU4gdGhlbiB3ZSBjYW4KKyAgICAgICAgICAgICAg
ICAgICAgLy8gZG8gdGhpcy4KKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRp
b24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91
bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRp
dmVJbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJy
YXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHNhbmVDaGFpblNwZWN1bGF0aW9uKQorICAgICAgICAg
ICAgc2V0U2FuZUNoYWluSWZQb3NzaWJsZShub2RlLCAqc2FuZUNoYWluU3BlY3VsYXRpb24pOwor
ICAgIH0KKwogICAgIHZvaWQgc2V0U2FuZUNoYWluSWZQb3NzaWJsZShOb2RlKiBub2RlLCBBcnJh
eTo6U3BlY3VsYXRpb24gc3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAKaW5kZXggNmNhZTA3ZTkwNmY5YzFk
MGVmNDAzMzBjMjMzNDZjNWQ0YzIzZjljMC4uMWJhYTFjOGJjZjUxOTMxNDA0MzBhMTFmYmMwZjNh
ODkyMjE1MWU0NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRl
Z2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAKQEAgLTEzNDQsNiArMTM0
NCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogCisgICAgICAgICAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpICE9IEFycmF5OjpVbmRlY2lkZWQpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTEzODAsNiArMTM4MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBl
eGVjdXRlTm9kZShOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBUZWFjaCB0aGlzIGFib3V0IEVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4LgogICAgICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6IHsKICAgICAgICAgICAgIHNl
dFJlbGF0aW9uc2hpcChSZWxhdGlvbnNoaXA6OnNhZmVDcmVhdGUobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpLCBub2RlLT5jaGlsZDIoKS5ub2RlKCksIFJlbGF0aW9uc2hpcDo6TGVzc1RoYW4pKTsKICAg
ICAgICAgICAgIHNldFJlbGF0aW9uc2hpcChSZWxhdGlvbnNoaXA6OnNhZmVDcmVhdGUobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCBtX3plcm8sIFJlbGF0aW9uc2hpcDo6R3JlYXRlclRoYW4sIC0xKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAppbmRleCAwYTU5M2U1NmE3
ODZkMzkzZmQ4N2I2NTU3ZDM1MmUzZjBkNDA2YWE1Li5lYzVhOGZiNmVhY2UyOWQzNWVkMDU3Y2Q2
NGYwZDZmNDY0NjY0ZDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAKQEAgLTExMSw4ICsxMTEsMTEgQEAgRXhpdE1vZGUgbWF5RXhpdEltcGwoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlLCBTdGF0ZVR5cGUmIHN0YXRlKQogICAgIGNhc2UgRmlsdGVyRGVsZXRlQnlT
dGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJDaGVja1ByaXZhdGVCcmFuZFN0YXR1czoKICAgICBjYXNl
IEZpbHRlclNldFByaXZhdGVCcmFuZFN0YXR1czoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0
cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKICAgICAgICAg
YnJlYWs7CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgogICAg
IGNhc2UgU3RyQ2F0OgogICAgIGNhc2UgQ2FsbDoKICAgICBjYXNlIENvbnN0cnVjdDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXggNjkxNjJiY2ZmNGZkMjczNjIwOTMwYzk3MDdh
NmQwYTQzOGU1ZWQ4MS4uMWMzNGFhZDQ1MjI1MGMxZGY2YjBkYjNkMDY4MjIwODFjMzZhNDZjYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTUyLDYgKzUyLDcgQEAKICNpbmNs
dWRlICJEZWxldGVCeVZhcmlhbnQuaCIKICNpbmNsdWRlICJHZXRCeVZhcmlhbnQuaCIKICNpbmNs
dWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgi
CiAjaW5jbHVkZSAiT3BlcmFuZHMuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgi
CiAjaW5jbHVkZSAiUHV0QnlJZFZhcmlhbnQuaCIKQEAgLTE3NzIsNiArMTc3Myw3IEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBHZXRCeUlkRGlyZWN0Rmx1c2g6CiAgICAgICAgIGNhc2UgR2V0UHJv
dG90eXBlT2Y6CiAgICAgICAgIGNhc2UgVHJ5R2V0QnlJZDoKKyAgICAgICAgY2FzZSBFbnVtZXJh
dG9yR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlW
YWxXaXRoVGhpczoKICAgICAgICAgY2FzZSBHZXRQcml2YXRlTmFtZToKQEAgLTE5NDEsNiArMTk0
Myw4NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczx2b2lkKj4oKTsKICAg
ICB9CiAKKyAgICBib29sIGhhc1N0b3JhZ2VDaGlsZCgpIGNvbnN0CisgICAgeworICAgICAgICBz
d2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGNhc2Ug
U3RyaW5nQ2hhckNvZGVBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDb2RlUG9pbnRBdDoKKyAgICAg
ICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAg
ICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAg
IGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgorICAgICAgICBj
YXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKKyAg
ICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0xvYWQ6Cisg
ICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToKKyAgICAg
ICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6CisgICAgICAgIGNh
c2UgQXJyYXlQdXNoOgorICAgICAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBjYXNlIEdldEFy
cmF5TGVuZ3RoOgorICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVk
IHN0b3JhZ2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdlQ2hp
bGQoKSk7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJB
dDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0Nv
ZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2Fz
ZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5VmFs
RGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgorICAg
ICAgICBjYXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNoYW5n
ZToKKyAgICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0xv
YWQ6CisgICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToK
KyAgICAgICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6CisgICAg
ICAgICAgICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAgIGNh
c2UgQXJyYXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBBcnJh
eVBvcDoKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAy
OworCisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHk6CisgICAgICAgICAgICByZXR1cm4gMjsKKworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICAgICAgcmV0
dXJuIDQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgQXJy
YXlJbmRleE9mIGJ1dCBpdCBkb2VzIG5vbi10cml2aWFsIHRoaW5ncyB0byBkZXRlcm1pbmUgc3Rv
cmFnZSBlZGdlLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgaGFzVWlkT3BlcmFuZCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gb3AoKSA9PSBDaGVja0lkZW50OwpAQCAtMjIwNSw2ICsyMjg1LDEwIEBAIHB1Ymxp
YzoKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgog
ICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBjYXNlIFN0cmluZ0No
YXJDb2RlQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ29kZVBvaW50QXQ6CkBAIC0zMTc0LDYgKzMy
NTgsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8U2V0UHJpdmF0ZUJy
YW5kU3RhdHVzKj4oKTsKICAgICB9CiAKKyAgICBib29sIGhhc0VudW1lcmF0b3JNZXRhZGF0YSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3AoKSA9PSBFbnVtZXJhdG9yTmV4dFVwZGF0
ZUluZGV4QW5kTW9kZTsKKyAgICB9CisKKyAgICBFbnVtZXJhdG9yTWV0YWRhdGEgZW51bWVyYXRv
ck1ldGFkYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wSW5mbzIuYXM8RW51bWVyYXRv
ck1ldGFkYXRhPigpOworICAgIH0KKwogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFt
JiBvdXQpCiAgICAgewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IDVkNGIxN2ZiMzc2NTI4ODg5OGE5MzA4Y2Y2NjU4MTQy
MTdjNTBhZDEuLjVjZTlhZjNlNDUwMzQ4ZWNhYWJhYzFiMWM4OTVhZWMzZTFmNzY4YmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTUxNSw2ICs1MTUsMTMgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEVudW1lcmF0b3JT
dHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1h
Y3JvKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0SlMpIFwKICAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgTm9kZVJlc3VsdEpTIHwgTm9k
ZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCBOb2Rl
UmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCwgTm9k
ZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5h
bWUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JHZXRCeVZhbCwgTm9kZVJl
c3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
RW51bWVyYXRvckluQnlWYWwsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhhc1ZhckFyZ3MgfCBO
b2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRW51bWVyYXRvckhhc093blByb3BlcnR5LCBO
b2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIC8qIE5vZGVzIGZvciBKU01hcCBhbmQgSlNTZXQgKi8gXAogICAgIG1hY3JvKE1hcEhhc2gs
IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKE5vcm1hbGl6ZU1hcEtleSwgTm9kZVJlc3Vs
dEpTKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRl
eCA3MDQxMzMzNWEyMmViMzE0NTczMDZiNWFmYzM1N2EwZDMxMjdhZTk3Li4wNzE4MTJhMDY5NGYy
NjIzNzhkN2ViMzM0NmJmNjk4YWQ5ZDljZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI1MDQsNiArMjUwNCw5MiBAQCBKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYQogICAgIHJldHVybiBqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpLnN0cmluZygpKTsKIH0KIAorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMy
X3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFs
dWUpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOwor
ICAgICAgICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAg
ICAgIG1vZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1
ZSkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4
ZWROYW1lU3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGds
b2JhbE9iamVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVT
dHJpbmcpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0K
KworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1Zh
bHVlOjpOdW1iZXJUYWcpOworICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSk7CisjZWxzZQor
ICAgIC8vIFRPRE8KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgaW5kZXgs
IGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIGlmIChtb2Rl
TnVtYmVyID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAg
ICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+aW5kZXhlZExlbmd0aCgpKQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwg
aW5kZXgpLnN0cmluZygpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiByZXN1bHQgPSBl
bnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9ySW5CeVZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVl
IHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVyKSkK
K3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpk
ZWNvZGUoYmFzZVZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgIGlmIChtb2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgJiYgYmFzZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihiYXNlLmdldE9iamVjdCgpLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4
KSkpOworCisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IGpzU2VjdXJlQ2FzdDxKU1N0cmlu
Zyo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUocHJvcGVydHlOYW1lVmFsdWUpKTsKKyAgICBSRUxFQVNF
X0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1Bh
dGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUpKSkpOworfQor
CitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3Bl
cnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgcHJvcGVydHlOYW1lVmFsdWUsIHVp
bnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKKworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSAmJiBiYXNlLmlzT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UuZ2V0T2JqZWN0
KCktPmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgpKSk7CisKKyAgICBKU1N0cmlu
ZyogcHJvcGVydHlOYW1lID0ganNTZWN1cmVDYXN0PEpTU3RyaW5nKj4odm0sIEpTVmFsdWU6OmRl
Y29kZShwcm9wZXJ0eU5hbWVWYWx1ZSkpOworICAgIGF1dG8gaWRlbnRpZmllciA9IHByb3BlcnR5
TmFtZS0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0
LCBiYXNlLCBpZGVudGlmaWVyKSkpKTsKK30KKwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU0NlbGwqIHJlZ2V4cFB0ciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZExh
c3RJbmRleCkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAppbmRleCAzMTRlMWZlZGU1OTVkMGZiOGZh
ODM1ZWY3MjA1ZTZiNjQ1YzMwNDZiLi43ZDk5YjUwMzY4NDBkNmRkMjMyOTJhYjRiODczYzAyZWU2
ZWJjYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaApAQCAt
MzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIERhdGVJbnN0YW5jZTsKIGNsYXNz
IEpTQmlnSW50Owogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOworY2xhc3MgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTEwLDYgKzExMSwx
MSBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJlUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCos
IEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdl
dFByb3BlcnR5RW51bWVyYXRvckNlbGwsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2Vs
bCopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVG9JbmRleFN0cmluZywg
SlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCkpOworSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgRW5jb2Rl
ZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50
MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJB
VElPTihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90LCBpbnQzMl90LCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JJbkJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50MzJfdCkpOworSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIEVuY29kZWRK
U1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IHVpbnQzMl90LCBpbnQzMl90KSk7CisKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlND
ZWxsKiwgRW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uTmV3QXJyYXksIGNoYXIqLCAoSlNHbG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmUqLCB2b2lkKiwg
c2l6ZV90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0VtcHR5QXJy
YXksIGNoYXIqLCAoVk0qLCBTdHJ1Y3R1cmUqKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4
IGFhN2M2MWU2MGFmNTA3ZWI5MTdlMzA2YmFiODUzN2MwZTg5ZTJlMGQuLjgwNTIzZWI4MzFkMmVh
MGE4NWZhODhjY2Y3ZmM4YTljYmYzNDVkOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC00
NjAsNiArNDYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6
CiAgICAgICAgIGNhc2UgQXRvbWljc0FkZDoKICAgICAgICAgY2FzZSBBdG9taWNzQW5kOgpAQCAt
NDczLDE0ICs0NzQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9n
cmFwaC5jaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9u
KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAg
ICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJh
eU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsIG5vZGUsCiAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAg
U3BlY05vbmUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2Rl
LnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAg
ICAgaWYgKGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVs
bERvdWJsZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9y
QXJpdGhtZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdl
dEJ5VmFsKQorICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1l
dGljKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFs
IHx8IG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDUyQW55KTsKQEAgLTEyMDUsMTAgKzEyMDcsMTUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKICAgICAgICAg
Y2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNw
ZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBj
YXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBJbkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAg
ICAgY2FzZSBIYXNQcml2YXRlTmFtZToKQEAgLTEyMzksNiArMTI0NiwxOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1v
ZGU6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGFjdHVhbGx5IHJldHVybiBhIEpTIG51bGwg
YnV0IHdlIGJyYW5jaCBvZiB0aGF0IGNhc2UgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2sgc28gd2Ug
ZG9uJ3Qgd2FudCB0byBtZXNzIHdpdGgKKyAgICAgICAgICAgIC8vIGZpeHVwJ3MgbG9naWMuCisg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNGdWxsTnVtYmVyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZTogeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgdmFsdWUg
cHJvZmlsZSB3aGV0aGVyIHdlJ3ZlIGV2ZXIgYWN0dWFsbHkgc2VlbiBhIHN5bWJvbC9zdHJpbmcu
CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFBhcnNlSW50OiB7CiAg
ICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyBub2RlIHRvIGFsbW9zdCBhbHdheXMgcHJvZHVj
ZSBhbiBpbnQzMi4gSG93ZXZlciwKICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgaXQgcHJv
ZHVjZXMgTmFOIG9yIGludGVnZXJzIG91dCBvZiBpbnQzMiByYW5nZS4gV2UKQEAgLTEyODIsNiAr
MTMwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAgICAgIGNhc2Ug
QXJpdGhBYnM6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRv
ckdldEJ5VmFsOgogICAgICAgICBjYXNlIFRvVGhpczoKICAgICAgICAgY2FzZSBUb1ByaW1pdGl2
ZTogCiAgICAgICAgIGNhc2UgVG9Qcm9wZXJ0eUtleToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCmluZGV4IGM5NjM3YTFkMTNmYWFmOWVj
MDQ1NjU0ODEwNWY1N2UyOTk5ZDRjMDMuLjY1NjUxMTA0MThkY2FlOWU0ZmVmZmZhOTk0NjIyNzIz
YjQyODA1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93
ZXJpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dl
cmluZ1BoYXNlLmNwcApAQCAtODYsNiArODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbG93
ZXJCb3VuZHNDaGVjayhtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGguY2hpbGQobV9u
b2RlLCAxKSwgbV9ncmFwaC5jaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwog
CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFs
OiB7CiAgICAgICAgICAgICBsb3dlckJvdW5kc0NoZWNrKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCAwKSwgbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMikpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDBmOWJkZTZhMzE1ZGE3MTcyYTMwZjYx
OWVlMmQwYjliNDYwZTJjNTAuLmEwNTFlNzRhNzA2MjExNTljODNiOTYyOTNjODI4NmZlMzU0ZmQy
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBA
IC0zNzIsNiArMzcyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBz
dGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgLy8gdG8g
Y2FwdHVyZSAicHJvZmlsaW5nIiBhdCB0aGUgcG9pbnQgaW4gY29udHJvbCBmbG93IGhlcmUgdGhl
IHVzZXIgcHV0IHRoZW0uCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgRW51bWVy
YXRvckdldEJ5VmFsOgogICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CkBAIC00OTYsNiArNDk3LDEx
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIHJldHVybiBpc1NhZmU7CiAgICAg
fQogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAvLyBU
aGVzZSB0ZWNobmljYWxseSBkb24ndCBoYXZlIGVmZmVjdHMgYnV0IHRoZXknbGwgb25seSBldmVy
IGZvbGxvdyBhIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlIHNvIHdlIG1pZ2h0IGFz
IHdlbGwgcmV0dXJuIGZhbHNlLgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToK
KyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVh
dGVUaGlzOgogICAgIGNhc2UgQ3JlYXRlUHJvbWlzZToKQEAgLTU5NSw2ICs2MDEsOCBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgogICAgIGNhc2Ug
SW5CeVZhbDoKICAgICBjYXNlIEluQnlJZDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgor
ICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgSGFzUHJpdmF0ZU5h
bWU6CiAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgY2FzZSBIYXNPd25Qcm9wZXJ0eToK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5k
ZXggMWI1MWZlYTMzYWNmNjlmNTNlMDk0YTRlNTBhOGI3MGJhNmFhYTcyNi4uODUxY2RlNmJhYTNh
NjFiZWZmMjllNmYxZThjNWY5ZGE4MjU2OGVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE2MzUsMjUgKzE2MzUsMTUgQEAgSlNW
YWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBq
aXQpCiB7CiB9CiAKK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCogaml0LCBHUFJSZWcgc3BlY2lmaWNQYXlsb2FkKQogI2lmIFVTRShKU1ZB
TFVFNjQpCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFs
dWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5k
LCBXaGljaFZhbHVlV29yZCkKLSAgICA6IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCi17Ci19
CisgICAgOiBtX2dwcihqaXQsIHNwZWNpZmljUGF5bG9hZCkKICNlbHNlCi10ZW1wbGF0ZTx0eXBl
bmFtZSBUPgotSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1
bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCByZXN1
bHRXb3JkKQorICAgIDogbV9wYXlsb2FkR1BSKGppdCwgc3BlY2lmaWNQYXlsb2FkKQorICAgICwg
bV90YWdHUFIoaml0KQorI2VuZGlmCiB7Ci0gICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdv
cmQpIHsKLSAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9w
ZXJhbmQpOwotICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOwotICAgICAgICBt
X3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICB9CiB9Ci0j
ZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiBKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1
ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIEpTVmFsdWVPcGVy
YW5kJiBvcGVyYW5kKQpAQCAtMjU5NSw3ICsyNTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdChz
Y3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1h
dCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dy
YXBoLmNoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAxKSk7CkBAIC0yNjA0LDE3ICsyNTk0LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5v
ZGUpCiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZzsKLSAgICBHUFJSZWcgcmVz
dWx0VGFnUmVnID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNP
dXRPZkJvdW5kcygpKSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZWFsUmVzdWx0VGFnKHRoaXMp
OwotICAgICAgICByZXN1bHRUYWcuYWRvcHQocmVhbFJlc3VsdFRhZyk7Ci0gICAgICAgIHJlc3Vs
dFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgIHN0ZDo6dGllKHJlc3Vs
dFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygp
ID8gRGF0YUZvcm1hdEpTIDogRGF0YUZvcm1hdEpTQ2VsbCk7CisgICAgR1BSUmVnIHNjcmF0Y2hS
ZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlz
b24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0
IGFyZSB0b28gbGFyZ2UKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzY3JhdGNoUmVnKTsKQEAgLTI2
NTAsOCArMjYzMyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3Ry
aW5nKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBiaWdDaGFyYWN0ZXIsIHRoaXMsIG9wZXJhdGlv
blNpbmdsZUNoYXJhY3RlclN0cmluZywgc2NyYXRjaFJlZywgJnZtLCBzY3JhdGNoUmVnKSk7CiAK
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7CisgICAgICAgIEFT
U0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0VGFn
UmVnKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAKICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwpAQCAtMjY2OSwzNCArMjY1MywyMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5y
ZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJl
VHJhbnNpdGlvbihvYmplY3RQcm90b3R5cGVTdHJ1Y3R1cmUpOwogCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmlu
Z0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRz
LCB0aGlzLCBKU1ZhbHVlUmVncyhzY3JhdGNoUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSNlbHNl
CiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihtYWtlVW5pcXVlPFNhbmVTdHJpbmdH
ZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywg
dGhpcywgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnKSwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICB9IGVsc2UgewotI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKICAgICAgICAgICAgICAgICBz
bG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbFN0cmluZ0ludCwKLSAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZywg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcpKTsKLSNlbHNlCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIG91
dE9mQm91bmRzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludCwKLSAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnKSwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVy
dHlSZWcpKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZykpOwogICAgICAgICB9CiAgICAgICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7Ci0jZWxzZQotICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9k
ZSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UKLSAgICAgICAgY2VsbFJlc3VsdChzY3JhdGNoUmVnLCBt
X2N1cnJlbnROb2RlKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJl
bnROb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRK
UykKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbV9jdXJyZW50Tm9kZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCksIG1fY3VycmVudE5vZGUpOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUZyb21DaGFyQ29kZShOb2RlKiBub2RlKQpAQCAtMzM0OSwxMyArMzMyMSwyMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpsb2FkRnJvbUludFR5cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VS
ZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZwogICAgIH0KIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwgR1BSUmVnIHJlc3VsdFJlZywg
VHlwZWRBcnJheVR5cGUgdHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiBub2RlLCBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBib29sIGNhblNwZWN1bGF0ZSwgYm9vbCBz
aG91bGRCb3gpCiB7CisgICAgaWYgKHNob3VsZEJveCkgeworICAgICAgICAvLyBUT0RPOiBUaGlz
IGlzIHdyb25nIGZvciBVSW50MzIuLi4KKyAgICAgICAgbV9qaXQuYm94SW50MzIocmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFJlZ3MsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1BSUmVnIHJlc3Vs
dFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOwogICAgIGlmIChlbGVtZW50U2l6ZSh0eXBl
KSA8IDQgfHwgaXNTaWduZWQodHlwZSkpIHsKICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIEFTU0VS
VChlbGVtZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CiAgICAgaWYgKG5v
ZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkgJiYgY2FuU3BlY3VsYXRlKSB7CiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0UmVnLCBUcnVzdGVkSW1tMzIo
MCkpKTsKQEAgLTMzODAsNyArMzM2MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5
cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEdQUlJlZyByZXN1bHRSZWcsIFR5CiAgICAg
ZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJh
eVR5cGUgdHlwZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1i
ZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJy
ZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CiAgICAgCkBA
IC0zMzkyLDEzICszMzcyLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0CiAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBHUFJS
ZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7
CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0
KSA9IHByZWZpeChEYXRhRm9ybWF0SW50MzIpOworICAgIGJvb2wgc2hvdWxkQm94ID0gZm9ybWF0
ID09IERhdGFGb3JtYXRKUzsKIAogICAgIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2sobm9kZSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpOwotICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgcmVzdWx0UmVnLCB0eXBlKTsKKyAgICBsb2FkRnJvbUludFR5cGVk
QXJyYXkoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCB0
eXBlKTsKICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOwotICAgIHNldElu
dFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdFJlZywgdHlwZSwgY2FuU3BlY3VsYXRl
KTsKKyAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2RlLCByZXN1bHRSZWdzLCB0eXBl
LCBjYW5TcGVjdWxhdGUsIHNob3VsZEJveCk7CiB9CiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Omdl
dEludFR5cGVkQXJyYXlTdG9yZU9wZXJhbmQoCkBAIC0zNjM2LDcgKzM2MTgsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KEdQUlJlZyBiYXNl
LCBHUFJSZWcgcHJvcGVydAogICAgIG5vUmVzdWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBl
ZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25G
bG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7
CiAgICAgCkBAIC0zNjQ4LDYgKzM2MzAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUKICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
IERhdGFGb3JtYXQgZm9ybWF0OworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBw
cmVmaXgoRGF0YUZvcm1hdERvdWJsZSk7CisKICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7CiAgICAgZW1pdFR5cGVkQXJy
YXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7CkBAIC0zNjY0LDcgKzM2
NTAsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywg
bm9kZSk7CisgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgbV9qaXQu
Ym94RG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9
PSBEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9k
ZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSogbm9kZSwg
VHlwZWRBcnJheVR5cGUgdHlwZSkKQEAgLTM3MDMsNyArMzY5NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSogbm9kZSkKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSogbm9k
ZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+
KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBhcmcxKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzIodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7CkBAIC0zNzExLDE5ICszNzAzLDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSogbm9kZSkKICAgICBHUFJSZWcgYXJn
MUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwogCisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKwogICAgIHNwZWN1bGF0ZU9iamVjdCht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBhcmcxR1BSKTsKICAgICBzcGVjdWxhdGVTdHJp
bmcobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgYXJnMkdQUik7CiAKICAgICBmbHVzaFJl
Z2lzdGVycygpOwotICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcsIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJv
bChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN5bWJvbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MzEsMTIgKzM3MjQsMTMgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2Rl
KiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJn
MkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOwor
CiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGFyZzFH
UFIpOwogICAgIHNwZWN1bGF0ZVN5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBh
cmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJl
c3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN5
bWJvbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFy
ZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKQEAgLTgwMzgsMTcgKzgwMzIs
MTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0
KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQodmVjdG9yR1BSLCBub2RlKTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMo
Tm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0
QXJndW1lbnRzKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFs
dWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgp
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgSlNWYWx1ZVJlZ3NUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAg
IAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0
LnJlZ3MoKTsKLSAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CisKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdu
b3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcmVz
dWx0UmVncy5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTgwNzksMjIgKzgwNzMsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgLy8gVE9ETzog
QXJlIGJvdGggb2YgdGhlc2UgbmVjZXNzYXJ5Pz8KICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJS
ZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybjsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUo
cmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAgICAgCiAg
ICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKQEAgLTEzNDgyLDYgKzEzNDc4LDI0OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVG9JbmRleFN0cmluZyhOb2RlKiBub2RlKQogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlKE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgbW9kZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MykpOworCisgICAgLy8gVE9ETyBGSVggMzItYml0IHZhbHVlIHJlcHJlc2VudGF0aW9uIC8gYWRk
IGNlbGwgc2xvdyBwYXRoLgorICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKTsKKworICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5yZWdzKCk7Cisg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIG1vZGVHUFIgPSBt
b2RlLmdwcigpOworICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsK
KworICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2Fj
aGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoMCkpKTsKKyAgICB9CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpTVmFs
dWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW51
bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBiYXNlUmVncywgaW5kZXhHUFIsIG1vZGVHUFIsIGVudW1lcmF0b3JHUFIp
OworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4KE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRl
ZFBhaXIodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBhaXJSZWdzID0g
dXBkYXRlZFBhaXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IHBhaXJS
ZWdzLnBheWxvYWRHUFIoKTsKKworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIG1faml0LmFuZDMyKFRydXN0
ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXlsb2FkR1BS
LCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGUoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5q
c1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBwYWlyR1BSID0gaXM2NEJpdCgpID8gcGFpclJlZ3Mu
Z3ByKCkgOiBwYWlyUmVncy50YWdHUFIoKTsKKworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIGlmIGNvbnN0
ZXhwciAoaXM2NEJpdCgpKQorICAgICAgICBtX2ppdC5yc2hpZnQ2NChwYWlyR1BSLCBUcnVzdGVk
SW1tMzIoMzIpLCByZXN1bHRHUFIpOworICAgIGVsc2UKKyAgICAgICAgbV9qaXQubW92ZShwYWly
R1BSLCByZXN1bHRHUFIpOworICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PigoMSA8PCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om51bWJlck9mRW51bWVy
YXRpb25Nb2RlQml0cykpIC0gMSksIHJlc3VsdEdQUik7CisKKyAgICBzdHJpY3RJbnQzMlJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51
bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXhPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZU9wZXJhbmQodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3JPcGVyYW5kKHRo
aXMsIG5vZGUtPmNoaWxkMygpKTsKKworICAgIEdQUlJlZyBpbmRleCA9IGluZGV4T3BlcmFuZC5n
cHIoKTsKKyAgICBHUFJSZWcgbW9kZSA9IG1vZGVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyBl
bnVtZXJhdG9yID0gZW51bWVyYXRvck9wZXJhbmQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVy
cygpOworICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdEdQUih0aGlzKTsKKyAgICBHUFJS
ZWcgcmVzdWx0ID0gcmVzdWx0R1BSLmdwcigpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJlc3VsdCwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKTsKKyAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LCBub2RlKTsKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbChOb2RlKiBub2RlKQorewor
ICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgIGF1
dG8gZ2VuZXJhdGUgPSBbJl0gKEdQUlJlZyBiYXNlQ2VsbEdQUikgeworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFy
eSByZXN1bHQ7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisKKyAgICAgICAgY29t
cGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7CisgICAgICAgICAgICBF
ZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBpZiAoc3RvcmFnZUVkZ2Up
CisgICAgICAgICAgICAgICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0b3JhZ2VFZGdlKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDUpKTsKKworICAgICAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAgICAg
ICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgcmVz
dWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIGJvb2wgaGF2ZVN0b3JhZ2UgPSAhIXN0
b3JhZ2VFZGdlOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VUZW1wb3Jhcnk7Cisg
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKKyAgICAgICAgICAgIGlmICghaGF2ZVN0b3Jh
Z2UpIHsKKyAgICAgICAgICAgICAgICBzdG9yYWdlVGVtcG9yYXJ5ID0gR1BSVGVtcG9yYXJ5KHRo
aXMsIFJldXNlLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gc3Rv
cmFnZVRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgbm90RmFzdE5hbWVkQ2FzZXM7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgZ2VuZXJhdGUgdGhpcyBjb2RlIGlmIHdlIGtub3cgYmFzZSBpcyBub3QgYW4g
b2JqZWN0LgorICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbW9kZUdQUiwgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlKSkpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IFRPRE86IENoZWNrIGl0J3MgYSBjZWxsPworCisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhl
IHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB3ZSBrbm93IHRoZXJlJ3Mg
b25seSBvbmUgc3RydWN0dXJlIGZvciBiYXNlIHdlIGNhbiBqdXN0IGVtYmVkIGl0IGhlcmUuCisg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VD
ZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKworICAg
ICAgICAgICAgICAgIGF1dG8gYmFkU3RydWN0dXJlID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRvckdQ
UiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
CisKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2RlLCBiYWRTdHJ1
Y3R1cmUpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBj
b21waWxlR2V0QnlWYWwgc2hvdWxkIGhhdmUgYWxyZWFkeSBzcGVjdWxhdGVkIG9uIHRoZSBpbmRl
eCBzbyB0aGUgdHlwZSBjaGVjayBhYm92ZSBzaG91bGQgaGF2ZSBwYXNzZWQuCisgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSAh
PSBJbnQzMlVzZSB8fCAhbV9jb21waWxlT2theSk7CisgICAgICAgICAgICAgICAgICAgIG5vdEZh
c3ROYW1lZENhc2VzLmFwcGVuZChiYWRTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICAgICAgICAgIC8v
IElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3Rv
cmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICBpbmRleEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlQ2VsbEdQUiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVT
dG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91
dCBvZiBsaW5lCisgICAgICAgICAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdlKQorICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VDZWxs
R1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAg
ICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
ICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBEYXRhRm9ybWF0SlMpOworICAgICAg
ICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVseSBvbiBjb21waWxlR2V0QnlWYWwgdG8gY2FsbCBq
c1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMga2luZGEgaGFj
a3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZvKG5vZGUpLmpzVmFsdWVSZWdzKCkg
PT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9uSW5mbyhub2RlKS5yZWdpc3RlckZvcm1hdCgpID09
IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICB9
OworCisgICAgaWYgKGlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpKSB7CisgICAgICAgIC8vIFVz
ZSBtYW51YWwgb3BlcmFuZCBzcGVjdWxhdGlvbiBzaW5jZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQg
YSBVc2VLaW5kIG1vcmUgcmVzdHJpY3RpdmUgdGhhbiBDZWxsVXNlLgorICAgICAgICBzcGVjdWxh
dGUobm9kZSwgYmFzZUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlT3Bl
cmFuZCh0aGlzLCBiYXNlRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAg
Z2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2VPcGVyYW5kKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUo
YmFzZU9wZXJhbmQuZ3ByKCkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU2xvd1Bh
dGhGdW5jdGlvblR5cGU+Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhh
c1Byb3BlcnR5KE5vZGUqIG5vZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rp
b24pCit7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlUmVncywgR1BSUmVnIGJhc2VDZWxs
R1BSKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5TmFtZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsKKworICAgICAgICBKU1ZhbHVlUmVncyBw
cm9wZXJ0eU5hbWVSZWdzID0gcHJvcGVydHlOYW1lLnJlZ3MoKTsKKyAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtb2RlR1BSID0gbW9kZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisg
ICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5yZWdzKCkuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IG9wZXJhdGlvbkNhc2VzOworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5v
ZGUoYmFzZUVkZ2UpLm1fdHlwZSAmIH5TcGVjQ2VsbCkKKyAgICAgICAgICAgIG9wZXJhdGlvbkNh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MpKTsKKworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRoaXMgY29kZSBpZiB3ZSBrbm93IGJhc2Ug
aXMgbm90IGEgY2VsbC4KKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQUiwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOworCisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1
bHRHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OworCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsoJm1faml0KTsKKworICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24sIHJl
c3VsdC5yZWdzKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywgcHJvcGVy
dHlOYW1lUmVncywgaW5kZXhHUFIsIG1vZGVHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIGJsZXNzZWRC
b29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgfTsKKworICAgIGlmIChpc0NlbGwo
YmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZS5ncHIoKSwgYmFzZS5ncHIo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBiYXNl
RWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UucmVncygpLCBiYXNlLmdwcigpKTsKKyAgICB9
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2Rl
KiBub2RlKQoreworICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkobm9kZSwgb3BlcmF0
aW9uRW51bWVyYXRvckluQnlWYWwpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqIG5vZGUpCit7CisgICAgY29tcGlsZUVudW1l
cmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHkp
OworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqIG5v
ZGUpCiB7CiAgICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHN0dWJJbmZvOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDk4Yzc2MTZi
OGZkMmZiZjVjNGRkOGE1NzcxNTA4YWQyNjc5Zjk5ZDEuLmVhOGEwYmE1Yzk2ODEzYjUwMWJiOTM0
ODA0OTJjY2FlNDBjYTQ4ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogY2xhc3MgR1BSVGVtcG9yYXJ5OworY2xhc3MgSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnk7CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJhdG9yOwogY2xh
c3MgU3BlY3VsYXRpdmVKSVQ7CkBAIC0yNDYsNiArMjQ3LDggQEAgcHVibGljOgogICAgIH0KICAg
ICBHUFJSZWcgYWxsb2NhdGUoR1BSUmVnIHNwZWNpZmljKQogICAgIHsKKyAgICAgICAgaWYgKHNw
ZWNpZmljID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0ZSgpOwogI2lmIEVO
QUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQogICAgICAgICBtX2ppdC5h
ZGRSZWdpc3RlckFsbG9jYXRpb25BdE9mZnNldChtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRp
ZgpAQCAtMTM0NSwxMiArMTM0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0ZW1wb3Jh
cnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS0+YXJyYXlNb2RlKCkpOwogICAg
IH0KICAgICAKKyAgICAvLyBXZSB1c2UgYSBzY29wZWRMYW1iZGEgdG8gcGxhY2F0ZSByZWdpc3Rl
ciBhbGxvY2F0aW9uIHZhbGlkYXRpb24uCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoTm9kZSos
IGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihE
YXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworCiAgICAgdm9pZCBjb21waWxl
R2V0Q2hhckNvZGVBdChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhO
b2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRnJvbUNoYXJDb2Rl
KE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5v
ZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqLCBjb25zdCBT
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1h
dCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9u
U2NvcGVkQXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1Zh
bHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4
KTsKIAogICAgIHZvaWQgY29tcGlsZUdldFByaXZhdGVOYW1lKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVHZXRQcml2YXRlTmFtZUJ5SWQoTm9kZSopOwpAQCAtMTQyNCwxMiArMTQzMCwxMiBAQCBw
dWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlJc0RldGFjaGVk
SWZPdXRPZkJvdW5kcyhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEpJVENvbXBpbGVyOjpKdW1wIG91
dE9mQm91bmRzKTsKICAgICB2b2lkIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2soTm9kZSosIEdQ
UlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5kZXhHUFIpOwogICAgIHZvaWQgY29tcGlsZUdldFR5cGVk
QXJyYXlCeXRlT2Zmc2V0KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRh
PHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVk
Rm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7
Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiwgVHlwZWRB
cnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9k
ZSosIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsK
ICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2Rl
KiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+
KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxl
UHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGls
ZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5
bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CkBAIC0xNDU4LDcgKzE0NjQs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgRWRnZSB2YWx1ZVVzZSk7CiAgICAgdm9pZCBs
b2FkRnJvbUludFR5cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJl
ZywgR1BSUmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgc2V0SW50VHlw
ZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlUeXBl
LCBib29sIGNhblNwZWN1bGF0ZSk7CisgICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3Vs
dChOb2RlKiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5cGUsIGJvb2wgY2Fu
U3BlY3VsYXRlLCBib29sIHNob3VsZEJveCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNz
VHlwZT4gdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVnLCBSZWdpc3RlcmVkU3Ry
dWN0dXJlLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
LCBzaXplX3QsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0
aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwpAQCAt
MTUyOCw2ICsxNTM0LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxl
U3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQ
cm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKik7CisK
KyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKik7
CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqKTsKKyAgICB2b2lk
IGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSopOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFNsb3dQYXRoRnVuY3Rpb25UeXBlPgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9w
ZXJ0eShOb2RlKiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgIHZvaWQgY29tcGlsZUVudW1l
cmF0b3JJbkJ5VmFsKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHkoTm9kZSopOworCiAgICAgdm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVQdXRCeUlkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRGly
ZWN0KE5vZGUqKTsKQEAgLTE5MzcsNiArMTk1NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlUmVncyhncHIoKSk7CiAgICAgfQorICAgIEpTVmFsdWVSZWdzIHJlZ3Mo
KSB7IHJldHVybiBqc1ZhbHVlUmVncygpOyB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAg
IGJvb2wgaXNEb3VibGUoKSB7IHJldHVybiBtX2lzRG91YmxlOyB9CiAKQEAgLTE5NjUsNyArMTk4
Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzKHRhZ0dQUigpLCBwYXls
b2FkR1BSKCkpOwogICAgIH0KIAotICAgIEdQUlJlZyBncHIoV2hpY2hWYWx1ZVdvcmQgd2hpY2gp
CisgICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCA9IFBheWxvYWRXb3JkKQogICAg
IHsKICAgICAgICAgcmV0dXJuIGpzVmFsdWVSZWdzKCkuZ3ByKHdoaWNoKTsKICAgICB9CkBAIC0y
MDAzLDIxICsyMDIxLDIwIEBAIHByaXZhdGU6CiBjbGFzcyBTdG9yYWdlT3BlcmFuZCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgU3RvcmFnZU9wZXJhbmQoKSA9
IGRlZmF1bHQ7CisKICAgICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJVCog
aml0LCBFZGdlIGVkZ2UpCiAgICAgICAgIDogbV9qaXQoaml0KQogICAgICAgICAsIG1fZWRnZShl
ZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewotICAg
ICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgPT0gVW50
eXBlZFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpOwotICAgICAgICBpZiAo
aml0LT5pc0ZpbGxlZChub2RlKCkpKQotICAgICAgICAgICAgZ3ByKCk7CisgICAgICAgIGVtcGxh
Y2Uoaml0LCBlZGdlKTsKICAgICB9CiAgICAgCiAgICAgflN0b3JhZ2VPcGVyYW5kKCkKICAgICB7
Ci0gICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKLSAgICAg
ICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CisgICAgICAgIGlmIChtX2dwck9ySW52
YWxpZCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9y
SW52YWxpZCk7CiAgICAgfQogICAgIAogICAgIEVkZ2UgZWRnZSgpIGNvbnN0CkBAIC0yMDM2LDYg
KzIwNTMsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2ppdC0+
ZmlsbFN0b3JhZ2UoZWRnZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwogICAg
IH0KKworICAgIHZvaWQgZW1wbGFjZShTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBtX2ppdCA9IGppdDsKKyAgICAgICAgbV9lZGdlID0gZWRnZTsKKyAgICAg
ICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpOworICAgICAgICBBU1NF
UlQobV9qaXQpOworICAgICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSB8
fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICBpZiAoaml0LT5pc0Zp
bGxlZChub2RlKCkpKQorICAgICAgICAgICAgZ3ByKCk7CisgICAgfQogICAgIAogICAgIHZvaWQg
dXNlKCkKICAgICB7CkBAIC0yMDQzLDkgKzIwNzEsOSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAog
cHJpdmF0ZToKLSAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7CisgICAgU3BlY3VsYXRpdmVKSVQq
IG1faml0IHsgbnVsbHB0ciB9OwogICAgIEVkZ2UgbV9lZGdlOwotICAgIEdQUlJlZyBtX2dwck9y
SW52YWxpZDsKKyAgICBHUFJSZWcgbV9ncHJPckludmFsaWQgeyBJbnZhbGlkR1BSUmVnIH07CiB9
OwogCiAKQEAgLTIxMzQsMTEgKzIxNjIsMTkgQEAgY2xhc3MgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
ewogcHVibGljOgogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KCk7CiAgICAgSlNWYWx1ZVJlZ3NU
ZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqKTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVj
dWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZpY1BheWxvYWQpOworI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBHUFJSZWcgc3Bl
Y2lmaWNQYXlsb2FkLCBHUFJSZWcgc3BlY2lmaWNUYWcpOworI2VuZGlmCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFJl
dXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCByZXN1bHRSZWdXb3JkID0gUGF5bG9h
ZFdvcmQpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1c2VU
YWcsIEpTVmFsdWVPcGVyYW5kJik7CiAgICAgfkpTVmFsdWVSZWdzVGVtcG9yYXJ5KCk7CiAgICAg
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhcmVncygpOyB9CisKKyAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSYgb3BlcmF0b3I9KEpTVmFsdWVSZWdzVGVtcG9yYXJ5JiYp
ID0gZGVmYXVsdDsKKwogICAgIEpTVmFsdWVSZWdzIHJlZ3MoKTsKIAogcHJpdmF0ZToKQEAgLTIx
NTAsNiArMjE4NiwyNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCisjaWYgVVNFKEpTVkFMVUU2
NCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdo
aWNoVmFsdWVXb3JkKQorICAgIDogbV9ncHIoaml0LCBSZXVzZSwgb3BlcmFuZCkKK3sKK30KKyNl
bHNlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVS
ZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBX
aGljaFZhbHVlV29yZCByZXN1bHRXb3JkKQoreworICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxv
YWRXb3JkKSB7CisgICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNl
LCBvcGVyYW5kKTsKKyAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKKyAgICAg
ICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7CisgICAgfQor
fQorI2VuZGlmCisKIGNsYXNzIEZQUlRlbXBvcmFyeSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAppbmRleCAyZWE5NTE3N2I5YmY0NTY4NzE5NWJhM2RjYWJhZmI0YWVk
ZTcwNmQ1Li5mNDZkNDZhNWUxNTBiZTg0ZDRmNWRiODhhNGQxZWI0MGQwMGE5MTk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAg
LTIyNDUsNiArMjI0NSwzNzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2Rl
KiBub2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
KE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCit7CisgICAg
c3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpBbnlU
eXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ0FyZ3VtZW50czoKKyAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgorICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUgdHlwZSIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkg
PSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdFJlZ3MuZ3ByKCkpOworCisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkJp
Z1VpbnQ2NEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKKyAgICAgICAgaWYgKG1f
Z3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgIGlmICht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkg
PT0gU3RyaW5nVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVmaXgpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBw
cm9wZXJ0eS5ncHIoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRh
Rm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
dWJJbmZvOworICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKKyAgICAgICAg
ICAgIHN0dWJJbmZvID0gR1BSVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgc3R1YkluZm9H
UFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHNwZWN1bGF0ZShub2Rl
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHBy
ZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0UmVn
cy5ncHIoKTsKKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4u
c2VtYW50aWM7CisgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRD
YWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9y
aWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKKyAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKKworICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklU
VHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlz
VHlwZShTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlz
U3ltYm9sID0gdHJ1ZTsKKworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CisK
KyAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKKyAgICAgICAgICAgIHNsb3dQ
YXRoID0gc2xvd1BhdGhJQ0NhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBn
ZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwK
KyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZv
KCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOworICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJh
eTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAg
ICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
Zm9ybWF0KSA9IHByZWZpeChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMy
ID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdCA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7
CisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3Vs
dCk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFp
bigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9
PSBBcnJheTo6Q29udGlndW91cyk7CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsCisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdCwgbm9kZSwgZm9ybWF0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUp
ID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1
bHRSZWdzLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisKKyAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewor
ICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRSZWcp
OworICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0
UmVnKTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJl
ZykpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWcsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAg
ICB9CisKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAg
ICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAgRlBS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRSZWcgPSBy
ZXN1bHQuZnByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpCisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdz
KCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdFJlZykpOworICAgICAgICAgICAg
aWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUo
cmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYgIXJlc3VsdFJlZ3MpOworICAgICAg
ICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBib29sIHJlc3VsdElzVW5i
b3hlZCA9IG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcik7CisKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
KyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKwor
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVt
cC5mcHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBEYXRh
Rm9ybWF0IGZvcm1hdDsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHBy
ZWZpeChyZXN1bHRJc1VuYm94ZWQgPyBEYXRhRm9ybWF0RG91YmxlIDogRGF0YUZvcm1hdEpTKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7CisgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgIGlm
IChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgICAgIGF1dG8gZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1
ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAg
ICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47CisgICAgICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4pLCB0ZW1wUmVnKTsKKyAgICAgICAg
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJlc3Vs
dFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdCh0ZW1wUmVnLCBub2RlKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBS
ZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwg
bnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0
eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncy5ncHIo
KSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAgICAgICAgICAg
IGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncy5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlz
SW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKworCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxw
dHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSk7CisKKyAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwor
CisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7
CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9i
amVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5
OgorICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5
OjpGbG9hdDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OiB7CisgICAgICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4
KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKQEAgLTI3MTIsNyArMzA3NiwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIFN0
cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24gU3RyaW5nQ2hhckF0IG5vZGUgaGF2
aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0gICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7Cisg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+
KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJl
ZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTI3NDUsMzQ1ICszMTE0LDIwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkFueVR5cGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoK
LSAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVucHJv
ZmlsZWQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBh
cnJheSBtb2RlIHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKLSAgICAgICAgICAgIEdQUlJl
ZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDApKSk7Ci0KLSAgICAgICAgICAgIHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKLSAgICAgICAgICAgIGluZGV4LnVzZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCBy
ZXN1bHRHUFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5
OjpCaWdVaW50NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0g
T2JqZWN0VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBT
eW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTeW1ib2wobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
LmdwcigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7Ci0gICAgICAgICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdC5n
cHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RkOjpv
cHRpb25hbDxHUFJUZW1wb3Jhcnk+IHN0dWJJbmZvOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
LSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHByb3BlcnR5KTsK
LQotICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAg
ICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewotICAgICAg
ICAgICAgICAgIHN0dWJJbmZvLmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgc3R1Yklu
Zm9HUFIgPSBzdHViSW5mby0+Z3ByKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKLQotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9
IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJ
Zk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBpZiAoIW1f
c3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0Nl
bGwpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RD
ZWxsKGJhc2VHUFIpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVP
cmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlH
UFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICAgICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBl
KFNwZWNTdHJpbmcpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlz
U3RyaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSkuaXNUeXBlKFNwZWNTeW1ib2wpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKLQotICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgobV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpERkdKSVQpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQ
YXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1Bh
dGhJQ0NhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJ
bmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdp
bikpLCBzdHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgK
LSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9w
dGltaXplLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwg
Z2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBz
bG93UGF0aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3Zl
KHNsb3dQYXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJh
eTo6Q29udGlndW91cyk7Ci0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGlu
aygmbV9qaXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUs
IEpTVmFsdWVSZWdzKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hJZkVtcHR5KHJlc3VsdC5ncHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21w
aWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERh
dGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHBy
ZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICAgICAgICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERh
dGFGb3JtYXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCAmIERhdGFGb3Jt
YXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEludDMyKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwotCi0gICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBy
ZXN1bHRSZWcpOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJv
dW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuYnJh
bmNoSWZOb3RFbXB0eShyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5r
KCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwot
ICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAg
ICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOwotICAg
ICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBz
bG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcp
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotCi0gICAgICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBG
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRS
ZWcgPSByZXN1bHQuZnByKCk7Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotCi0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJl
c3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91
bmRzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9h
ZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1
bHRSZWcpKTsKLSAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9v
bCByZXN1bHRJc1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNo
YWluKCkgJiYgIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOwotCi0g
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5
PiByZXN1bHQ7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEdQUlJlZz4gcmVzdWx0UmVnOwot
ICAgICAgICAgICAgaWYgKCFyZXN1bHRJc1VuYm94ZWQpIHsKLSAgICAgICAgICAgICAgICByZXN1
bHQuZW1wbGFjZSh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXN1bHRSZWcgPSByZXN1bHQtPmdw
cigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
Ci0gICAgICAgICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQot
ICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBS
ZWcpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5l
Q2hhaW4oKSkgewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRJc1VuYm94ZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBk
b3VibGUgTmFOID0gUE5hTjsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShU
cnVzdGVkSW1tUHRyKCZOYU4pLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdCh0ZW1wUmVnLCBu
b2RlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgICAg
ICAgICAgYm94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgICAg
ICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVn
YXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCAqcmVzdWx0UmVnKTsK
LSAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQoKnJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgICAgICBib3hEb3VibGUodGVt
cFJlZywgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAqcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpy
ZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZF
bXB0eShyZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdFJlZyk7
Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0
UmVnKSk7Ci0gICAgCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgY2FzZSBB
cnJheTo6SW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFt
cGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICBjYXNl
IEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5Ogot
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6IHsKLSAgICAgICAgICAgIFR5cGVkQXJy
YXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwotICAgICAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKLSAgICAg
ICAgfSB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KHJlc3VsdFJlZ3MsIHByZWZlcnJlZEZvcm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkBAIC0zNTgwLDcgKzM2MjQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSBmYWxzZTsKLSAgICAgICAgc2V0SW50VHlw
ZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0R1BSLCB0eXBlLCBjYW5TcGVjdWxhdGUpOwor
ICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRCb3ggPSBmYWxzZTsKKyAgICAgICAgc2V0SW50
VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgdHlwZSwg
Y2FuU3BlY3VsYXRlLCBzaG91bGRCb3gpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtNTMxNCw2ICs1MzU5LDQyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmcobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFj
dE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
SW5kZXg6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
UHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJh
dG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbChub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvckluQnlWYWwobm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNv
bXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKwogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBl
KG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3YWYyODMz
MmIwMzA3NDFiNGQ5YzQwZjBiZWYxZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRkMDM2NzVi
ZGQ1YmUyNzVmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAg
ICAgICAgICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAgICAgICAg
ICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JH
ZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAg
IGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAg
LTM1Miw2ICszNTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAg
ICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVu
dW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAg
ICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApp
bmRleCBhMWE1ZmQyNDRjZjIxMTAzMjY0MTk3YTc2YWUzMGM3ZjYwZjc5ZTY0Li42ZTVkMTBkNDMz
N2M3YTNkYTYxMjNiMzUwZTY4ZTI3OWYxMGI1YjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0yOTgsNiArMjk4LDEzIEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0RW51bWVy
YXRvclN0cnVjdHVyZVBuYW1lOgogICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToK
ICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUlu
ZGV4QW5kTW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgIGNhc2Ug
RW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAg
ICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2Fz
ZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKaW5kZXggMWMyZGQ5NTU1NGIyZjQ1ZGY5NTE0ZGM4NzE0MWNlM2YyZDA2
M2RkYS4uZWU2ODAzMmIwMTYwYjkxMjEyOWJkMGQ2OWM3MDEwMWMzNTNhOTU5NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTU1OCw2ICsx
NTU4LDI3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAg
ICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgICAgICBj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgICAgICAgICBjb21w
aWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgICAgICAgICBj
b21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9yR2V0QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFs
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToK
ICAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC01MDIwLDcgKzUwNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyB3ZSBk
b21pbmF0ZSB0aGVtLgogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisg
ICAgTFZhbHVlIGNvbXBpbGVHZXRCeVZhbEltcGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNl
bWFudGljKTsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpA
QCAtNTA0Nyw4ICs1MDY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZl
IHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNv
bnRpZ3VvdXMpCiAgICAgICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2Up
OwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBtX291dC5uZXdCbG9jaygpOwpAQCAt
NTA4MCw4ICs1MTAwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2Vl
cCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQog
ICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOiB7CkBAIC01MTAwLDggKzUxMTksOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJl
c3VsdCwgcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldERv
dWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCByZXN1bHRJ
c1VuYm94ZWQgPSBtX25vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAm
JiAhKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKQEAgLTUxNDEs
MTggKzUxNjAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0
SXNVbmJveGVkKQotICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkoRG91YmxlLCBm
YXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKERv
dWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgICAgIHJldHVybiBtX291
dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CiAgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogCiAgICAgICAgICAgICBz
cGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihp
bmRleCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZp
bmVkKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVj
dEFyZ3VtZW50czogewpAQCAtNTE2OSw4ICs1MTg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJv
dW5kcyk7CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNl
SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3Jh
Z2UsIGJhc2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2so
KTsKQEAgLTUxOTIsOCArNTIwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7
CkBAIC01MjQ2LDggKzUyNjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVy
Zmxvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpCaWdJbnQ2NEFycmF5OgpAQCAtNTI1NiwyNCArNTI3MCwyMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobV9ub2RlKSkgewogICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkudXNlS2luZCgp
ID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkudXNl
S2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN5bWJv
bCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCAxKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgcmV0dXJu
IHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCB3
ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBs
b3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtNTM3Myw4ICs1Mzg0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAg
ICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CkBAIC01MzkwLDggKzU0MDAsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9v
dXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVw
IGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAg
ICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBp
bkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01NDE3LDEzICs1NDI2LDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
ICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVu
dCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFz
ZSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbXBp
bGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
biBjb21waWxlU3RyaW5nQ2hhckF0SW1wbCgpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpAQCAtNTQ0OCw5ICs1NDU1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvYWRGcm9tSW50VHlwZWRB
cnJheShwb2ludGVyLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBr
ZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAg
ICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwpAQCAtNTQ2OSw4ICs1NDc0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFz
ZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJl
c3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNTQ4MCw4ICs1NDg0LDI0IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAg
IHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAg
ICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBjb25zdGV4cHIg
Ym9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOworICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxv
YWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAg
ICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15QXJn
dW1lbnRCeVZhbCgpCkBAIC04NTcxLDcgKzg1OTEsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgZW1wdHlSZXN1bHQsIHNsb3dSZXN1
bHQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICBM
VmFsdWUgY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKQogICAgIHsKICAgICAgICAgTFZhbHVlIGJh
c2UgPSBsb3dTdHJpbmcobV9ncmFwaC5jaGlsZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVl
IGluZGV4ID0gbG93SW50MzIobV9ncmFwaC5jaGlsZChtX25vZGUsIDEpKTsKQEAgLTg2NzksNyAr
ODY5OSwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2Ug
dGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShi
YXNlKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIHJlc3VsdHMpKTsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgcmVzdWx0cyk7CisgICAgfQorCisgICAgdm9p
ZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoY29tcGls
ZVN0cmluZ0NoYXJBdEltcGwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN0cmlu
Z0NoYXJDb2RlQXQoKQpAQCAtMTI5MDYsNyArMTI5MzEsNyBAQCBwcml2YXRlOgogICAgICAgICBl
bWl0U3RvcmVCYXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9
PSBGZW5jZWRTdG9yZUJhcnJpZXIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQorICAg
IExWYWx1ZSBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChTX0pJVE9wZXJhdGlvbl9HQ1og
c2xvd1BhdGhPcGVyYXRpb24pCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDAp
KTsKQEAgLTEyOTE2LDcgKzEyOTQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3dpdGNoIChtX25v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgTFZhbHVlIHN0b3Jh
Z2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAg
ICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogCiAgICAgICAgICAgICBJbmRleGVk
QWJzdHJhY3RIZWFwJiBoZWFwID0gbW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8KICAgICAg
ICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4
ZWRDb250aWd1b3VzUHJvcGVydGllczsKQEAgLTEyOTUxLDExICsxMjk3NiwxMCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJv
b2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNo
ZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdl
ID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdl
Q2hpbGRJbmRleCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFj
dEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzOwogICAgICAgICAg
ICAgCkBAIC0xMjk4OSwxMiArMTMwMTMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1f
b3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVS
ZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6QXJy
YXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdl
ID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdl
Q2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMzAyNiwxNyArMTMwNDksMjAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1f
b3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJl
c3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAg
ICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRo
T3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82NCh2bUNh
bGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBi
YXNlLCBpbmRleCkpOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIGNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0
aW9uKQorICAgIHsKKyAgICAgICAgc2V0Qm9vbGVhbihjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
SW1wbChzbG93UGF0aE9wZXJhdGlvbikpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUhhc0Vu
dW1lcmFibGVQcm9wZXJ0eSgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwpAQCAt
MTMyMTcsNiArMTMyNDMsMjA1IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgaW5k
ZXgpKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZSgpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAg
ICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAy
KSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMykpOworCisgICAgICAgIGlmIChtX25vZGUtPmVudW1lcmF0b3JNZXRhZGF0
YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdFplcm8z
MihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGhlYWRlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjaGVj
a0hhc1Byb3BlcnR5ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBt
X291dC5qdW1wKGhlYWRlcik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGhlYWRlcik7
CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhQaGkgPSBtX291dC5waGkoSW50MzIsIGluaXRpYWxJ
bmRleCk7CisgICAgICAgICAgICBMVmFsdWUgaW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFkZChp
bmRleFBoaSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5j
cmVtZW50ZWRJbmRleFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbmNyZW1lbnRlZEluZGV4KTsKKyAg
ICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXhQaGksIGluY3JlbWVudGVkSW5k
ZXhSZXN1bHQpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lmxlc3NUaGFuKGluY3Jl
bWVudGVkSW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCkpLCB1bnN1cmUoY2hlY2tIYXNQcm9wZXJ0eSksIHVu
c3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tI
YXNQcm9wZXJ0eSk7CisgICAgICAgICAgICBMVmFsdWUgaGFzUHJvcGVydHkgPSBjb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5SW1wbChvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5
KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChoYXNQcm9wZXJ0eSwgdW5zdXJlKGNvbnRpbnVh
dGlvbiksIHVuc3VyZShoZWFkZXIpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQuemVy
b0V4dChpbmNyZW1lbnRlZEluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6
TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpIDw8IDMyKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAwKSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25F
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKKyAgICB9CisKKyAgICB2b2lkIGNv
bXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCgpCisgICAgeworICAgICAgICBMVmFsdWUg
Ym94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBzZXRJ
bnQzMihtX291dC5jYXN0VG9JbnQzMihib3hlZFBhaXIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNv
bXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBi
b3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExWYWx1
ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LmxTaHIoYm94ZWRQYWlyLCBtX291
dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQoaGlnaEJp
dHMsIG1fb3V0LmNvbnN0SW50MzIoKDEgPDwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpudW1i
ZXJPZkVudW1lcmF0aW9uTW9kZUJpdHMpIC0gMSkpKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBtZXRob2Qgb2YgdmFsdWUgcmVjb3ZlcnkgZm9yIHRo
aXMgbm9kZSBzaW5jZSBpdCdzICJlZmZlY3QiIGZyZWUgYnV0IGFsd2F5cyBsaXZlIGluIGJ5dGVj
b2RlLgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKCkK
KyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcikpOworICAgIH0KKworICAgIHZv
aWQgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCisgICAgeworICAgICAgICBFZGdlIGJhc2VF
ZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICBFZGdlIHByb3Bl
cnR5TmFtZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSk7CisgICAgICAgIEVk
Z2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMik7CisKKyAgICAg
ICAgTFZhbHVlIGJhc2UgPSBERkc6OmlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpID8gbG93Q2Vs
bChiYXNlRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSA6IGxvd0pTVmFsdWUoYmFzZUVk
Z2UpOworCisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gc3RvcmFnZUVkZ2UgPyBsb3dTdG9yYWdl
KHN0b3JhZ2VFZGdlKSA6IG51bGxwdHI7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMy
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0g
bG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsKKyAgICAgICAgTFZhbHVl
IGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCA1KSk7CisK
KyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tTdHJ1Y3R1cmVCbG9jayA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWRCbG9jayA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG91dE9mTGluZUxvYWRCbG9jayA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGdlbmVyaWNJQ0Jsb2NrID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUgaXNOb3ROYW1lZCA9IG1fb3V0LnRlc3RO
b25aZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOwor
ICAgICAgICBtX291dC5icmFuY2goaXNOb3ROYW1lZCwgdW5zdXJlKGdlbmVyaWNJQ0Jsb2NrKSwg
dW5zdXJlKGNoZWNrU3RydWN0dXJlQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhj
aGVja1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgLy8gVE9ETyBjaGVjayBjZWxsPworICAgICAg
ICBMVmFsdWUgc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8gc3RydWN0dXJlID0gbV9zdGF0ZS5m
b3JOb2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOworICAg
ICAgICBpZiAoc3RydWN0dXJlKQorICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5jb25z
dEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cnVj
dHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsK
KworICAgICAgICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVjdHVyZSA9IG1fb3V0LmVxdWFsKHN0
cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKKworICAgICAgICAvLyBUT0RPOiBBbHdh
eXMgdXNlIHRoZSBVc2VLaW5kLi4uCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUocHJvcGVy
dHlOYW1lRWRnZSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpIHx8IHByb3BlcnR5TmFtZUVkZ2UudXNl
S2luZCgpID09IEludDMyVXNlKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5v
VmFsdWUoKSwgbV9ub2RlLCBoYXNFbnVtZXJhdG9yU3RydWN0dXJlKTsKKyAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY2hlY2tJbmxpbmVPck91dE9mTGluZUJsb2NrKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShj
aGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spOworICAg
ICAgICBMVmFsdWUgaW5saW5lQ2FwYWNpdHkgPSBudWxscHRyOworICAgICAgICBib29sIGhhc05v
T3V0T2ZMaW5lUHJvcGVydGllcyA9IGZhbHNlOworICAgICAgICBpZiAoc3RydWN0dXJlKSB7Cisg
ICAgICAgICAgICBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxp
bmVDYXBhY2l0eSgpOworICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdElu
dDMyKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFpbmxpbmVDYXBhY2l0eSkKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQubG9h
ZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElu
bGluZUNhcGFjaXR5KTsKKyAgICAgICAgTFZhbHVlIGlzSW5saW5lID0gaGFzTm9PdXRPZkxpbmVQ
cm9wZXJ0aWVzID8gbV9vdXQuYmVsb3coaW5kZXgsIGlubGluZUNhcGFjaXR5KSA6IG1fb3V0Lmlu
dDMyT25lOworICAgICAgICBtX291dC5icmFuY2goaXNJbmxpbmUsIHVuc3VyZShpbmxpbmVMb2Fk
QmxvY2spLCB1bnN1cmUob3V0T2ZMaW5lTG9hZEJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaW5saW5lTG9hZEJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJ
bmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwKKyAgICAgICAgICAgICAgICBi
YXNlLCBtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQsIEpTT2JqZWN0Ojpv
ZmZzZXRPZklubGluZVN0b3JhZ2UoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mTGluZUxvYWRCbG9jayk7CisgICAg
ICAgIGlmICghc3RvcmFnZSkKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJh
c2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgTFZhbHVlIHJlYWxJbmRl
eCA9IG1fb3V0LnNpZ25FeHQzMlRvNjQoCisgICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3Vi
KGluZGV4LCBpbmxpbmVDYXBhY2l0eSkpKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91
dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgb3V0T2ZMaW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9v
dXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIo
KSwgc3RvcmFnZSwgcmVhbEluZGV4LCBTY2FsZUVpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkp
KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhnZW5lcmljSUNCbG9jayk7CisgICAgICAgIExWYWx1ZSBnZW5lcmljUmVzdWx0ID0g
Y29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9u
b2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlw
ZSkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQo
dHlwZSkpCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveEludDMyKGdlbmVyaWNS
ZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQg
PSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlm
IChnZW5lcmljUmVzdWx0LT50eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgZ2VuZXJpY1Jl
c3VsdCA9IGJveERvdWJsZShnZW5lcmljUmVzdWx0KTsKKworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBnZW5lcmljSUNSZXN1bHQgPSBtX291dC5hbmNob3IoZ2VuZXJpY1Jlc3VsdCk7CisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24pOworICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZ2VuZXJpY0lD
UmVzdWx0LCBvdXRPZkxpbmVSZXN1bHQsIGlubGluZVJlc3VsdCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgorICAgIHZvaWQgY29tcGlsZUVu
dW1lcmF0b3JIYXNQcm9wZXJ0eShTbG93UGF0aEZ1bmN0aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgRWRnZSBiYXNlRWRn
ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgTFZhbHVlIGJhc2Ug
PSBsb3dKU1ZhbHVlKGJhc2VFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAg
ICBMVmFsdWUgcHJvcGVydHlOYW1lID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMSkpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0g
bG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNCkpOworCisgICAgICAgIExCYXNp
Y0Jsb2NrIGlzTmFtZWRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGlzQ2VsbEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
bWF0Y2hlc1N0cnVjdHVyZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgb3BlcmF0aW9uQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC50ZXN0Tm9uWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSwgdW5zdXJlKGlzTmFtZWRCbG9jayksIHVuc3Vy
ZShvcGVyYXRpb25CbG9jaykpOworICAgICAgICBtX291dC5hcHBlbmRUbyhpc05hbWVkQmxvY2sp
OworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoYmFzZSwgcHJvdmVuVHlwZShiYXNlRWRn
ZSkpLCB1bnN1cmUoaXNDZWxsQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxvY2spKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhpc0NlbGxCbG9jayk7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1
cmVJRCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQubG9hZDMy
KGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVj
dHVyZUlEKSksCisgICAgICAgICAgICB1c3VhbGx5KG1hdGNoZXNTdHJ1Y3R1cmVCbG9jayksIHJh
cmVseShvcGVyYXRpb25CbG9jaykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1hdGNoZXNT
dHJ1Y3R1cmVCbG9jayk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5hbWVkUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG9wZXJhdGlvbkJsb2NrKTsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgb3BlcmF0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9v
bGVhbih2bUNhbGwoSW50NjQsIHNsb3dQYXRoRnVuY3Rpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9i
amVjdCksIGJhc2UsIHByb3BlcnR5TmFtZSwgaW5kZXgsIG1vZGUpKSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24pOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1bHQsIG9w
ZXJhdGlvblJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5
VmFsKCkKKyAgICB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0
aW9uRW51bWVyYXRvckluQnlWYWwpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0
b3JIYXNPd25Qcm9wZXJ0eSgpCisgICAgeworICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc1By
b3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CisgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCkKICAgICB7CkBAIC0xNzM0
NCw3ICsxNzU2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmICht
X25vZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkgJiYgY2FuU3BlY3VsYXRlKSB7CiAgICAgICAg
ICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVs
bHB0ciwgbV9vdXQubGVzc1RoYW4ocmVzdWx0LCBtX291dC5pbnQzMlplcm8pKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNzMxNzEwMDk2Y2YzZTI0OThhZTQ1ZGRh
MjZhYTgyZTc5Y2Q0NmE0ZS4uNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTEzOCw2ICsxMzgs
NyBAQCBtb2R1bGUgRFNMCiAjaW5jbHVkZSAiR2V0QnlWYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAi
SW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJJdGVyYXRpb25Nb2RlTWV0YWRhdGEuaCIKKyNpbmNs
dWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNp
bmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5o
IgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAppbmRleCA0
NDQ2MzVlOTgwZDkwYWY4MzdlYmQ2M2I5NjJmYWVkZTJlYzUzNTAzLi5kODc5YzkwYmUzMTE3ODYy
MzNmNTI2YjE4M2VkZjFjYjNjN2JiMzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXIuaApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KENhbGxGcmFtZSopOwogICAg
ICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ29kZUJsb2NrKik7CiAgICAg
ICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU1Njb3BlKik7Ci0gICAgICAg
IEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU09iamVjdCopOworICAgICAgICBB
TFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNDZWxsKik7CiAgICAgICAgIEFMV0FZ
U19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShFbmNvZGVkSlNWYWx1ZSk7CiAKICAgICAgICAg
aW50MzJfdCBpKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKaW5kZXggYzU2ZWY1ZTQ1NTRjYjEwM2FiZWJlNzJlNjI5
OGY4YzQ4YWFkOTg2MC4uNTkzZWY2NjY4ZGUyZTAzYTY1OWIzOWYzMWFmNjBmODhjMjc4Mzk4OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5s
aW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlcklu
bGluZXMuaApAQCAtNjMsNyArNjMsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rl
cjo6b3BlcmF0b3I9KENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHJldHVybiAqdGhpczsKIH0K
IAotQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShKU09iamVjdCog
b2JqZWN0KQorQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShKU0Nl
bGwqIG9iamVjdCkKIHsKICAgICB1LnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUob2Jq
ZWN0KSk7CiAgICAgcmV0dXJuICp0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgKaW5kZXggYWM4YjUxMzdkODUzNTQ1MDZhZWVkY2VkYmQxYzViZDc3MjU3
OWMwMS4uNDE1OWU3ZTUwNDk2OTM3ZWUxZTU2YWZiN2MyMGFlOWNmMmE4OWVlOSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC04ODksNyArODg5LDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYnJhbmNoOCgKICAgICAgICAgICAgIEJlbG93LCBB
ZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoT2JqZWN0VHlwZSkpOwogICAgIH0KLSAgICAKKwogICAgIC8vIE5vdGUgdGhhdCBmaXJzdCBh
bmQgbGFzdCBhcmUgaW5jbHVzaXZlLgogICAgIEp1bXAgYnJhbmNoSWZUeXBlKEdQUlJlZyBjZWxs
R1BSLCBKU1R5cGVSYW5nZSByYW5nZSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAK
aW5kZXggNDJiOGNhZjVmNWNiOGM0YjVmM2FkZWIzZWRhNDdhYjI2OTBkNDkwNC4uNGY3ZjI5NTEy
OGU4YzVlMDkwZTZkMjEyYTI0MWQ4YjM2YjVjYmIyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcApAQCAtMzExLDYgKzMxMSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQogICAgICAg
ICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5F
X1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGVudW1lcmF0b3JfbmV4dCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5n
KQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKICAgICAg
ICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCkBAIC0zNjUsNiArMzY2
LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVf
T1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV9p
ZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlfdmFsKQorICAgICAgICBERUZJ
TkVfT1Aob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51
bWVyYXRvcl9pbl9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2hhc19v
d25fcHJvcGVydHkpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfcHJpdmF0ZV9uYW1lKQogICAg
ICAgICBERUZJTkVfT1Aob3Bfc2V0X3ByaXZhdGVfYnJhbmQpCiAgICAgICAgIERFRklORV9PUChv
cF9jaGVja19wcml2YXRlX2JyYW5kKQpAQCAtNTc4LDYgKzU4Miw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRf
YnlfaWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lk
X2RpcmVjdCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV92YWwpCisgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfcHJpdmF0ZV9uYW1lKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3Bfc2V0X3ByaXZhdGVfYnJhbmQpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9jaGVja19wcml2YXRlX2JyYW5kKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
NDg3YTVhYzViOGU1ZDhhOWQ4MGIyYzZkMzA2ZTA4MTUyMWI4MjgxNC4uMTQyNjA0Mjg3NWRmNTdh
M2VjYTUwZDNjNWI0MzI1ODcwYjg2OTY4OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC02
ODUsNiArNjg1LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CisgICAgICAgIHZvaWQgZ2VuZXJhdGVHZXRCeVZh
bFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBT
bG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBlbWl0X2VudW1lcmF0b3JfaGFzX3By
b3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IE9wY29kZVR5cGUmLCBTbG93UGF0
aEZ1bmN0aW9uVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9o
YXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCmluZGV4IDE1ZTFkMzQ1NzliNmQ0YzhjMTcwZDIzNTBjNmMzNjQ0M2ZmZWE0
MTUuLmJiMGQ1YzdkOWYwZTdhM2U1N2I4NGEyOTBjYWE1OGQzYWUyOTY1YTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC00Miw2ICs0
Miw4IEBACiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdHJp
bmdQcmludFN0cmVhbS5oPgogCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisKIG5hbWVzcGFj
ZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKQEAgLTg2LDEwICs4OCwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+Cit2b2lkIEpJVDo6Z2VuZXJh
dGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMo
aXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlOwpAQCAtMTM2LDYgKzEzOCwxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAg
IH0KIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEdldEJ5VmFsPigpLCBpdGVyKTsKK30KKwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3Bf
Z2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0zNTQwLDYgKzM1
NDcsMTMzIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwo
T3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgcmV0dXJuIHNsb3dDYXNlczsK
IH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0
ZWNvZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNl
OworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lOworICAg
IFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAg
IEp1bXBMaXN0IGdlbmVyaWNDYXNlczsKKyAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CisKKyAgICBh
dXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIG9yOChy
ZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOwor
ICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCisgICAgSnVtcCBp
c05vdE5hbWVkTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisKKyAgICBnZW5lcmljQ2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbChyZWdUMCkpOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7CisgICAgZ2Vu
ZXJpY0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJh
dG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vzcwor
ICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwg
QWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCks
IHJlc3VsdEdQUik7CisKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAvLyBP
dGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAvLyBUT0RP
OiBuZWc2ND8KKyAgICBuZWczMihyZWdUMSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKKyAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGRvbmVD
YXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIGlzTm90TmFtZWRNb2RlLmxpbmsodGhpcyk7CisK
KyAgICBnZW5lcmljQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKSk7CisgICAgLy8g
UmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKworICAgIGdlbmVyaWNDYXNlcy5saW5rKHRoaXMpOworICAg
IGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisKKyAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpC
YXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7CisgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAo
KSk7CisgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CisKKyAgICBkb25lQ2FzZXMubGluayh0
aGlzKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nh
c2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7
Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1
bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBi
eXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9t
b2RlOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihtb2RlLCByZWdUMCk7CisgICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6TmFtZWRNb2RlKSkpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdU
MCk7CisKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OworCisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCByZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgIHNsb3dDYXNlcy5saW5rKHRoaXMpOworCisgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGdlbmVyYWxD
YXNlKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworCisgICAgZG9uZS5saW5rKHRoaXMpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJv
cGVydHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JJbkJ5VmFsPigpLCBzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0X2VudW1lcmF0b3JfaGFz
X3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19v
d25fcHJvcGVydHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJM
RShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlci5hc20KaW5kZXggMzdiNmRmMzBmMTBjM2EwMDFhNTY1NWVhMWJiMWRiNTk1NzNjZjYw
OC4uZjczMjY4OGFlMzJlY2RkYjk3NGJhYmZmYjM2NzJmZmEzYzFiZjVmNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAt
MTk5OCw2ICsxOTk4LDEwIEBAIHNsb3dQYXRoT3AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCiBzbG93
UGF0aE9wKGdldF9kaXJlY3RfcG5hbWUpCiBzbG93UGF0aE9wKGdldF9lbnVtZXJhYmxlX2xlbmd0
aCkKIHNsb3dQYXRoT3AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCitzbG93UGF0aE9wKGVudW1l
cmF0b3JfbmV4dCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9nZXRfYnlfdmFsKQorc2xvd1BhdGhP
cChlbnVtZXJhdG9yX2luX2J5X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9oYXNfb3duX3By
b3BlcnR5KQogc2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KQogc2xv
d1BhdGhPcChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggMTEyOTU0YmI5YjZlNTAx
MzY4ODNiNzQ1NmNiMWU4MzE4ZmI1YTUxMS4uMmVhMzBhNzBiNWRhYTY1M2IwZWJkODA4MGQ1MzJj
MGJlM2UxMjIxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCkBAIC0xMDg0LDExICsxMDg0LDEzNSBAQCBKU0NfREVGSU5FX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQogICAgIFJFVFVS
Tihwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogfQogCitKU0Nf
REVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCkKK3sKKyAg
ICBCRUdJTigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yTmV4dD4o
KTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Cisg
ICAgUmVnaXN0ZXImIG1vZGVSZWdpc3RlciA9IEdFVChieXRlY29kZS5tX21vZGUpOworICAgIFJl
Z2lzdGVyJiBpbmRleFJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpOworICAgIFJlZ2lz
dGVyJiBuYW1lUmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpOworCisgICAg
YXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPiht
b2RlUmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworICAgIHVpbnQzMl90
IGluZGV4ID0gaW5kZXhSZWdpc3Rlci5qc1ZhbHVlKCkuYXNVSW50MzIoKTsKKworICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gR0VUKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIEpT
U3RyaW5nKiBuYW1lID0gbnVsbHB0cjsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAgICBBU1NFUlQoIWVu
dW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1vZGUgPSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7CisgICAgICAgIEpT
T2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgICAg
IENIRUNLX0VYQ0VQVElPTigpOworICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNl
cnZlU3RydWN0dXJlSUQoYmFzZS0+c3RydWN0dXJlSUQoKSk7CisKKyAgICAgICAgbmFtZSA9IGVu
dW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9iamVjdCwgYmFzZSwgaW5kZXgsIG1vZGUpOwor
ICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICB9CisKKyAgICBtb2RlUmVnaXN0ZXIgPSBq
c051bWJlcihzdGF0aWNfY2FzdDx1aW50MzJfdD4obW9kZSkpOworICAgIGluZGV4UmVnaXN0ZXIg
PSBqc051bWJlcihpbmRleCk7CisgICAgbmFtZVJlZ2lzdGVyID0gbmFtZSA/IG5hbWUgOiBqc051
bGwoKTsKKyAgICBFTkQoKTsKK30KKworSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCit7CisgICAgQkVHSU4oKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0
YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1f
bW9kZSkuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworCisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgdW5zaWduZWQg
aW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzSW50MzIoKTsKKyAgICBz
d2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlOiB7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZl
U3RydWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAg
ICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGluZGV4KSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGU6IHsKKyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUu
aXNDZWxsKCkgJiYgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0
b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdsbCBvbmx5
IG1hdGNoIHRoZSBzdHJ1Y3R1cmUgSUQgaWYgdGhlIGJhc2UgaXMgYW4gb2JqZWN0LgorICAgICAg
ICAgICAgICAgIEFTU0VSVChpbmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5
SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXRP
YmplY3QoKS0+Z2V0RGlyZWN0KGluZGV4IDwgZW51bWVyYXRvci0+Y2FjaGVkSW5saW5lQ2FwYWNp
dHkoKSA/IGluZGV4IDogaW5kZXggLSBlbnVtZXJhdG9yLT5jYWNoZWRJbmxpbmVDYXBhY2l0eSgp
ICsgZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZB
TExUSFJPVUdIOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlOiB7CisgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNT
dHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkpOworICAgICAgICAg
ICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3Qp
OworICAgICAgICAgICAgLy8gVE9ETyBEb2VzIHRoaXMgYWN0dWFsbHkgZXZlciB0aHJvdz8gSXNu
J3Qgc3RyaW5nIGJhY2tlZCBieSBhIFVVSUQ/CisgICAgICAgICAgICBDSEVDS19FWENFUFRJT04o
KTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH07CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworSlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCkKK3sKKyAg
ICBCRUdJTigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySW5CeVZh
bD4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNW
YWx1ZSgpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKKyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok1vZGU+KEdFVChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBt
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2Rl
KTsKKworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIGlmIChhdXRvKiBiYXNlID0gYmFz
ZVZhbHVlLmdldE9iamVjdCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRv
ci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1
ZSkpOworCisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5
KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigp
KSkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNv
ZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihDb21t
b25TbG93UGF0aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3RyaW5nLCAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGUpKSk7Cit9CisKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQoreworICAgIEJFR0lO
KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eT4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNW
YWx1ZSgpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKKyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok1vZGU+KEdFVChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBt
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2Rl
KTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1Zh
bHVlKCkpOworICAgIGlmIChhdXRvKiBiYXNlID0gYmFzZVZhbHVlLmdldE9iamVjdCgpKSB7Cisg
ICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYm
IGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkK
KyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOworCisgICAgICAgIGlmIChtb2Rl
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBS
RVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5
dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpKSkpOworICAgIH0KKworICAgIEpT
U3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpz
VmFsdWUoKSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihn
bG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIFJFVFVSTihqc0Jvb2xl
YW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUs
IHByb3BlcnR5TmFtZSkpKTsKK30KKwogSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKIHsKICAgICBCRUdJTigpOwogICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7CiAgICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7CisKICAgICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1Zh
bHVlKCkuYXNVSW50MzJBc0FueUludCgpOwogCiAgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9
IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5oCmluZGV4IGQ4ZDE1MDFmYjM1YmFjMjc5NGM2ZDk0MTAyNzFiYjY4ZjRjYzA1N2UuLjlk
NjQzOGM0ZjQ5NWUxNmQyNjJiOGEzMjFkYTNmMDQwNWRiN2FmNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCkBAIC0yNjQsNiArMjY0LDEw
IEBAIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9kaXJlY3RfcG5h
bWUpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5
X2VudW1lcmF0b3IpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51
bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCk7CitKU0NfREVDTEFSRV9DT01NT05f
U0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOworSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3Bl
cnR5KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX2luZGV4X3N0
cmluZyk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxlX3R5
cGVfY2xlYXJfbG9nKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3Vu
cmVhY2hhYmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCmluZGV4IDIxYzcwYTI3YjY5MWJlMDU2OTBh
MmZhZTc3YzY5OTEyYWVlYzExOWQuLjhmNzFhNTczNmExMTIxMzI3ZjFjNTFiNWM0Y2U5NzRiZGFl
ZjQ1MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcApAQCAtNDksMTIgKzQ5LDEyIEBAIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0CiAKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluZGV4
ZWRMZW5ndGgsIHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdyaXRlQmFycmll
cjxKU1N0cmluZz4qIHByb3BlcnR5TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHByb3BlcnR5TmFtZXNT
aXplKQogICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJl
LmdldCgpKQotICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5hbWVzQnVm
ZmVyKQogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlk
KCkgOiAwKQogICAgICwgbV9pbmRleGVkTGVuZ3RoKGluZGV4ZWRMZW5ndGgpCiAgICAgLCBtX2Vu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgobnVtYmVyU3RydWN0dXJlUHJvcGVydGllcykKICAgICAs
IG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgocHJvcGVydHlOYW1lc1NpemUpCiAgICAgLCBtX2Nh
Y2hlZElubGluZUNhcGFjaXR5KHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSA6IDApCisgICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5TmFtZXNCdWZm
ZXIpCiB7CiB9CiAKQEAgLTE0OCw0ICsxNDgsNjggQEAgdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVy
dHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgUHIK
ICAgICB9CiB9CiAKK0pTU3RyaW5nKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVO
ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJf
dCYgaW5kZXgsIE1vZGUmIG1vZGUsIGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmlu
ZykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaW5kZXgrKzsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEluaXRNb2RlOiB7CisgICAgICAgIG1vZGUgPSBJbmRleGVkTW9kZTsK
KyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9CisKKyAgICBj
YXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGU6IHsKKyAgICAgICAgd2hp
bGUgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpICYmICFiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpIHsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAg
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgICAgIGlmIChpbmRleCA8IGlu
ZGV4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBzaG91bGRBbGxvY2F0ZUluZGV4ZWRO
YW1lU3RyaW5nID8ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJp
bmcoKSkgOiBudWxscHRyOworCisgICAgICAgIGlmICghc2l6ZU9mUHJvcGVydHlOYW1lcygpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgbW9kZSA9IE5hbWVkTW9kZTsK
KyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9CisKKyAgICBj
YXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOgorICAgIGNhc2UgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTogeworICAgICAgICBKU1N0cmluZyogbmFt
ZSA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgICAgICAgICAg
aWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGluZGV4
IDwgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0g
Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lLT52YWx1ZShnbG9iYWxP
YmplY3QpKTsKKyAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBpZiAoYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaWQpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBuYW1lID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
KworICAgICAgICBpZiAoaW5kZXggPj0gZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKQorICAg
ICAgICAgICAgbW9kZSA9IEdlbmVyaWNNb2RlOworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oCmluZGV4IDAyMDExZDQxYzdmNjZkYWQ4ODNhZThkNzcwYjVk
M2QyODZjZDUwODcuLmM0Y2VmYzFiNDhlMzRiOWNiMDUzNTgzZDg4Mjc3Yjg3MWNiY2JlZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTM3LDYgKzM3LDE1IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNDZWxsOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKKyAgICBlbnVt
IE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgSW5pdE1vZGUgPSAwLAorICAgICAgICBJbmRleGVk
TW9kZSA9IDEgPDwgMCwKKyAgICAgICAgTmFtZWRNb2RlID0gMSA8PCAxLAorICAgICAgICBHZW5l
cmljTW9kZSA9IDEgPDwgMiwKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90
IG51bWJlck9mRW51bWVyYXRpb25Nb2RlQml0cyA9IDM7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2Uq
IHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CkBAIC04NCw2ICs5Myw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1f
cHJvcGVydHlOYW1lcyk7CiAgICAgfQogCisgICAgSlNTdHJpbmcqIGNvbXB1dGVOZXh0KEpTR2xv
YmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UsIHVpbnQzMl90JiBjdXJyZW50SW5kZXgsIE1vZGUm
LCBib29sIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPSB0cnVlKTsKKwogICAgIERF
Q0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CkBAIC05MiwxMyArMTAzLDEzIEBAIHBy
aXZhdGU6CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgdWlu
dDMyX3QsIHVpbnQzMl90LCBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KiwgdW5zaWduZWQpOwogICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiYm
KTsKIAotICAgIEF1eGlsaWFyeUJhcnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJv
cGVydHlOYW1lczsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBl
Q2hhaW47CiAgICAgU3RydWN0dXJlSUQgbV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICB1aW50MzJf
dCBtX2luZGV4ZWRMZW5ndGg7CiAgICAgdWludDMyX3QgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUlu
ZGV4OwogICAgIHVpbnQzMl90IG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7CiAgICAgdWludDMy
X3QgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFy
cmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5TmFtZXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWluOwogfTsKIAogdm9pZCBnZXRFbnVtZXJhYmxlUHJv
cGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkm
LCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291
bnQpOwpAQCAtMTQzLDQgKzE1NCw2IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0
dXJuIGVudW1lcmF0b3I7CiB9CiAKK3VzaW5nIEVudW1lcmF0b3JNZXRhZGF0YSA9IHN0ZDo6dW5k
ZXJseWluZ190eXBlX3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDM5Y2NhZWIzYThlNWQxY2RlZTJiZjliYTU5NWVlYTU0MWM4YjkyZTEuLmU3
MTQ4MGE0Nzc3ODJkMWQ2MzZiNTdlOWEyYWMzZTMyYmM1MzRjMDUgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MjEtMDctMTUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAg
ICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0ZWNvZGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzk4OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2Zvci1pbi1i
YXNlLXJlYXNzaWduZWQtbGF0ZXIuanM6CisgICAgICAgICogc3RyZXNzL2Zvci1pbi1kZWxldGUt
ZHVyaW5nLWl0ZXJhdGlvbi5qczoKKyAgICAgICAgKiBzdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1z
dHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanM6CisgICAgICAgICh0ZXN0NSk6CisK
IDIwMjEtMDctMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSlNDXSBVcGRhdGUgSW50bC5Mb2NhbGUgdGVzdCBhZnRlciBBcHBsZUlDVSB1cGRhdGUKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMg
Yi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCmluZGV4IDgz
MTE1YjQ5NzNjODM3Y2E2ZDNmZjA2ZWE2ZmYxMzFjMzQ1MTFlNjIuLjA5ZjgxZDk1NjUzYmFhMTUw
NmU1ZGRhMDYyZmEyZTM1ZjE1OGJmMzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1p
bi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJh
c2UtcmVhc3NpZ25lZC1sYXRlci5qcwpAQCAtMTQsNSArMTQsNSBAQCBub0lubGluZShmb28pOwog
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyh7
MDowLCAxOjEsIGE6MiwgYjozfSk7CiAgICAgaWYgKHJlc3VsdCAhPSA3KQotICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IG5ldyBFcnJv
cigiYmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3It
aW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMKaW5kZXggNWFkMzU2NmZkMGQzNjEwMjVhMWU1
ZjMzNjVkMGJhZDM3NGQ1MTIwMi4uNDNhYWM3ZmFjMjIxZWI2OWQzYzgzNDJhZmVjNjkzY2M5MzZk
NDUyZCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRl
cmF0aW9uLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJh
dGlvbi5qcwpAQCAtMzYsOCArMzYsOSBAQAogICAgIH07CiAgICAgbm9JbmxpbmUoZm9vKTsKICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAgaWYgKGZvbygpICE9
PSAieHoiKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0Iik7CisgICAg
ICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gInh6IikKKyAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiAgICAg
fQogfSkoKTsKIChmdW5jdGlvbigpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcy1v
d24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzIGIvSlNUZXN0
cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5l
c3MuanMKaW5kZXggOTljNTlhYzEwNTY4Y2U4YTc5MDg1MjI5ODIwNmZkYzdlMGUwZjg5Yy4uZTBh
ZGUwNzFhMmU0YjhkMDI3OGQ5NWNjOTMzZTI0ZjE4YmJlZTA1OCAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5l
c3MuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9y
LWluLWxvb3AtY29ycmVjdG5lc3MuanMKQEAgLTEzMiw3ICsxMzIsMTAgQEAgZnVuY3Rpb24gdGVz
dDUoKSB7CiAgICAgby5fX3Byb3RvX18gPSBwOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwOyArK2kpIHsKLSAgICAgICAgYXNzZXJ0KGNvdW50KG8pID09PSAwKTsKKyAgICAgICAgdmFy
IGMgPSBjb3VudChvKTsKKyAgICAgICAgaWYgKGMpCisgICAgICAgICAgICBwcmludChjKTsKKyAg
ICAgICAgYXNzZXJ0KGMgPT09IDApOwogICAgIH0KIH0KIHRlc3Q1KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434250</attachid>
            <date>2021-07-26 15:27:55 -0700</date>
            <delta_ts>2021-07-27 13:55:42 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-227989-20210726182753.patch</filename>
            <type>text/plain</type>
            <size>273699</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5NzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NDc5MTRhNzhlZTE1ZmE2NzY5NWNiOTA1ZmFjNzc2MGExNWUwMjUwLi5jMTkyN2EzMWZhMDUxOGI0
NGQyMTIyYWE1YTRkNGZjYThiNWYzZDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNTUgQEAKKzIwMjEtMDctMjYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0
NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpc3QucmI6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAoSlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2Rl
SW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1w
bCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6Cisg
ICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpyZXdyaXRlT3Ap
OgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZv
ckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9w
SW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojps
b2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAg
IChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29u
dGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0
ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0
dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJ
bkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVy
YXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0OjppbmRleCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAg
ICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6
OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBk
ZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RP
U1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxl
KToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNB
cnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0
YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToK
KyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0
QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVy
YXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9j
YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAg
IChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdwcik6CisgICAgICAgIChKU0M6OkRGRzo6U3Rv
cmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdl
T3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3Bl
cmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6
Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5
OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVj
a3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5
UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dl
ckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21w
aWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNM
LnJiOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVyLmg6CisgICAgICAgICogaW50ZXJw
cmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRv
cj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcyk6CisgICAgICAgICogaml0L0pJ
VC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3By
b3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5
X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJv
cGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0
KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oOgorCisgICAg
ICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9y
OCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpyc2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxldGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1
aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAg
ICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29k
ZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjppc1NhbmVQ
b2ludGVyKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duUHJvcGVydHlJbkZv
ckluTG9vcCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SW5CeVZhbCk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0QnlWYWwpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JOZXh0KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZvckluU2NvcGUpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRm9ySW5TY29wZSk6CisgICAgICAgIChKU0M6
OnJld3JpdGVPcCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZmluYWxpemUpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZmluZEZvckluQ29udGV4dCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUlu
Rm9ySW5Mb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1
c2hJbmRleGVkRm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpwdXNoU3RydWN0dXJlRm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzVmFsaWQgY29uc3QpOgorICAg
ICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmludmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpGb3JJ
bkNvbnRleHQ6OmxvY2FsIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpwcm9w
ZXJ0eU5hbWUgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OnByb3BlcnR5T2Zm
c2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjplbnVtZXJhdG9yIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojptb2RlIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0OjpGb3JJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRl
eHQ6OmJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRJc051bGwpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OnR5
cGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzSW5kZXhl
ZEZvckluQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6aXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmFzSW5kZXhlZEZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkZvckluQ29udGV4dDo6YXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OlN0cnVjdHVyZUZvckluQ29udGV4
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6aW5kZXgg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnBy
b3BlcnR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250
ZXh0OjplbnVtZXJhdG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0OjpiYXNlVmFyaWFibGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEluSW5zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YWRkSGFzT3duUHJvcGVydHlKdW1wKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmluZGV4
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6YWRk
R2V0SW5zdCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHA6CisgICAgICAgIChKU0M6Okhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZm
ZWN0cyk6CisgICAgICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
OkFycmF5TW9kZTo6aXNTYW5lQ2hhaW4gY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgor
ICAgICAgICAqIGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhh
c2U6OmluamVjdE9TUik6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJl
cml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9E
RkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6c2V0SlNBcnJheVNhbmVDaGFp
bklmUG9zc2libGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6R3JhcGg6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6
YXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAq
IGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rp
b24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0b3JhZ2VDaGlsZCBjb25zdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RvcmFnZUNoaWxkSW5kZXgpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Omhhc0FycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFz
RW51bWVyYXRvck1ldGFkYXRhIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjplbnVt
ZXJhdG9yTWV0YWRhdGEpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04pOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
U1NBTG93ZXJpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBTG93ZXJpbmdQaGFz
ZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1Zh
bHVlUmVnc1RlbXBvcmFyeSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
TmV4dFVwZGF0ZUluZGV4QW5kTW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUVudW1lcmF0b3JHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckluQnlWYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVl
T3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdwcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpE
Rkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRp
ZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVj
a0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAq
IGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUdldEJ5VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdl
bmVyYXRvci9EU0wucmI6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0
ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAg
ICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAg
ICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAg
ICAgICAgKEpTQzo6SklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVy
YXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1l
cmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3Jf
aGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAgICAgICogcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6cHJvcGVydHlOYW1lRW51bWVy
YXRvcik6CisKIDIwMjEtMDctMDggIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5j
b20+CiAKICAgICAgICAgZGlzcGxheS1wcm9maWxlci1vdXRwdXQgc2hvdWxkIGJlIGFibGUgdG8g
cHJpbnQgZGlzYXNzZW1ibHkgZm9yIHRoZSBGVEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggYTZhNGVkZjg5NzUw
NzVkNTk5NDE3NDhkYWY5MDM0OWQ2N2RiMWM5Yy4uYjE3MTZmODQ0NmEzNmQ2YmNhZDUzMzNmMzM3
NDc5ZWYwZWI0OGMwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTg1NCw2ICs4NTQsMTMgQEAgcHVibGljOgog
ICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJlc3MpOwogICAgIH0KIAorICAg
IHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGxvYWQ4KGFkZHJlc3MubV9wdHIsIGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJ
REFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIG9yMzIoc3JjLCBkYXRhVGVtcFJlZ2lzdGVyLCBk
YXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc3RvcmU4KGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJl
c3MubV9wdHIpOworICAgIH0KKwogICAgIHZvaWQgb3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFic29s
dXRlQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgTG9naWNhbEltbWVkaWF0ZSBsb2dp
Y2FsSW1tID0gTG9naWNhbEltbWVkaWF0ZTo6Y3JlYXRlMzIoaW1tLm1fdmFsdWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
NkNvbW1vbi5oCmluZGV4IGEyNjU1M2E1YmNlMGZjZjdiZjA4MDcyZjU5ODJjOWI1MDc2MjBhZWYu
LmRhZWNiZTcyNzU3MzZiZTg0ZTk5Zjc4ZjUwN2U4NDY3MjhjYzI3NGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmgKQEAgLTYyNSw2ICs2MjUsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5v
cmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0LmluZGV4LCBkZXN0LnNjYWxl
KTsKICAgICB9CiAKKyAgICB2b2lkIG9yOChSZWdpc3RlcklEIHNyYywgQWJzb2x1dGVBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0
ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgb3I4KHNyYywgQWRkcmVzcyhzY3JhdGNo
UmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihBZGRyZXNzIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIub3JsX21yKHNyYy5vZmZzZXQs
IHNyYy5iYXNlLCBkZXN0KTsKQEAgLTY2NSw2ICs2NzEsMTIgQEAgcHVibGljOgogICAgICAgICBt
X2Fzc2VtYmxlci5vcmJfaW0oc3RhdGljX2Nhc3Q8aW50OF90PihpbW0ubV92YWx1ZSksIGFkZHJl
c3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpOwog
ICAgIH0KIAorICAgIHZvaWQgb3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIp
LCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIG9yOChpbW0sIEFkZHJlc3Moc2NyYXRjaFJl
Z2lzdGVyKCkpKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBvcDEsIFJlZ2lz
dGVySUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAob3AxID09IG9w
MikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZfNjQuaAppbmRleCAzMzQ3MmRkOTMxYTk3YjA5Yjk3ZGM5MmY1MTFlNmMyMmRjYTMy
MTIyLi42OTFiNjUwZGI0MDk5Zjc0MWQyOTM3NmZkZjNkMDdjYzY1ZjZiMTYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oCkBAIC05NywxMiArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIG9yMTYoaW1tLCBBZGRyZXNz
KHNjcmF0Y2hSZWdpc3RlcigpKSk7CiAgICAgfQogCi0gICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMy
IGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCi0gICAgewotICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKLSAgICAgICAgb3I4
KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOwotICAgIH0KLQogICAgIHZvaWQgc3Vi
MzIoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewogICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcigp
KTsKQEAgLTU4Nyw2ICs1ODEsMTIgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogCisgICAg
dm9pZCByc2hpZnQ2NChSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgICAgICByc2hpZnQ2
NChpbW0sIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMiBp
bW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnNocnFfaThy
KGltbS5tX3ZhbHVlLCBkZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuaAppbmRleCBiMDJlNTYwMjEwMjY0OTllZjM3NWJjNjA5MTRhOWE0ZGUwMWIy
ZGY2Li5kY2FmMGJhNmNhMzE4ZjE4MDI5MmNiYThkN2RjMDBmYTU3NzkxZWEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCkBAIC0xODEsNyArMTgx
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oaGFzT3duUHJvcGVydHlGdW5jdGlvbikg
XAogICAgIG1hY3JvKGNyZWF0ZVByaXZhdGVTeW1ib2wpIFwKICAgICBtYWNybyhlbnRyaWVzKSBc
Ci0gICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMpCisgICAgbWFjcm8ob3V0T2ZMaW5l
UmVhY3Rpb25Db3VudHMpIFwKKyAgICBtYWNybyhlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3Ip
CiAKIAogbmFtZXNwYWNlIFN5bWJvbHMgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggMTgyNWVjMmFkNWEwMzM5ZDRmM2VmMTk1ZGQ2Zjlm
Y2YyMmQwNjQ5Yy4uOTcyOTYzMGRiZGJhMzkwZDYzNTQwMjgxY2M0YmQxNmUzOTM2NjVlMCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCkBAIC0y
OSw2ICsyOSw3IEBAIHR5cGVzIFsKICAgICA6RGVidWdIb29rVHlwZSwKICAgICA6RUNNQU1vZGUs
CiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCisgICAgOkVudW1lcmF0b3JNZXRhZGF0YSwK
ICAgICA6R2V0QnlJZE1vZGUsCiAgICAgOkdldEJ5SWRNb2RlTWV0YWRhdGEsCiAgICAgOkdldEJ5
VmFsSGlzdG9yeSwKQEAgLTEyNDEsNiArMTI0Miw2NSBAQCBvcCA6dG9faW5kZXhfc3RyaW5nLAog
CiBvcCA6dW5yZWFjaGFibGUKIAorb3AgOmVudW1lcmF0b3JfbmV4dCwKKyAgICBhcmdzOiB7Cisg
ICAgICAgICMgb3V0CisgICAgICAgIHByb3BlcnR5TmFtZTogVmlydHVhbFJlZ2lzdGVyLAorICAg
ICAgICAjIGluL291dAorICAgICAgICBtb2RlOiBWaXJ0dWFsUmVnaXN0ZXIsICMgV2lsbCBhbHdh
eXMgYmUgYSBKUyBVSW50MzIgcmVwcmVzZW50aW5nIGEgSlNGb3JJbk1vZGUuCisgICAgICAgIGlu
ZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsICMgR2V0cyByZXNldCB0byB6ZXJvIGV2ZXJ5IHRpbWUgbW9k
ZSBjaGFuZ2VzLgorICAgICAgICAjIGluCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
KyAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRh
dGE6IHsKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1l
cmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAorICAgIH0KKworb3AgOmVudW1lcmF0
b3JfZ2V0X2J5X3ZhbCwKKyAgICBhcmdzOiB7CisgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVy
LAorICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxS
ZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAg
IGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdp
c3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJv
ZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1l
cmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAorICAgIH0KKworb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAorICAgIGFyZ3M6IHsKKyAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTogVmlydHVhbFJl
Z2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAg
aW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lz
dGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJh
eVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRh
LAorICAgIH0KKworb3AgOmVudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSwKKyAgICBhcmdzOiB7
CisgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBiYXNlOiBWaXJ0dWFsUmVn
aXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlO
YW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCisg
ICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRh
OiB7CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJh
dG9yTWV0YWRhdGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKKyAgICB9CisKIG9wIDpjcmVhdGVfcmVz
dCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKaW5kZXggMDc1
NjE4OTlhNjIwOWUzNmNiZmE3MmEwNTRmMTUxMmQ2NzM4YzBjYy4uOWI0MTU5M2YzNDRkODdjNGY1
MDZmYzRiMTY1MDRhMWM4ZjYxMDE3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCkBAIC0yOTUsNiArMjk1LDExIEBAIHZvaWQgY29t
cHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3Rl
ciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQogCisgICAgVVNF
UyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRvcikKKyAgICBV
U0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4
LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFzZSwgbW9kZSwg
cHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckhh
c093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9y
KQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVzZUF0RWFjaENo
ZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGwsIGJ5dGVjb2Rl
Lm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNTY3LDYgKzU3Miwx
MSBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWduZWQgbnVtVmFy
cywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogCiAgICAgREVGUyhPcENhdGNoLCBleGNlcHRp
b24sIHRocm93blZhbHVlKQogCisgICAgREVGUyhPcEVudW1lcmF0b3JOZXh0LCBwcm9wZXJ0eU5h
bWUsIG1vZGUsIGluZGV4KQorICAgIERFRlMoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIGRzdCkKKyAg
ICBERUZTKE9wRW51bWVyYXRvckluQnlWYWwsIGRzdCkKKyAgICBERUZTKE9wRW51bWVyYXRvckhh
c093blByb3BlcnR5LCBkc3QpCisKICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCBmY2Zh
MjkyYWQwNGVmMTA2MDUyNWUzN2YxYTg4NjYxNGQzNTQ4NzQ4Li45OWEzNmYxODFhZjMxZmRlZmRh
YmFhMDM2YjYwNzk0MGZjZDdjYTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcApAQCAtNTAzLDYgKzUwMywxMSBAQCBib29sIENvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGluawogCiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTkso
T3BFbnVtZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5
VmFsLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAg
ICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHBy
b2ZpbGUpCiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhh
ODYxZGIxNWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0
NTY3YWFmNDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9w
ZXJ0eUZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxs
cHRyKSBcCisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAog
CiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBh
MWQzMjRiNjM4NWE1NTNjMWY5NWRmNGQxOS4uOTdiODU2ZDVkMWYzYjA1YjQxMzNhNTcxYWE1MGFl
NjMzMmUzZjRmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09w
Y29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAt
OTksNiArOTksNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wVGFpbENh
bGxGb3J3YXJkQXJndW1lbnRzKSBcCiAgICAgbWFjcm8oT3BDb25zdHJ1Y3RWYXJhcmdzKSBcCiAg
ICAgbWFjcm8oT3BHZXRCeVZhbCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBc
CiAgICAgbWFjcm8oT3BHZXREaXJlY3RQbmFtZSkgXAogICAgIG1hY3JvKE9wR2V0QnlJZCkgXAog
ICAgIG1hY3JvKE9wR2V0QnlJZFdpdGhUaGlzKSBcCkBAIC0xMzYsNiArMTM3LDEwIEBAIHN0YXRp
YyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6Omdl
dE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BJbkJ5VmFsKSBcCiAgICAgbWFjcm8oT3BQ
dXRCeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWxEaXJlY3QpIFwKKyAgICBtYWNybyhPcEVu
dW1lcmF0b3JOZXh0KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKKyAgICBt
YWNybyhPcEVudW1lcmF0b3JJbkJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHkpIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9BTExPQ0FU
SU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAppbmRleCBkODEx
ZDkxM2M4ZmUxMmRlNmM0NzkzZDQ5M2NmNjdiMmVkMTUzOTAxLi4yY2FhNjM1YzQ5YzEzNzAxMjI3
ZGU3MWNlNTlmOWU2ZjhlZDczYTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTU2OCwxOCArNTY4LDE5IEBAIFNwZWN1bGF0
ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICByZXR1cm4gZmlsdGVyZWRSZXN1bHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wg
aXNTYW5lUG9pbnRlcihjb25zdCB2b2lkKiBwb2ludGVyKQorQUxXQVlTX0lOTElORSBzdGF0aWMg
Ym9vbCBpc1NhbmVQb2ludGVyKGNvbnN0IHZvaWQqICkKIHsKLSAgICAvLyBGSVhNRTogcmRhcjov
LzY5MDM2ODg4OiByZW1vdmUgdGhpcyB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0jaWYgQ1BVKEFE
RFJFU1M2NCkKLSAgICB1aW50cHRyX3QgcG9pbnRlckFzSW50ID0gYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4ocG9pbnRlcik7Ci0gICAgdWludHB0cl90IGNhbm9uaWNhbFBvaW50ZXJCaXRzID0gcG9p
bnRlckFzSW50IDw8ICg2NCAtIE9TX0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJRFRIKSk7
Ci0gICAgdWludHB0cl90IG5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRlckFzSW50ID4+
IE9TX0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNTX1dJRFRIKTsKLSAgICByZXR1cm4gIW5vbkNh
bm9uaWNhbFBvaW50ZXJCaXRzICYmIGNhbm9uaWNhbFBvaW50ZXJCaXRzOwotI2Vsc2UKLSAgICBV
TlVTRURfUEFSQU0ocG9pbnRlcik7CiAgICAgcmV0dXJuIHRydWU7Ci0jZW5kaWYKKy8vICAgICAv
LyBGSVhNRTogcmRhcjovLzY5MDM2ODg4OiByZW1vdmUgdGhpcyB3aGVuIG5vIGxvbmdlciBuZWVk
ZWQuCisvLyAjaWYgQ1BVKEFERFJFU1M2NCkKKy8vICAgICB1aW50cHRyX3QgcG9pbnRlckFzSW50
ID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocG9pbnRlcik7CisvLyAgICAgdWludHB0cl90IGNh
bm9uaWNhbFBvaW50ZXJCaXRzID0gcG9pbnRlckFzSW50IDw8ICg2NCAtIE9TX0NPTlNUQU5UKEVG
RkVDVElWRV9BRERSRVNTX1dJRFRIKSk7CisvLyAgICAgdWludHB0cl90IG5vbkNhbm9uaWNhbFBv
aW50ZXJCaXRzID0gcG9pbnRlckFzSW50ID4+IE9TX0NPTlNUQU5UKEVGRkVDVElWRV9BRERSRVNT
X1dJRFRIKTsKKy8vICAgICByZXR1cm4gIW5vbkNhbm9uaWNhbFBvaW50ZXJCaXRzICYmIGNhbm9u
aWNhbFBvaW50ZXJCaXRzOworLy8gI2Vsc2UKKy8vICAgICBVTlVTRURfUEFSQU0ocG9pbnRlcik7
CisvLyAgICAgcmV0dXJuIHRydWU7CisvLyAjZW5kaWYKIH0KIAogU3BlY3VsYXRlZFR5cGUgc3Bl
Y3VsYXRpb25Gcm9tQ2VsbChKU0NlbGwqIGNlbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDczOTBk
NTJjNGFlMWFhMWMzZTIyNmM5NTIyZjdiNDQ2NzljOTZkZTMuLjY4NWNjNDA5MzdmYzExNWU3ODYw
YjRmY2FlMzZkM2I3YzIyYmM3OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xNTAzLDExICsxNTAz
LDExIEBAIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0V2lkZUp1bXBJZk5vdEZ1bmN0
aW9uSGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCoKICAgICByZXR1cm4gbV9sYXN0SW5zdHJ1Y3Rp
b24ub2Zmc2V0KCk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blN0
cnVjdHVyZVByb3BlcnR5SW5Gb3JJbkxvb3AoU3RydWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1
cmVDb250ZXh0LCB1bnNpZ25lZCBicmFuY2hPZmZzZXQsIExhYmVsJiBnZW5lcmljUGF0aCkKK3Zv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoRm9y
SW5Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBicmFuY2hPZmZzZXQsIExhYmVsJiBnZW5lcmlj
UGF0aCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmljUGF0aC5pc0JvdW5kKCkpOwogICAg
IFJFTEVBU0VfQVNTRVJUKCFnZW5lcmljUGF0aC5pc0ZvcndhcmQoKSk7Ci0gICAgc3RydWN0dXJl
Q29udGV4dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5s
b2NhdGlvbigpKTsKKyAgICBjb250ZXh0LmFkZEhhc093blByb3BlcnR5SnVtcChicmFuY2hPZmZz
ZXQsIGdlbmVyaWNQYXRoLmxvY2F0aW9uKCkpOwogfQogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9y
OjpoYXNDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVudCkgY29uc3QKQEAgLTI1ODEsMTIg
KzI1ODEsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluQnlWYWwoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBwcm9wZXJ0eQogICAgICAgICBpZiAoY29udGV4dC5s
b2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYg
KCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAgICAgICBicmVhazsK
LQotICAgICAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQmIHN0cnVjdHVyZUNvbnRleHQgPSBjb250
ZXh0LmFzU3RydWN0dXJlRm9ySW5Db250ZXh0KCk7Ci0gICAgICAgIE9wSW5TdHJ1Y3R1cmVQcm9w
ZXJ0eTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHks
IHN0cnVjdHVyZUNvbnRleHQuZW51bWVyYXRvcigpKTsKLSAgICAgICAgc3RydWN0dXJlQ29udGV4
dC5hZGRJbkluc3QobV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCksIHByb3BlcnR5LT5pbmRleCgp
KTsKKyAgICAgICAgT3BFbnVtZXJhdG9ySW5CeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+
KHRoaXMsIGRzdCwgYmFzZSwgY29udGV4dC5tb2RlKCksIHByb3BlcnR5LCBjb250ZXh0LnByb3Bl
cnR5T2Zmc2V0KCksIGNvbnRleHQuZW51bWVyYXRvcigpKTsKKyAgICAgICAgY29udGV4dC5hZGRJ
bkluc3QobV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCksIHByb3BlcnR5LT5pbmRleCgpKTsKICAg
ICAgICAgcmV0dXJuIGRzdDsKICAgICB9CiAKQEAgLTI3MzQsMjQgKzI3MzAsOSBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUgogICAgICAgICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGNvbnRleHQuaXNJbmRleGVk
Rm9ySW5Db250ZXh0KCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGluZGV4ZWRDb250ZXh0ID0gY29u
dGV4dC5hc0luZGV4ZWRGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgICAgIGtpbGwoZHN0KTsKLSAg
ICAgICAgICAgIGlmIChPcEdldEJ5VmFsOjpjaGVja1dpdGhvdXRNZXRhZGF0YUlEPE9wY29kZVNp
emU6Ok5hcnJvdz4odGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAg
T3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFsbGVzdFNpemVSZXF1aXJlbWVudDxPcGNvZGVTaXplOjpO
YXJyb3c+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChPcEdldEJ5VmFsOjpjaGVja1dpdGhvdXRNZXRhZGF0YUlEPE9wY29kZVNp
emU6OldpZGUxNj4odGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAg
T3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFsbGVzdFNpemVSZXF1aXJlbWVudDxPcGNvZGVTaXplOjpX
aWRlMTY+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpX
aWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAg
ICAgICBpbmRleGVkQ29udGV4dC5hZGRHZXRJbnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgp
LCBwcm9wZXJ0eS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gZHN0OwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gV2UgY2Fubm90IGRvIHRoZSBhYm92ZSBvcHRpbWl6YXRpb24gaGVyZSBz
aW5jZSBPcEdldERpcmVjdFBuYW1lID0+IE9wR2V0QnlWYWwgY29udmVyc2lvbiBpbnZvbHZlcyBk
aWZmZXJlbnQgbWV0YWRhdGEgSUQgYWxsb2NhdGlvbi4KLSAgICAgICAgU3RydWN0dXJlRm9ySW5D
b250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29udGV4
dCgpOwotICAgICAgICBPcEdldERpcmVjdFBuYW1lOjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4o
dGhpcywga2lsbChkc3QpLCBiYXNlLCBwcm9wZXJ0eSwgc3RydWN0dXJlQ29udGV4dC5pbmRleCgp
LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1lcmF0b3IoKSk7Ci0KLSAgICAgICAgc3RydWN0dXJlQ29u
dGV4dC5hZGRHZXRJbnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5k
ZXgoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIGJldHRlciBieXRlY29k
ZSByZXdyaXRlciB0aGF0IGNhbiByZXNpemUgY2h1bmtzLgorICAgICAgICBPcEVudW1lcmF0b3JH
ZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
Y29udGV4dC5tb2RlKCksIHByb3BlcnR5LCBjb250ZXh0LnByb3BlcnR5T2Zmc2V0KCksIGNvbnRl
eHQuZW51bWVyYXRvcigpKTsKKyAgICAgICAgY29udGV4dC5hZGRHZXRJbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7
CiAgICAgfQogCkBAIC00NTgyLDYgKzQ1NjMsMTcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2kK
ICAgICByZXR1cm4gZHN0OwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVy
YXRvck5leHQoUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdp
c3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikK
K3sKKyAgICBPcEVudW1lcmF0b3JOZXh0OjplbWl0KHRoaXMsIHByb3BlcnR5TmFtZSwgbW9kZSwg
aW5kZXgsIGJhc2UsIGVudW1lcmF0b3IpOworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwg
UmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpCit7CisgICAgT3BFbnVt
ZXJhdG9ySGFzT3duUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBtb2RlLCBwcm9wZXJ0
eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKTsKKyAgICByZXR1cm4gZHN0OworfQorCiBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpCiB7CiAgICAgT3BHZXRQcm9wZXJ0eUVudW1lcmF0
b3I6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKQEAgLTQ2NDgsMjMgKzQ2NDAsNiBAQCBSZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMpCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQqIGluZGV4UmVnaXN0ZXIpCi17Ci0gICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQgPSBpbnN0cnVj
dGlvbnMoKS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYo
Km5ldyBJbmRleGVkRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIsIGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpw
b3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQotewotICAgIGlm
ICghbG9jYWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRl
Y29kZUVuZE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLSAgICBtX2ZvckluQ29udGV4
dFN0YWNrLmxhc3QoKS0+YXNJbmRleGVkRm9ySW5Db250ZXh0KCkuZmluYWxpemUoKnRoaXMsIG1f
Y29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgIG1fZm9ySW5Db250
ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdExvYWRBcnJvd0Z1bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KGNvbnN0IElkZW50aWZp
ZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rp
b24oKSB8fCBtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpIHx8IGNvbnN0cnVj
dG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RXh0ZW5kcyB8fCBtX2NvZGVUeXBlID09IEV2
YWxDb2RlIHx8IG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNs
YXNzRmllbGRJbml0aWFsaXplck1vZGUpOwpAQCAtNDc2OCwyMCArNDc0MywyMCBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VGhpc1RvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZSgp
CiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoU3RydWN0dXJlRm9ySW5T
Y29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVy
LCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVn
aXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2VWYXJpYWJsZSkKK3ZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJl
Z2lzdGVySUQqIHByb3BlcnR5TmFtZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU9mZnNl
dFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIG1v
ZGVSZWdpc3Rlciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlKQogewogICAg
IGlmICghbG9jYWxSZWdpc3RlcikKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGJvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5D
b250ZXh0U3RhY2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgU3RydWN0dXJlRm9ySW5Db250ZXh0KGxv
Y2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIsIHByb3BlcnR5UmVnaXN0ZXIsIGVudW1lcmF0b3JS
ZWdpc3RlciwgYmFzZVZhcmlhYmxlLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKKyAgICBt
X2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IEZvckluQ29udGV4dChsb2Nh
bFJlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgcHJvcGVydHlPZmZzZXRSZWdpc3Rlciwg
ZW51bWVyYXRvclJlZ2lzdGVyLCBtb2RlUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVj
b2RlU3RhcnRPZmZzZXQpKSk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0cnVj
dHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKK3ZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OnBvcEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKIHsKICAg
ICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib2R5
Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9mb3JJbkNv
bnRleHRTdGFjay5sYXN0KCktPmFzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkuZmluYWxpemUoKnRo
aXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAgIG1fZm9y
SW5Db250ZXh0U3RhY2subGFzdCgpLT5maW5hbGl6ZSgqdGhpcywgbV9jb2RlQmxvY2suZ2V0KCks
IGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CiAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5yZW1vdmVM
YXN0KCk7CiB9CiAKQEAgLTUzODQsMzQgKzUzNTksNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpCiAgICAgZW1pdEp1bXBJZlRydWUo
ZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBtX29wdGlvbmFsQ2hh
aW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0KCkpOwogfQogCi12b2lkIEZvckluQ29udGV4dDo6Zmlu
YWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQotewotICAg
IC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsg
c2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3VycyBpZgotICAgIC8vIGVpdGhlciBvZiB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vICgxKSBUaGUgbG9vcCBpdGVy
YXRpb24gdmFyaWFibGUgaXMgcmUtYXNzaWduZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29w
LgotICAgIC8vICgyKSBUaGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgaXMgY2FwdHVyZWQgaW4g
dGhlIGxleGljYWwgc2NvcGUgb2YgdGhlIGZ1bmN0aW9uLgotICAgIC8vCi0gICAgLy8gVGhlc2Ug
dHdvIHNpdHVhdGlvbnMgb2NjdXIgc3VmZmljaWVudGx5IHJhcmVseSB0aGF0IGl0J3Mgb2theSB0
byB1c2UgdGhpcyBzdHlsZSBvZgotICAgIC8vICJhbmFseXNpcyIgdG8gbWFrZSBpdGVyYXRpb24g
ZmFzdGVyLiBJZiB3ZSBkaWRuJ3Qgd2FudCB0byBkbyB0aGlzLCB3ZSB3b3VsZCBlaXRoZXIgaGF2
ZQotICAgIC8vIHRvIHBlcmZvcm0gc29tZSBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcyB0byBzZWUg
aWYvd2hlbiB0aGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgd2FzCi0gICAgLy8gcmVhc3NpZ25l
ZCwgb3Igd2UnZCBoYXZlIHRvIHJlc29ydCB0byBydW50aW1lIGNoZWNrcyB0byBzZWUgaWYgdGhl
IHZhcmlhYmxlIGhhZCBiZWVuCi0gICAgLy8gcmVhc3NpZ25lZCBmcm9tIGl0cyBvcmlnaW5hbCB2
YWx1ZS4KLQotICAgIGZvciAodW5zaWduZWQgb2Zmc2V0ID0gYm9keUJ5dGVjb2RlU3RhcnRPZmZz
ZXQoKTsgaXNWYWxpZCgpICYmIG9mZnNldCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDspIHsKLSAg
ICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5hdChvZmZz
ZXQpOwotICAgICAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsKLSAgICAg
ICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVj
a3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7Ci0gICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5
dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgY2hlY2twb2ludCwgWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIGlmIChsb2NhbCgp
LT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBpbnZh
bGlkYXRlKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBvZmZzZXQgKz0g
aW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPbGRP
cFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBPbGRPcFR5cGUs
IHR5cGVuYW1lIE5ld09wVHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgogQUxXQVlTX0lOTElORSB2
b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5cGUmIGlu
c3RUdXBsZSkKIHsKICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBzdGQ6OmdldDwwPihpbnN0VHVw
bGUpOwpAQCAtNTQzMSwzNCArNTM3OSw1MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3cml0ZU9w
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFR1cGxlVHlwZSYgaW5zdFR1cGxlKQogICAg
IC8vIDIuIGJhc2Ugc3RheXMgdGhlIHNhbWUuCiAgICAgLy8gMy4gcHJvcGVydHkgZ2V0cyBzd2l0
Y2hlZCB0byB0aGUgb3JpZ2luYWwgcHJvcGVydHkuCiAKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6
aXNfc2FtZTxPbGRPcFR5cGUsIE9wR2V0RGlyZWN0UG5hbWU+Ojp2YWx1ZSkgewotICAgICAgICBz
dGF0aWNfYXNzZXJ0KHNpemVvZihPcEdldEJ5VmFsKSA8PSBzaXplb2YoT3BHZXREaXJlY3RQbmFt
ZSkpOwotICAgICAgICBPcEdldEJ5VmFsOjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4oJmdlbmVy
YXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5UmVnSW5kZXgpKTsKLSAgICB9IGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8
T2xkT3BUeXBlLCBPcEluU3RydWN0dXJlUHJvcGVydHk+Ojp2YWx1ZSkgewotICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihPcEluQnlWYWwpIDw9IHNpemVvZihPcEluU3RydWN0dXJlUHJvcGVy
dHkpKTsKLSAgICAgICAgT3BJbkJ5VmFsOjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4oJmdlbmVy
YXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5UmVnSW5kZXgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihOZXdPcFR5cGUpIDw9IHNpemVv
ZihPbGRPcFR5cGUpKTsKKyAgICBOZXdPcFR5cGU6OmVtaXQoJmdlbmVyYXRvciwgYnl0ZWNvZGUu
bV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVnSW5kZXgp
KTsKIAogICAgIC8vIDQuIG5vcCBvdXQgdGhlIHJlbWFpbmluZyBieXRlcwogICAgIHdoaWxlIChn
ZW5lcmF0b3IubV93cml0ZXIucG9zaXRpb24oKSA8IGVuZCkKICAgICAgICAgT3BOb3A6OmVtaXQ8
T3Bjb2RlU2l6ZTo6TmFycm93PigmZ2VuZXJhdG9yKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9m
ZnNldCkKK3ZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25lZCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCiB7Ci0gICAgQmFzZTo6ZmluYWxpemUoZ2VuZXJhdG9yLCBj
b2RlQmxvY2ssIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0gICAgaWYgKGlzVmFsaWQoKSkKKyAg
ICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFr
IHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKKyAgICAvLyBlaXRoZXIgb2YgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGlzIHRydWU6CisgICAgLy8KKyAgICAvLyAoMSkgVGhlIGxvb3AgaXRl
cmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9v
cC4KKyAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIGNhcHR1cmVkIGlu
IHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KKyAgICAvLworICAgIC8vIFRoZXNl
IHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJlbHkgdGhhdCBpdCdzIG9rYXkg
dG8gdXNlIHRoaXMgc3R5bGUgb2YKKyAgICAvLyAiYW5hbHlzaXMiIHRvIG1ha2UgaXRlcmF0aW9u
IGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywgd2Ugd291bGQgZWl0aGVyIGhh
dmUKKyAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRpdmUgYW5hbHlzaXMgdG8gc2Vl
IGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdhcworICAgIC8vIHJlYXNzaWdu
ZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBjaGVja3MgdG8gc2VlIGlmIHRo
ZSB2YXJpYWJsZSBoYWQgYmVlbgorICAgIC8vIHJlYXNzaWduZWQgZnJvbSBpdHMgb3JpZ2luYWwg
dmFsdWUuCisKKyAgICBib29sIGVzY2FwZWQgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIG9m
ZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7ICFlc2NhcGVkICYmIG9mZnNldCA8IGJv
ZHlCeXRlY29kZUVuZE9mZnNldDspIHsKKyAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGdlbmVy
YXRvci5pbnN0cnVjdGlvbnMoKS5hdChvZmZzZXQpOworICAgICAgICBBU1NFUlQoIWluc3RydWN0
aW9uLT5pczxPcEVudGVyPigpKTsKKyAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQg
PSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7Cisg
ICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbi5wdHIoKSwgY2hlY2twb2ludCwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewor
ICAgICAgICAgICAgICAgIGlmIChsb2NhbCgpLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcGVyYW5k
KQorICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgICAgIG9mZnNldCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgIH0K
KworICAgIGlmICghZXNjYXBlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgT3Bjb2RlSUQgbGFz
dE9wY29kZUlEID0gZ2VuZXJhdG9yLm1fbGFzdE9wY29kZUlEOwogICAgIEluc3RydWN0aW9uU3Ry
ZWFtOjpNdXRhYmxlUmVmIGxhc3RJbnN0cnVjdGlvbiA9IGdlbmVyYXRvci5tX2xhc3RJbnN0cnVj
dGlvbjsKIAogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdFR1cGxlIDogbV9nZXRJbnN0cykKLSAg
ICAgICAgcmV3cml0ZU9wPE9wR2V0RGlyZWN0UG5hbWU+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsK
KyAgICAgICAgcmV3cml0ZU9wPE9wRW51bWVyYXRvckdldEJ5VmFsLCBPcEdldEJ5VmFsPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBsZSA6IG1f
aW5JbnN0cykKLSAgICAgICAgcmV3cml0ZU9wPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oZ2VuZXJh
dG9yLCBpbnN0VHVwbGUpOworICAgICAgICByZXdyaXRlT3A8T3BFbnVtZXJhdG9ySW5CeVZhbCwg
T3BJbkJ5VmFsPihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGhhc093blByb3BlcnR5VHVwbGUgOiBtX2hhc093blByb3BlcnR5SnVtcEluc3RzKSB7CiAgICAg
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wSm1wKSA8PSBzaXplb2YoT3BKbmVxUHRyKSk7CkBA
IC01NDg3LDIyICs1NDUzLDYgQEAgdm9pZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXpl
KEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUIKICAgICB9CiB9CiAK
LXZvaWQgSW5kZXhlZEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQg
Ym9keUJ5dGVjb2RlRW5kT2Zmc2V0KQotewotICAgIEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwg
Y29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgIGlmIChpc1ZhbGlkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaW5zdFBhaXIgOiBtX2dldElu
c3RzKSB7Ci0gICAgICAgIHVuc2lnbmVkIGluc3RJbmRleCA9IGluc3RQYWlyLmZpcnN0OwotICAg
ICAgICBpbnQgcHJvcGVydHlSZWdJbmRleCA9IGluc3RQYWlyLnNlY29uZDsKLSAgICAgICAgZ2Vu
ZXJhdG9yLm1fd3JpdGVyLnJlZihpbnN0SW5kZXgpLT5jYXN0PE9wR2V0QnlWYWw+KCktPnNldFBy
b3BlcnR5KFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSwgW10oKSB7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVn
aXN0ZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCiB2b2lkIFN0YXRpY1Byb3BlcnR5QW5h
bHlzaXM6OnJlY29yZCgpCiB7CiAgICAgYXV0byogaW5zdHJ1Y3Rpb24gPSBtX2luc3RydWN0aW9u
UmVmLnB0cigpOwpAQCAtNTUyOCwxNyArNTQ3OCwxNCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VG9UaGlzKCkKICAgICBPcFRvVGhpczo6ZW1pdCh0aGlzLCBraWxsKCZtX3RoaXNSZWdp
c3RlciksIGVjbWFNb2RlKCkpOwogfQogCi1TdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5
KQorRm9ySW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZEZvckluQ29udGV4dChSZWdp
c3RlcklEKiBwcm9wZXJ0eSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRT
dGFjay5zaXplKCk7IGktLTsgKSB7CiAgICAgICAgIEZvckluQ29udGV4dCYgY29udGV4dCA9IG1f
Zm9ySW5Db250ZXh0U3RhY2tbaV0uZ2V0KCk7CiAgICAgICAgIGlmIChjb250ZXh0LmxvY2FsKCkg
IT0gcHJvcGVydHkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIWNvbnRl
eHQuaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIHJldHVybiAmY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29udGV4dCgpOworICAgICAgICBy
ZXR1cm4gJmNvbnRleHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgK
aW5kZXggMmY1ZmY3MjMyNjQyNmIxMmU0YTAzY2NjN2NmZGI2ODRkYWU1OTkxNC4uZjkyN2U2NjAz
Y2E3Mzk0M2RhNDFmNmVkN2JjYTI5MzI0OGY0OTkxZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNjEsOCAr
NjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTSW1tdXRhYmxlQnV0dGVyZmx5
OwogICAgIGNsYXNzIElkZW50aWZpZXI7Ci0gICAgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dDsK
LSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ7CisgICAgY2xhc3MgRm9ySW5Db250ZXh0
OwogCiAgICAgZW51bSBFeHBlY3RlZEZ1bmN0aW9uIHsKICAgICAgICAgTm9FeHBlY3RlZEZ1bmN0
aW9uLApAQCAtMjU1LDcyICsyNTQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRm9y
SW5Db250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9ySW5Db250ZXh0PiB7CiAgICAgICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb3JJ
bkNvbnRleHQpOwotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Rm9ySW5Db250ZXh0KCkg
PSBkZWZhdWx0OwotCi0gICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNW
YWxpZDsgfQotICAgICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1faXNWYWxpZCA9IGZhbHNlOyB9
Ci0KLSAgICAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgICAgICBJbmRl
eGVkRm9ySW4sCi0gICAgICAgICAgICBTdHJ1Y3R1cmVGb3JJbgotICAgICAgICB9OwotCi0gICAg
ICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBib29sIGlz
SW5kZXhlZEZvckluQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpJbmRl
eGVkRm9ySW47IH0KLSAgICAgICAgYm9vbCBpc1N0cnVjdHVyZUZvckluQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpTdHJ1Y3R1cmVGb3JJbjsgfQotCi0gICAgICAgIElu
ZGV4ZWRGb3JJbkNvbnRleHQmIGFzSW5kZXhlZEZvckluQ29udGV4dCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhlZEZvckluQ29udGV4dCo+KHRoaXMpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0JiBhc1N0cnVjdHVyZUZvcklu
Q29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpc1N0cnVjdHVyZUZvcklu
Q29udGV4dCgpKTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lzdGVySUQq
IGxvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9Ci0KLSAgICBw
cm90ZWN0ZWQ6Ci0gICAgICAgIEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVy
LCBUeXBlIHR5cGUsIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICAg
ICAgOiBtX2xvY2FsUmVnaXN0ZXIobG9jYWxSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV90eXBl
KHR5cGUpCi0gICAgICAgICAgICAsIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoYm9keUJ5dGVj
b2RlU3RhcnRPZmZzZXQpCi0gICAgICAgIHsgfQotCi0gICAgICAgIHVuc2lnbmVkIGJvZHlCeXRl
Y29kZVN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dDsgfQotCi0gICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtl
ZENvZGVCbG9ja0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJlZ2lzdGVy
OwotICAgICAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKLSAgICAgICAgVHlwZSBtX3R5cGU7
Ci0gICAgICAgIHVuc2lnbmVkIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7Ci0gICAgfTsKLQot
ICAgIGNsYXNzIFN0cnVjdHVyZUZvckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQgewot
ICAgICAgICB1c2luZyBCYXNlID0gRm9ySW5Db250ZXh0OwogICAgIHB1YmxpYzoKICAgICAgICAg
dXNpbmcgR2V0SW5zdCA9IHN0ZDo6dHVwbGU8dW5zaWduZWQsIGludD47CiAgICAgICAgIHVzaW5n
IEluSW5zdCA9IEdldEluc3Q7CiAgICAgICAgIHVzaW5nIEhhc093blByb3BlcnR5SnVtcEluc3Qg
PSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCB1bnNpZ25lZD47CiAKLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVn
aXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3JSZWdpc3Rlciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxv
Y2FsUmVnaXN0ZXIsIFR5cGU6OlN0cnVjdHVyZUZvckluLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dCkKLSAgICAgICAgICAgICwgbV9pbmRleFJlZ2lzdGVyKGluZGV4UmVnaXN0ZXIpCi0gICAgICAg
ICAgICAsIG1fcHJvcGVydHlSZWdpc3Rlcihwcm9wZXJ0eVJlZ2lzdGVyKQotICAgICAgICAgICAg
LCBtX2VudW1lcmF0b3JSZWdpc3RlcihlbnVtZXJhdG9yUmVnaXN0ZXIpCi0gICAgICAgICAgICAs
IG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKLSAgICAgICAgewotICAgICAgICB9CisgICAg
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorICAgICAgICB2
b2lkIGludmFsaWRhdGUoKSB7IG1faXNWYWxpZCA9IGZhbHNlOyB9CiAKLSAgICAgICAgUmVnaXN0
ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLSAg
ICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5UmVn
aXN0ZXIuZ2V0KCk7IH0KLSAgICAgICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fZW51bWVyYXRvclJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQq
IGxvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAg
IFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlOYW1l
LmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eU9mZnNldC5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbnVt
ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lbnVtZXJhdG9yLmdldCgpOyB9CisgICAgICAgIFJl
Z2lzdGVySUQqIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGUuZ2V0KCk7IH0KICAgICAgICAg
Y29uc3Qgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4mIGJhc2VWYXJpYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFzZVZhcmlhYmxlOyB9CiAKICAgICAgICAgdm9pZCBhZGRHZXRJbnN0KHVuc2lnbmVk
IGluc3RJbmRleCwgaW50IHByb3BlcnR5UmVnSW5kZXgpCkBAIC0zMzgsMzYgKzI4NCwxNTEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blByb3BlcnR5SnVtcEluc3RzLmFw
cGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5zdEluZGV4LCBnZW5lcmljUGF0
aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvckluQ29udGV4dChSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHBy
b3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBz
dGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVnaXN0ZXIobG9jYWxSZWdpc3Rl
cikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKQorICAgICAgICAg
ICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQorICAgICAgICAgICAgLCBtX2Vu
dW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9tb2RlKG1vZGUpCisgICAgICAg
ICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAgICAgICAgICAgICwgbV9ib2R5
Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKKyAgICAgICAgeyB9
CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAgICAgICAgdm9pZCBmaW5hbGl6
ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWdu
ZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2VudW1l
cmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMgdGhpcyByZWFsbHkgbmVlZCB0
byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3Rl
cjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVydHlOYW1lOworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbW9kZTsK
ICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNlVmFyaWFibGU7Ci0gICAgICAg
IFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBib29sIG1faXNWYWxpZCB7IHRy
dWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldDsKICAgICAg
ICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBWZWN0b3I8R2V0SW5zdD4gbV9n
ZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5SnVtcEluc3Q+IG1faGFzT3du
UHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRl
eHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29u
dGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJ
RCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgdW5zaWduZWQgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJl
Z2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAg
ICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3RlcikKLSAgICAgICAgewotICAg
ICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3QodW5zaWduZWQgaW5zdEluZGV4
LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVuZCh7IGluc3RJbmRleCwgcHJv
cGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwg
aW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OworICAgIC8vIGNsYXNzIEZvckluQ29udGV4dCA6IHB1
YmxpYyBSZWZDb3VudGVkPEZvckluQ29udGV4dD4geworICAgIC8vICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKyAgICAvLyAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0
KTsKKyAgICAvLyBwdWJsaWM6CisgICAgLy8gICAgIHZpcnR1YWwgfkZvckluQ29udGV4dCgpID0g
ZGVmYXVsdDsKKworICAgIC8vICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAvLyAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxz
ZTsgfQorCisgICAgLy8gICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3QgeworICAgIC8vICAg
ICAgICAgSW5kZXhlZEZvckluLAorICAgIC8vICAgICAgICAgU3RydWN0dXJlRm9ySW4KKyAgICAv
LyAgICAgfTsKKworICAgIC8vICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KKyAgICAvLyAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVy
biBtX3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9CisgICAgLy8gICAgIGJvb2wgaXNTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0
dXJlRm9ySW47IH0KKworICAgIC8vICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRG
b3JJbkNvbnRleHQoKQorICAgIC8vICAgICB7CisgICAgLy8gICAgICAgICBBU1NFUlQoaXNJbmRl
eGVkRm9ySW5Db250ZXh0KCkpOworICAgIC8vICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PEluZGV4ZWRGb3JJbkNvbnRleHQqPih0aGlzKTsKKyAgICAvLyAgICAgfQorCisgICAgLy8g
ICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQorICAg
IC8vICAgICB7CisgICAgLy8gICAgICAgICBBU1NFUlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQo
KSk7CisgICAgLy8gICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9y
SW5Db250ZXh0Kj4odGhpcyk7CisgICAgLy8gICAgIH0KKworICAgIC8vICAgICBSZWdpc3RlcklE
KiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rlci5nZXQoKTsgfQorCisgICAg
Ly8gcHJvdGVjdGVkOgorICAgIC8vICAgICBGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKKyAg
ICAvLyAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCisgICAgLy8gICAg
ICAgICAsIG1fdHlwZSh0eXBlKQorICAgIC8vICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgIC8vICAgICB7IH0KKworICAgIC8v
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Ym9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KKworICAgIC8vICAgICB2b2lkIGZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworCisgICAgLy8gcHJpdmF0ZToKKyAgICAvLyAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAvLyAgICAgYm9vbCBtX2lzVmFs
aWQgeyB0cnVlIH07CisgICAgLy8gICAgIFR5cGUgbV90eXBlOworICAgIC8vICAgICB1bnNpZ25l
ZCBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OworICAgIC8vIH07CisKKyAgICAvLyBjbGFzcyBT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKKyAgICAvLyAgICAg
dXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKKyAgICAvLyBwdWJsaWM6CisgICAgLy8gICAgIHVz
aW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBpbnQ+OworICAgIC8vICAgICB1c2lu
ZyBJbkluc3QgPSBHZXRJbnN0OworICAgIC8vICAgICB1c2luZyBIYXNPd25Qcm9wZXJ0eUp1bXBJ
bnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OworCisgICAgLy8gICAgIFN0cnVj
dHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBp
bmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2VWYXJpYWJsZSwg
dW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCisgICAgLy8gICAgICAgICA6IEZvcklu
Q29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9keUJ5dGVjb2Rl
U3RhcnRPZmZzZXQpCisgICAgLy8gICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRleFJlZ2lz
dGVyKQorICAgIC8vICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdpc3Rl
cikKKyAgICAvLyAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQorICAgIC8vICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCisgICAg
Ly8gICAgIHsKKyAgICAvLyAgICAgfQorCisgICAgLy8gICAgIFJlZ2lzdGVySUQqIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9CisgICAgLy8gICAgIFJlZ2lz
dGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgp
OyB9CisgICAgLy8gICAgIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBt
X2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQorICAgIC8vICAgICBjb25zdCBzdGQ6Om9wdGlv
bmFsPFZhcmlhYmxlPiYgYmFzZVZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9iYXNlVmFyaWFi
bGU7IH0KKworICAgIC8vICAgICB2b2lkIGFkZEdldEluc3QodW5zaWduZWQgaW5zdEluZGV4LCBp
bnQgcHJvcGVydHlSZWdJbmRleCkKKyAgICAvLyAgICAgeworICAgIC8vICAgICAgICAgbV9nZXRJ
bnN0cy5hcHBlbmQoR2V0SW5zdCB7IGluc3RJbmRleCwgcHJvcGVydHlSZWdJbmRleCB9KTsKKyAg
ICAvLyAgICAgfQorCisgICAgLy8gICAgIHZvaWQgYWRkSW5JbnN0KHVuc2lnbmVkIGluc3RJbmRl
eCwgaW50IHByb3BlcnR5UmVnSW5kZXgpCisgICAgLy8gICAgIHsKKyAgICAvLyAgICAgICAgIG1f
aW5JbnN0cy5hcHBlbmQoSW5JbnN0IHsgaW5zdEluZGV4LCBwcm9wZXJ0eVJlZ0luZGV4IH0pOwor
ICAgIC8vICAgICB9CisKKyAgICAvLyAgICAgdm9pZCBhZGRIYXNPd25Qcm9wZXJ0eUp1bXAodW5z
aWduZWQgYnJhbmNoSW5zdEluZGV4LCB1bnNpZ25lZCBnZW5lcmljUGF0aFRhcmdldCkKKyAgICAv
LyAgICAgeworICAgIC8vICAgICAgICAgbV9oYXNPd25Qcm9wZXJ0eUp1bXBJbnN0cy5hcHBlbmQo
SGFzT3duUHJvcGVydHlKdW1wSW5zdCB7IGJyYW5jaEluc3RJbmRleCwgZ2VuZXJpY1BhdGhUYXJn
ZXQgfSk7CisgICAgLy8gICAgIH0KKworICAgIC8vICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOworCisgICAgLy8gcHJpdmF0ZToKKyAgICAvLyAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKKyAgICAvLyAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IG1fcHJvcGVydHlSZWdpc3RlcjsKKyAgICAvLyAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51
bWVyYXRvclJlZ2lzdGVyOworICAgIC8vICAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBtX2Jh
c2VWYXJpYWJsZTsKKyAgICAvLyAgICAgVmVjdG9yPEdldEluc3Q+IG1fZ2V0SW5zdHM7CisgICAg
Ly8gICAgIFZlY3RvcjxJbkluc3Q+IG1faW5JbnN0czsKKyAgICAvLyAgICAgVmVjdG9yPEhhc093
blByb3BlcnR5SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CisgICAgLy8gfTsK
KworICAgIC8vIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0
IHsKKyAgICAvLyAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKKyAgICAvLyBwdWJsaWM6
CisgICAgLy8gICAgIEluZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQpCisgICAgLy8gICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBl
OjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgIC8vICAgICAgICAg
LCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3RlcikKKyAgICAvLyAgICAgeworICAgIC8vICAg
ICB9CisKKyAgICAvLyAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KKworICAgIC8vICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOworICAgIC8vICAgICB2b2lkIGFkZEdldEluc3QodW5zaWduZWQgaW5z
dEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVuZCh7IGluc3RJbmRl
eCwgcHJvcGVydHlJbmRleCB9KTsgfQorCisgICAgLy8gcHJpdmF0ZToKKyAgICAvLyAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKKyAgICAvLyAgICAgVmVjdG9yPHN0ZDo6
cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKKyAgICAvLyB9OwogCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKQEAgLTM5OSwxMSArNDYwLDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29k
ZUdlbmVyYXRvcik7CiAKICAgICAgICAgZnJpZW5kIGNsYXNzIEZpbmFsbHlDb250ZXh0OwotICAg
ICAgICBmcmllbmQgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIFN0cnVjdHVyZUZvckluQ29udGV4dDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEZvckluQ29u
dGV4dDsKICAgICAgICAgZnJpZW5kIGNsYXNzIFN0cmljdE1vZGVTY29wZTsKIAotICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+CisgICAgICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBPbGRPcFR5cGUsIHR5cGVuYW1lIE5ld09wVHlwZSwgdHlwZW5h
bWUgVHVwbGVUeXBlPgogICAgICAgICBmcmllbmQgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5l
cmF0b3ImLCBUdXBsZVR5cGUmKTsKIAogICAgIHB1YmxpYzoKQEAgLTY4MSw3ICs3NDEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGhvaXN0U2xvcHB5TW9kZUZ1bmN0aW9uSWZO
ZWNlc3NhcnkoY29uc3QgSWRlbnRpZmllciYgZnVuY3Rpb25OYW1lKTsKIAotICAgICAgICBTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQqIGZpbmRTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCog
cHJvcGVydHkpOworICAgICAgICBGb3JJbkNvbnRleHQqIGZpbmRGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogcHJvcGVydHkpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBlbWl0VHlwZVBy
b2ZpbGVyRXhwcmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBlbmREaXZvdCk7CkBAIC05MTcsNyArOTc3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChSZWdpc3Rl
cklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcElmTm90RnVu
Y3Rpb25BcHBseShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdW5z
aWduZWQgZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lzdGVySUQq
IGNvbmQsIExhYmVsJiB0YXJnZXQpOwotICAgICAgICB2b2lkIHJlY29yZEhhc093blN0cnVjdHVy
ZVByb3BlcnR5SW5Gb3JJbkxvb3AoU3RydWN0dXJlRm9ySW5Db250ZXh0JiwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpOworICAgICAgICB2b2lkIHJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3AoRm9ySW5Db250ZXh0JiwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0
LCBMYWJlbCYgZ2VuZXJpY1BhdGgpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbk9w
LCB0eXBlbmFtZSBKbXBPcD4KICAgICAgICAgYm9vbCBmdXNlQ29tcGFyZUFuZEp1bXAoUmVnaXN0
ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCwgYm9vbCBzd2FwT3BlcmFuZHMgPSBmYWxzZSk7CkBA
IC05MzQsNiArOTk0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEVudW1l
cmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKyAgICAgICAg
dm9pZCBlbWl0RW51bWVyYXRvck5leHQoUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3Rl
cklEKiBtb2RlLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogZW51bWVyYXRvcik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBt
b2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFN0cnVjdHVyZVBy
b3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIGxlbmd0aCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRHZW5lcmljUHJvcGVy
dHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogbGVuZ3RoLCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdEVudW1lcmF0b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CkBAIC05NTcs
NyArMTAxOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXND
YWxsYWJsZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRJc0NvbnN0cnVjdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3Jj
KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzTnVtYmVyKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzTnVsbChSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdEVxdWFsaXR5T3A8T3BTdHJpY3Rl
cT4oZHN0LCBzcmMsIGVtaXRMb2FkKG51bGxwdHIsIGpzTnVsbCgpKSk7IH0KKyAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdElzTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyBy
ZXR1cm4gZW1pdFVuYXJ5T3A8T3BFcU51bGw+KGRzdCwgc3JjKTsgfQogICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SXNVbmRlZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsg
cmV0dXJuIGVtaXRFcXVhbGl0eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxs
cHRyLCBqc1VuZGVmaW5lZCgpKSk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZp
bmVkT3JOdWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVn
aXN0ZXJJRCogZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwpA
QCAtMTA1NywxMCArMTExOSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwb3BP
cHRpb25hbENoYWluVGFyZ2V0KFJlZ2lzdGVySUQqIGRzdCwgYm9vbCBpc0RlbGV0ZSk7CiAgICAg
ICAgIHZvaWQgZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKTsKIAotICAgICAgICB2
b2lkIHB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJRCog
aW5kZXgpOwotICAgICAgICB2b2lkIHBvcEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsKTsKLSAgICAgICAgdm9pZCBwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbCwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3BlcnR5LCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlKTsKLSAgICAgICAgdm9p
ZCBwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKKyAgICAgICAgLy8g
dm9pZCBwdXNoSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQq
IGluZGV4KTsKKyAgICAgICAgLy8gdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbCk7CisgICAgICAgIC8vIHZvaWQgcHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0
ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVn
aXN0ZXJJRCogZW51bWVyYXRvciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZSk7CisgICAg
ICAgIC8vIHZvaWQgcG9wU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7CisK
KyAgICAgICAgdm9pZCBwdXNoRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU9mZnNldCwgUmVnaXN0ZXJJRCog
ZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogbW9kZSwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFz
ZSk7CisgICAgICAgIHZvaWQgcG9wRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7CiAKICAg
ICAgICAgTGFiZWxTY29wZSogYnJlYWtUYXJnZXQoY29uc3QgSWRlbnRpZmllciYpOwogICAgICAg
ICBMYWJlbFNjb3BlKiBjb250aW51ZVRhcmdldChjb25zdCBJZGVudGlmaWVyJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKaW5k
ZXggOWFjYTUxNGU2NTUzYmFhZTQ0ODNhZTQ0Y2FiNWVkYzk2NjFjNGZmNy4uYzI2YzU0OTFhN2Jk
NmNjMzZlY2Q2ZTI2MGI0YmY1NzMxY2JkM2Y2NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApAQCAtMjEzMSwyNCArMjEzMSwy
NCBAQCBSZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZwogICAgIFJFTEVBU0VfQVNTRVJUKG1fYXJncy0+
bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhwciAmJiAhbV9hcmdzLT5tX2xp
c3ROb2RlLT5tX25leHQpOyAgCiAgICAgRXhwcmVzc2lvbk5vZGUqIGFyZ3VtZW50ID0gbV9hcmdz
LT5tX2xpc3ROb2RlLT5tX2V4cHI7CiAgICAgUkVMRUFTRV9BU1NFUlQoYXJndW1lbnQtPmlzUmVz
b2x2ZU5vZGUoKSk7Ci0gICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBzdHJ1Y3R1cmVDb250ZXh0
ID0gbnVsbHB0cjsKKyAgICBGb3JJbkNvbnRleHQqIGNvbnRleHQgPSBudWxscHRyOwogICAgIFZh
cmlhYmxlIGFyZ3VtZW50VmFyaWFibGUgPSBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8
UmVzb2x2ZU5vZGUqPihhcmd1bWVudCktPmlkZW50aWZpZXIoKSk7CiAgICAgaWYgKGFyZ3VtZW50
VmFyaWFibGUuaXNMb2NhbCgpKSB7CiAgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5ID0gYXJn
dW1lbnRWYXJpYWJsZS5sb2NhbCgpOwotICAgICAgICBzdHJ1Y3R1cmVDb250ZXh0ID0gZ2VuZXJh
dG9yLmZpbmRTdHJ1Y3R1cmVGb3JJbkNvbnRleHQocHJvcGVydHkpOworICAgICAgICBjb250ZXh0
ID0gZ2VuZXJhdG9yLmZpbmRGb3JJbkNvbnRleHQocHJvcGVydHkpOwogICAgIH0KIAogICAgIGF1
dG8gY2FuVXNlRmFzdEhhc093blByb3BlcnR5ID0gWyZdIHsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmVDb250ZXh0KQorICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkpCisgICAg
ICAgIGlmICghY29udGV4dC0+YmFzZVZhcmlhYmxlKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzUmVzb2x2ZU5vZGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2Up
LT5pZGVudGlmaWVyKCkpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVl
KCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKHN0YXRpY19jYXN0PFJl
c29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKSA9PSBjb250ZXh0LT5iYXNlVmFyaWFi
bGUoKS52YWx1ZSgpOwogICAgICAgICBpZiAobV9iYXNlLT5pc1RoaXNOb2RlKCkpIHsKICAgICAg
ICAgICAgIC8vIEFmdGVyIGdlbmVyYXRvci5lbnN1cmVUaGlzICh3aGljaCBtdXN0IGJlIGludm9r
ZWQgaW4gfGJhc2V8J3MgbWF0ZXJpYWxpemF0aW9uKSwgd2UgY2FuIGVuc3VyZSB0aGF0IHx0aGlz
fCBpcyBpbiBsb2NhbCB0aGlzLXJlZ2lzdGVyLgogICAgICAgICAgICAgQVNTRVJUKGJhc2UpOwot
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlO
YW1lcygpLmJ1aWx0aW5OYW1lcygpLnRoaXNQcml2YXRlTmFtZSgpLCBUaGlzUmVzb2x1dGlvblR5
cGU6OkxvY2FsKSA9PSBzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKS52YWx1ZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlO
YW1lcygpLmJ1aWx0aW5OYW1lcygpLnRoaXNQcml2YXRlTmFtZSgpLCBUaGlzUmVzb2x1dGlvblR5
cGU6OkxvY2FsKSA9PSBjb250ZXh0LT5iYXNlVmFyaWFibGUoKS52YWx1ZSgpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9OwpAQCAtMjE2MCw3ICsyMTYwLDcgQEAgUmVn
aXN0ZXJJRCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW5lcmF0b3ImIGcKICAgICAgICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKIAogICAgICAgICB1bnNpZ25lZCBicmFuY2hJbnNuT2Zmc2V0ID0gZ2VuZXJh
dG9yLmVtaXRXaWRlSnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShmdW5jdGlvbi5nZXQo
KSwgcmVhbENhbGwuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc093blN0cnVjdHVy
ZVByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBiYXNlLmdldCgpLCBnZW5lcmF0b3IuZW1pdE5v
ZGUoYXJndW1lbnQpLCBzdHJ1Y3R1cmVDb250ZXh0LT5lbnVtZXJhdG9yKCkpOworICAgICAgICBn
ZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShyZXR1cm5WYWx1ZS5nZXQoKSwg
YmFzZS5nZXQoKSwgY29udGV4dC0+bW9kZSgpLCBnZW5lcmF0b3IuZW1pdE5vZGUoYXJndW1lbnQp
LCBjb250ZXh0LT5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LT5lbnVtZXJhdG9yKCkpOwogICAg
ICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHJlYWxDYWxsLmdldCgpKTsKQEAgLTIxNzIsNyArMjE3Miw3IEBAIFJlZ2lzdGVy
SUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnCiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkp
OwogCi0gICAgICAgIGdlbmVyYXRvci5yZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9y
SW5Mb29wKCpzdHJ1Y3R1cmVDb250ZXh0LCBicmFuY2hJbnNuT2Zmc2V0LCByZWFsQ2FsbCk7Cisg
ICAgICAgIGdlbmVyYXRvci5yZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKCpjb250ZXh0
LCBicmFuY2hJbnNuT2Zmc2V0LCByZWFsQ2FsbCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2Vu
ZXJhdG9yLm1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7CkBA
IC00MTg0LDggKzQxODQsNiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICBpZiAoZ2VuZXJhdG9y
LnNob3VsZEJlQ29uY2VybmVkV2l0aENvbXBsZXRpb25WYWx1ZSgpICYmIG1fc3RhdGVtZW50LT5o
YXNFYXJseUJyZWFrT3JDb250aW51ZSgpKQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoZHN0
LCBqc1VuZGVmaW5lZCgpKTsKIAotICAgIFJlZjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xh
YmVsKCk7Ci0KICAgICBSZWdpc3RlcklEKiBmb3JMb29wU3ltYm9sVGFibGUgPSBudWxscHRyOwog
ICAgIGdlbmVyYXRvci5wdXNoTGV4aWNhbFNjb3BlKHRoaXMsIEJ5dGVjb2RlR2VuZXJhdG9yOjpT
Y29wZVR5cGU6OkxldENvbnN0U2NvcGUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpURFpDaGVja09wdGlt
aXphdGlvbjo6T3B0aW1pemUsIEJ5dGVjb2RlR2VuZXJhdG9yOjpOZXN0ZWRTY29wZVR5cGU6Oklz
TmVzdGVkLCAmZm9yTG9vcFN5bWJvbFRhYmxlKTsKIApAQCAtNDE5MywxMiArNDE5MSwxMCBAQCB2
b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3Is
IFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGdlbmVyYXRvci5p
Z25vcmVkUmVzdWx0KCksIG1fbGV4cHIpOwogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2Ug
PSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxlbmd0
aDsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZW51bWVyYXRvcjsKIAogICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShiYXNlLmdldCgpLCBtX2V4cHIpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsb2Nh
bCA9IHRoaXMtPnRyeUdldEJvdW5kTG9jYWwoZ2VuZXJhdG9yKTsKLSAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gZW51bWVyYXRvckluZGV4OworCiAKICAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBi
YXNlVmFyaWFibGU7CiAgICAgaWYgKG1fZXhwci0+aXNSZXNvbHZlTm9kZSgpKQpAQCAtNDIwOSwx
MzcgKzQyMDUsNDYgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAgICAgIGJhc2VWYXJpYWJsZSA9
IGdlbmVyYXRvci52YXJpYWJsZShnZW5lcmF0b3IucHJvcGVydHlOYW1lcygpLmJ1aWx0aW5OYW1l
cygpLnRoaXNQcml2YXRlTmFtZSgpLCBUaGlzUmVzb2x1dGlvblR5cGU6OkxvY2FsKTsKICAgICB9
CiAKLSAgICAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZv
ci4uaW4gaXRlcmF0aW9uLgotICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOwot
CiAgICAgaW50IHByb2ZpbGVyU3RhcnRPZmZzZXQgPSBtX3N0YXRlbWVudC0+c3RhcnRPZmZzZXQo
KTsKICAgICBpbnQgcHJvZmlsZXJFbmRPZmZzZXQgPSBtX3N0YXRlbWVudC0+ZW5kT2Zmc2V0KCkg
KyAobV9zdGF0ZW1lbnQtPmlzQmxvY2soKSA/IDEgOiAwKTsKIAotICAgIGVudW1lcmF0b3IgPSBn
ZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCksIGJhc2UuZ2V0KCkpOwotCi0gICAgQnl0ZWNvZGVHZW5lcmF0b3I6OlByZXNlcnZlZFREWlN0
YWNrIHByZXNlcnZlZFREWlN0YWNrOwotICAgIGdlbmVyYXRvci5wcmVzZXJ2ZVREWlN0YWNrKHBy
ZXNlcnZlZFREWlN0YWNrKTsKLQotICAgIC8vIEluZGV4ZWQgcHJvcGVydHkgbG9vcC4KICAgICB7
Ci0gICAgICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3Bl
KExhYmVsU2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVy
YXRvci5uZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3Iu
bmV3TGFiZWwoKTsKLQotICAgICAgICBsZW5ndGggPSBnZW5lcmF0b3IuZW1pdEdldEVudW1lcmFi
bGVMZW5ndGgoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBlbnVtZXJhdG9yLmdldCgpKTsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGkgPSBnZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBlbnVtZXJhdG9yID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gbW9kZSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVuc2lnbmVkPihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluaXRNb2RlKSkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaW5kZXggPSBn
ZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7
CiAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0
KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7Ci0KLSAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0QmluYXJ5T3A8T3BMZXNzPihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGkuZ2V0KCksIGxlbmd0aC5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KHJlc3VsdC5n
ZXQoKSwgYmFzZS5nZXQoKSwgaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
RmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0VG9JbmRleFN0cmluZyhwcm9wZXJ0eU5hbWUuZ2V0KCksIGkuZ2V0KCkp
OwotICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5n
ZXQoKSk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmls
ZXJTdGFydE9mZnNldCk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLnB1c2hJbmRleGVkRm9ySW5TY29w
ZShsb2NhbC5nZXQoKSwgaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3Qs
IG1fc3RhdGVtZW50KTsKLSAgICAgICAgZ2VuZXJhdG9yLnBvcEluZGV4ZWRGb3JJblNjb3BlKGxv
Y2FsLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhw
cm9maWxlckVuZE9mZnNldCk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IucHJlcGFyZUxleGljYWxTY29w
ZUZvck5leHRGb3JMb29wSXRlcmF0aW9uKHRoaXMsIGZvckxvb3BTeW1ib2xUYWJsZSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0SW5jKGkuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdERl
YnVnSG9vayhtX2xleHByKTsgLy8gUGF1c2UgYXQgdGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBm
b3IgZWFjaCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGxv
b3BTdGFydC5nZXQoKSk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJl
YWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOwotICAgIH0KLSAgICBnZW5l
cmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFREWlN0YWNrKTsKLQotICAgIC8vIFN0cnVj
dHVyZSBwcm9wZXJ0eSBsb29wLgotICAgIHsKICAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3Bl
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJl
ZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxM
YWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCi0gICAgICAgIGVudW1lcmF0
b3JJbmRleCA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpz
TnVtYmVyKDApKTsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9y
U3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQo
KSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KGxvb3BTdGFydC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQot
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRJc051bGwo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkocmVzdWx0
LmdldCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCkp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgKnNjb3Bl
LT5jb250aW51ZVRhcmdldCgpKTsKLQotICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5l
cmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlQ29udHJvbEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7Ci0KLSAgICAgICAgZ2VuZXJhdG9y
LnB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0
KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgYmFzZVZhcmlhYmxlKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwotICAgICAgICBn
ZW5lcmF0b3IucG9wU3RydWN0dXJlRm9ySW5TY29wZShsb2NhbC5nZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAg
ICAgICBlbnVtZXJhdG9yID0gZ2VuZXJhdG9yLmVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLm1v
dmVMaW5rVGltZUNvbnN0YW50KHByb3BlcnR5TmFtZS5nZXQoKSwgTGlua1RpbWVDb25zdGFudDo6
ZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFcXVh
bGl0eU9wPE9wU3RyaWN0ZXE+KHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwg
cHJvcGVydHlOYW1lLmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHBy
b3BlcnR5TmFtZS5nZXQoKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogCiAgICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKKyAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMb29wSGludCgpOwogICAgICAgICBnZW5lcmF0b3IucHJlcGFyZUxleGljYWxTY29w
ZUZvck5leHRGb3JMb29wSXRlcmF0aW9uKHRoaXMsIGZvckxvb3BTeW1ib2xUYWJsZSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0SW5jKGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoZW5kLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5k
LmdldCgpKTsKLSAgICB9Ci0gICAgZ2VuZXJhdG9yLnJlc3RvcmVURFpTdGFjayhwcmVzZXJ2ZWRU
RFpTdGFjayk7Ci0KLSAgICAvLyBHZW5lcmljIHByb3BlcnR5IGxvb3AuCi0gICAgewotICAgICAg
ICBSZWY8TGFiZWxTY29wZT4gc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNj
b3BlOjpMb29wKTsKLSAgICAgICAgUmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKLSAgICAgICAgUmVmPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVs
KCk7Ci0KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JHZW5l
cmljUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51
bWVyYXRvckluZGV4LmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BT
dGFydC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRJc051bGwoZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXBJZlRydWUocmVzdWx0LmdldCgpLCBsb29wRW5kLmdldCgpKTsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgd2F5IHRvIHNlZSBpZiBhbnlvbmUgaXMgYWN0dWFs
bHkgdXNpbmcgdGhlIHByb3BlcnR5TmFtZSBmb3Igc29tZXRoaW5nIG90aGVyIHRoYW4gYSBnZXRf
YnlfdmFsLiBJZiBub3QsIHdlIGNvdWxkIGVsaW1pbmF0ZSB0aGUgdG9TdHJpbmcgaW4gdGhpcyBv
cGNvZGUuCisgICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvck5leHQocHJvcGVydHlOYW1l
LmdldCgpLCBtb2RlLmdldCgpLCBpbmRleC5nZXQoKSwgYmFzZS5nZXQoKSwgZW51bWVyYXRvci5n
ZXQoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkocmVz
dWx0LmdldCgpLCBiYXNlLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgKnNjb3BlLT5jb250aW51ZVRhcmdl
dCgpKTsKKyAgICAgICAgLy8gTm90ZSwgY2hvb3NpbmcgdW5kZWZpbmVkIG9yIG51bGwgaGVscHMg
cGxlYXNlIERGRydzIEFic3RyYWN0IEludGVycHJldGVyIGFzIGl0IGRvZXNuJ3QgZGlzdGluZ3Vp
c2ggbnVsbCBhbmQgdW5kZWZpbmVkIGFzIHR5cGVzICh2aWEgU3BlY090aGVyKS4KKyAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKGdlbmVyYXRvci5lbWl0SXNVbmRlZmluZWRPck51bGwo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpLCBzY29wZS0+YnJl
YWtUYXJnZXQoKSk7CiAKICAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRy
b2xGbG93KHByb2ZpbGVyU3RhcnRPZmZzZXQpOwogCisgICAgICAgIGdlbmVyYXRvci5wdXNoRm9y
SW5TY29wZShsb2NhbC5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBpbmRleC5nZXQoKSwgZW51
bWVyYXRvci5nZXQoKSwgbW9kZS5nZXQoKSwgYmFzZVZhcmlhYmxlKTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOworICAgICAgICBnZW5lcmF0b3IucG9wRm9y
SW5TY29wZShsb2NhbC5nZXQoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IucHJlcGFyZUxleGljYWxT
Y29wZUZvck5leHRGb3JMb29wSXRlcmF0aW9uKHRoaXMsIGZvckxvb3BTeW1ib2xUYWJsZSk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0SW5jKGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1l
LmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhtX2xleHByKTsgLy8gUGF1c2UgYXQgdGhlIGFzc2ln
bm1lbnQgZXhwcmVzc2lvbiBmb3IgZWFjaCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyRW5kT2Zmc2V0KTsKKyAgICAgICAgZ2VuZXJhdG9y
LmVtaXRKdW1wKCpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0
KCkpOwogICAgIH0KIAotICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKICAgICBn
ZW5lcmF0b3IucG9wTGV4aWNhbFNjb3BlKHRoaXMpOwogICAgIGdlbmVyYXRvci5lbWl0UHJvZmls
ZUNvbnRyb2xGbG93KHByb2ZpbGVyRW5kT2Zmc2V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRl
eCA0YjVmMGQ2MjAwOWVlNjkwYmRkZjQzMzAxMDIyOGFkMGE0YWU0Njc1Li4wNjQwYzJhMDU4NmJl
YmYxZWFlMDFmOTFhMDg4YzZhZGQzMzc4ZTI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0yMTUx
LDcgKzIxNTEsMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNlIFN0cmluZ0No
YXJBdDoKICAgICAgICAgc2V0Rm9yTm9kZShub2RlLCBtX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSk7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKKyAgICBjYXNlIEVudW1lcmF0b3JH
ZXRCeVZhbDogeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgYWJsZSB0byB1c2Ug
dGhlIGNvZGUgYmVsb3cgdG8gZGV0ZXJtaW5lIHRoZSBlZmZlY3RzIG9mIHRoZSBub2RlIHdoZW4g
cHJvcGVydHlOYW1lID09IGluZGV4LgorICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAg
bWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBj
YXNlIEdldEJ5VmFsOgogICAgIGNhc2UgQXRvbWljc0FkZDoKICAgICBjYXNlIEF0b21pY3NBbmQ6
CkBAIC0yMTYyLDEyICsyMTY5LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICBjYXNl
IEF0b21pY3NTdG9yZToKICAgICBjYXNlIEF0b21pY3NTdWI6CiAgICAgY2FzZSBBdG9taWNzWG9y
OiB7CisgICAgICAgIC8vIFdlIGNvdWxkIGRvIHRoaXMgZm9yIEVudW1lcmF0b3JHZXRCeVZhbCBi
dXQgaXQncyB1bmxpa2VseSB0byBiZSB1c2VmdWwgaW4gcHJhY3RpY2UuCiAgICAgICAgIGlmIChu
b2RlLT5vcCgpID09IEdldEJ5VmFsKSB7CiAgICAgICAgICAgICBhdXRvIGZvbGRHZXRCeVZhbE9u
Q29uc3RhbnRQcm9wZXJ0eSA9IFsmXSAoRWRnZSYgYXJyYXlFZGdlLCBFZGdlJiBpbmRleEVkZ2Up
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGV4cGFuZCB0aGlzIGZvciBub24g
eDg2IGVudmlyb25tZW50cy4KLSAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjQxCi0gICAgICAgICAgICAgICAgaWYgKCFpc1g4Nigp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiBhcnJheVZhbHVlID0gZm9yTm9kZShhcnJheUVkZ2UpOwogCkBAIC00MzA0
LDYgKzQzMDgsNDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAg
ICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIGlm
IChhcnJheU1vZGUuaXNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5lbnVt
ZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgfHwgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOwor
CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFj
dE1vZGU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJhdG9yTWV0YWRhdGEo
KSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLT5jaGlsZDEo
KS5ub2RlKCksIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCBqc051bWJlcihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICB9CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBz
ZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25seSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsK
KyAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNwZWNPdGhlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAg
Y2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNh
biBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVmaW5pdGVseSBleGlzdHMgYmFzZWQgb24g
YWJzdHJhY3QKKyAgICAgICAgLy8gdmFsdWUgaW5mb3JtYXRpb24uCisgICAgICAgIGNsb2JiZXJX
b3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4p
OworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAg
ICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCmluZGV4IDExMTFmODlmOWQ3YjViOTc3NzhjMTZj
OGQ1NDY0MGJlYTM3NDQyYjIuLmEwMjZhYWQxODkzYmYyM2M1NzE5NmZjYzZjOTFmYzIwMDAzYzQ1
NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaApAQCAtMjg5LDYg
KzI4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFycmF5
OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICB9CiAKKyAgICBib29sIGlzU2FuZUNoYWluKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0luQm91bmRzU2FuZUNoYWluKCkgfHwgaXNP
dXRPZkJvdW5kc1NhbmVDaGFpbigpOworICAgIH0KKwogICAgIGJvb2wgaXNPdXRPZkJvdW5kcygp
IGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0
T2ZCb3VuZHMgfHwgc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBkYjM3ZjRkZGRiZjgwY2Q2NmViNTc4N2Q3YmFhMmJm
NTNhZjg5MDc2Li45ZGJkMGI0N2Q5ZGZmNGNmNjAzOGFmNTAwMTc5MzQ4YmUwYWVhMjk0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAKQEAgLTM5MCw3ICszOTAsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2RlTmVlZHNO
ZWdaZXJvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwor
ICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDog
ewogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VGbGFncyhO
b2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5vZGVCeXRl
Y29kZVVzZXNBc090aGVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVjb2RlVXNl
c0FzQXJyYXlJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCmluZGV4IGEyOTZjNGI4N2M4NTg4NjRmYmRlZGQ3NGVmNzI3ZTU0ZDk1ZmQ2
OTQuLmRlYWM0OGM0ZmViOWJhYjA5YjU3NmMyZTU4NWZkMTZhYmU1OGE5YTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC04NDg2LDYg
Kzg0ODYsMTMxIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOwogICAgICAg
ICB9CiAKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6IHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7
CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
ayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNl
ID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChi
eXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKTsKKyAgICAgICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNv
ZGUubV9tb2RlKTsKKworICAgICAgICAgICAgaWYgKCFtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRh
ZGF0YSkKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CisKKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
aW5kZXgpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51
bGxwdHIpOyAvLyBzdG9yYWdlIGZvciBJbmRleGVkTW9kZSBvbmx5LgorICAgICAgICAgICAgTm9k
ZSogdXBkYXRlZEluZGV4QW5kTW9kZSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJh
dG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9w
SW5mbyhtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworCisgICAgICAgICAgICBOb2Rl
KiB1cGRhdGVkTW9kZSA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSwgdXBk
YXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9tb2RlLCB1cGRh
dGVkTW9kZSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRJbmRleCA9IGFkZFRvR3JhcGgo
RW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIHVwZGF0ZWRJbmRleEFuZE1vZGUpOworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1faW5kZXgsIHVwZGF0ZWRJbmRleCk7CisKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSwgYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dFVw
ZGF0ZVByb3BlcnR5TmFtZSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9kZSwgZW51bWVyYXRvcikp
OworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX25leHQpOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6IHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
dEJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5
TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQo
KTsKKworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAg
ICAgICAgICAgTm9kZSogcHJvcGVydHlOYW1lID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAg
ICAgICAgICAgTm9kZSogbW9kZSA9IGdldChieXRlY29kZS5tX21vZGUpOworICAgICAgICAgICAg
Tm9kZSogZW51bWVyYXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOworCisgICAgICAg
ICAgICB1aW50OF90IHNlZW5Nb2RlcyA9IG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhOwor
ICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
b3JjZU9TUkV4aXQpOworCisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzID09IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYWRN
b2RlID0gYWRkVG9HcmFwaChBcml0aEJpdEFuZCwgbW9kZSwganNDb25zdGFudChqc051bWJlcihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBB
cml0aEJpdEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNvIGl0J3Mgb2sgdG8gZXhpdCBoZXJlLgor
ICAgICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKEV4aXRPSyk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFu
dCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzTnVtYmVyKDApKSksIGJhZE1vZGUpOwor
CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNlIHRoZSBub3Jt
YWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAg
ICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlv
bikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGVudW1lcmF0b3IpOworICAg
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVja2luZyBmb3IgYSBCYWRDb25z
dGFudFZhbHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNlIHRoZSBHZW5lcmljIHZhcmlhbnQgaWYg
d2Ugc3dpdGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJbmRleGVkTW9kZSArIE5hbWVkTW9kZSBl
dmVuIHRob3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAgICAgICAgICBpZiAoIShzZWVuTW9k
ZXMgJiAoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoKSkKKyAgICAg
ICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkKKyAgICAgICAgICAgICAgICAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgQmFkQ2FjaGUpKSB7CisgICAgICAgICAgICAgICAgTm9kZSogbW9kZVRlc3QgPSBhZGRUb0dy
YXBoKFNhbWVWYWx1ZSwgbW9kZSwganNDb25zdGFudChqc051bWJlcihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkdlbmVyaWNNb2RlKSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hl
Y2tJc0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmcoanNCb29sZWFuKGZhbHNl
KSkpLCBtb2RlVGVzdCk7CisKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsK
KyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7IC8vIFVzZSBpbmRleCBzbyB3
ZSdsbCB1c2UgdGhlIG5vcm1hbCBpbmRleGVkIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1h
dGNoIEdldEJ5VmFsLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAg
ICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChtb2RlKTsKKyAgICAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9yR2V0QnlWYWwsIE9wSW5mbyhh
cnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7
IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNoIEdldEJ5VmFsLgorICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgIHNl
dChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JHZXRC
eVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsK
KworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9pbl9ieV92YWw6IHsKKyAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckluQnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJy
YXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CisKKyAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2Jhc2UpKTsKKyAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkpOworICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKGdldChieXRlY29kZS5tX21vZGUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKTsKKyAgICAgICAgICAgIHNldChieXRlY29k
ZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JJbkJ5VmFsLCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFk
YXRhKSkpOworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2luX2J5X3Zh
bCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eTogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJh
eTo6UmVhZCk7CisKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2Jh
c2UpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX3Byb3BlcnR5
TmFtZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1faW5kZXgp
KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX21vZGUpKTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5m
byhtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKKworICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOiB7CiAgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEludGVybmFsRmllbGQ+KCk7CiAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0SW50ZXJuYWxGaWVsZCwg
T3BJbmZvKGJ5dGVjb2RlLm1faW5kZXgpLCBPcEluZm8oZ2V0UHJlZGljdGlvbigpKSwgZ2V0KGJ5
dGVjb2RlLm1fYmFzZSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5j
cHAKaW5kZXggY2MwZDAxNGRhMjkzMWZmM2VjZGNlOTQyOWNjMjYyNTYxZTJmN2Y3Ni4uMDZkMTlk
MTczOTczMDNmNzQxYmU2YjAyYmYwMTA1N2Y3MjI1NjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgZGF0YUxvZygiICAgRm91bmQgbXVzdC1oYW5kbGUgYmxvY2s6ICIsICpibG9jaywg
IlxuIik7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIG1lcmdlcyBzbmFwc2hvdCBvZiBzdGFj
ayB2YWx1ZXMgd2hpbGUgQ0ZBIHBoYXNlIHdhbnQgdG8gaGF2ZSBwcm92ZW4gdHlwZXMgYW5kIHZh
bHVlcy4gVGhpcyBpcyBzb21ld2hhdCB0cmlja3kuCi0gICAgICAgIC8vIEJ1dCB0aGlzIGlzIE9L
IGFzIGxvbmcgYXMgREZHIE9TUiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpwcm92
ZW4qIEFic3RyYWNWYWx1ZSB2YWx1ZXMuIEFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzCisgICAg
ICAgIC8vIEJ1dCB0aGlzIGlzIE9LIGFzIGxvbmcgYXMgREZHIE9TUiBlbnRyeSB2YWxpZGF0ZXMg
dGhlIGlucHV0cyB3aXRoICpwcm92ZW4qIEFic3RyYWN0VmFsdWUgdmFsdWVzLiBBbmQgaXQgdHVy
bnMgb3V0IHRoYXQgdGhpcwogICAgICAgICAvLyB0eXBlIHdpZGVuaW5nIGlzIGNyaXRpY2FsIHRv
IG5hdmllci1zdG9rZXMuIFdpdGhvdXQgaXQsIG5hdmllci1zdG9rZXMgaGFzIG1vcmUgc3RyaWN0
IGNvbnN0cmFpbnQgb24gT1NSIGVudHJ5IGFuZAogICAgICAgICAvLyBmYWlscyBPU1IgZW50cnkg
cmVwZWF0ZWRseS4KICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKaW5kZXggYzcxNjRiMzBmNDY0ZWIw
ZDQzODJlMmNjYTQyZDU2OTk2NGQxYmY2Ny4uNzQzYmNkMzUzMTRhNDMzMzY0ZTNhOTA0ZTgyMGRm
NWUwMjNlNDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcApAQCAtMjk5LDYgKzI5OSwxMCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxl
dmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAg
IGNhc2Ugb3Bfc2V0X3ByaXZhdGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9jaGVja19wcml2YXRlX2Jy
YW5kOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3Jf
bmV4dDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2Vu
dW1lcmF0b3JfaW5fYnlfdmFsOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3Bl
cnR5OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3Bf
Y2FsbF9ldmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRl
eCA5ZDEwMDRmZTUzZjNkNDQ3ZGYxMDNmYWNhMGQyZTEwZWM0ZmY1ZjQ2Li43N2E2OGU4ZTQxYTc3
OTJlM2U2YjZlNDkzYTQwNWM3NWYzODRjOTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaApAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3Jp
dGVGdQogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheU9y
RW1wdHk6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhhc093
blByb3BlcnR5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAg
ICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0VmVjdG9yTGVuZ3RoOgpA
QCAtMzQzLDYgKzM0Nyw5IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgor
ICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OgogICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICBjYXNlIEdldEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWU6IHsKQEAgLTM1MCw2ICszNTcsNzIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGU6IHsKKyAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBpZiAo
bm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGUgJiYgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IENlbGxV
c2UpIHsKKyAgICAgICAgICAgIHJlYWQoTmFtZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJl
YWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBjbG9iYmVyVG9wKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBBcnJheU1vZGUgbW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgd3JpdGUoU2lkZVN0YXRl
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAg
ICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVh
ZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZEludDMyUHJvcGVydGllcywgZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5v
ZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7
CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAg
cmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4
ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhh
c0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERvdWJsZVByb3BlcnRpZXMsIGdyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsK
KyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICBy
ZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5
Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0
b3JhZ2U6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAg
ICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVh
ZChJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjbG9i
YmVyVG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eToKICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKICAgICAg
ICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwpAQCAtNzA1LDYgKzc3OCw4IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFk
LCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNlIFRvUHJvcGVy
dHlLZXk6CiAgICAgY2FzZSBJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6Cisg
ICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAg
Y2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAgLTkwNiw2
ICs5ODEsMTIgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgICAgIHdyaXRlKEFi
c3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBmYXIgdG9vIGNv
bnNlcnZhdGl2ZSBmb3IgdGhlIGNoaWxkMSgpLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSBjYXNlLgor
ICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOiB7CisgICAgICAgIGNsb2JiZXJUb3AoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAg
ICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IDUzYWJmZWE5MWRmMjI0YmQ0ODI1NTBkYmU1Nzgy
ZDU5Y2FkZDk4YjUuLjUyYTczMTY1NjU4NjEyNTA2NTYwZTNiZjNmNTFiOTUxM2YzYjlhN2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTM5NSw2ICszOTUsMTAg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0RW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lOgogICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoK
KyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVy
aWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRl
QWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNTA4LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAg
ICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAg
Y2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5Nzhk
YTI4Y2ExYzQ5NzcxNTVhODE5Li5hY2U0YWY1MzQ1NzJmNGJlNmFlNzVhMjBlYTMwMTZiNGM2Yzc4
Zjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAg
LTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICAgICAgZml4
RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0
KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlvbigp
KSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEwNjIs
NiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUoKS5h
Y3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgIGNhc2Ug
QXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9TUiBi
ZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE5hbWVkTW9kZS4KKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogV0Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlwZShB
cnJheTo6R2VuZXJpYykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KQEAgLTEwOTYsNyArMTExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8v
IHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0aGUg
ZnVsbC1ibG93bgogICAgICAgICAgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzIHNsb3cgcGF0
aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAgICAg
ICAgCisKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6
T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBOZWdhdGl2ZUluZGV4KSkKQEAgLTExMTEsNyArMTEyNyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6SW5Cb3VuZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3Vs
YXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5vZGUt
PmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikgJiYgYXJyYXlNb2RlLnNwZWN1bGF0
aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0IGNh
cmUKQEAgLTExMjEsNyArMTEzNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBOZWdhdGl2ZUluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5lQ2hh
aW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICB9CkBAIC0xMTc4LDcgKzExOTQsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAor
CisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3Qgc2V0IGEgbm9uLUpTVmFsdWUgcmVzdWx0
IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgc2luY2Ugd2UgY291bGQgc3RpbGwgZG8gYSBOYW1lZE1v
ZGUgcHJvcGVydHkgYWNjZXNzLiBXZSBhbHNvIGRvbid0IGhhdmUgYSBnb29kIHdheSB0bworICAg
ICAgICAgICAgLy8gcHJvdmUgdGhlcmUncyBubyBzdHJ1Y3R1cmUgcHJvcGVydGllcyBhdCB0aGlz
IHBvaW50LgorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFs
KQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUu
dHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAg
ICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpCkBAIC0yMzQ1LDYgKzIzNjUsNTggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAgICAgRWRnZSYgYmFzZSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBFZGdlJiBpbmRleCA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBFZGdlJiBzdG9yYWdlRWRnZSA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSk7CisK
KyAgICAgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUo
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+cHJlZGljdGlvbigpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+cHJlZGlj
dGlvbigpKSk7CisKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KGJhc2UpOworICAg
ICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oYmFzZSwgaW5kZXgsIHN0b3JhZ2VFZGdl
KTsKKworICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1v
ZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmJlbmVmaXRzRnJvbU9yaWdpbmFs
QXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2FuZUNoYWluSWZQb3NzaWJsZShub2Rl
LCBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMgPyBBcnJheTo6SW5C
b3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW4pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUo
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBCYWRDYWNoZSkpCisgICAgICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihiYXNlKTsKKworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihp
bmRleCk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogewor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgICAgICBpZiAobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPiht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKICAgICAgICAgY2FzZSBQcm9maWxlVHlwZTogewogICAgICAgICAgICAgLy8gV2Ugd2Fu
dCB0byBpbnNlcnQgdHlwZSBjaGVja3MgYmFzZWQgb24gdGhlIGluc3RydWN0aW9uVHlwZVNldCBv
ZiB0aGUgVHlwZUxvY2F0aW9uLCBub3QgdGhlIGdsb2JhbFR5cGVTZXQuCiAgICAgICAgICAgICAv
LyBCZWNhdXNlIHRoZSBpbnN0cnVjdGlvblR5cGVTZXQgaXMgY29udGFpbmVkIGluIGdsb2JhbFR5
cGVTZXQsIGlmIHdlIHByb2R1Y2UgYSB0eXBlIGNoZWNrIGZvcgpAQCAtMzY5MCw2ICszNzYyLDY3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRn
ZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAgICAgfQogCisgICAgdm9pZCBzZXRKU0FycmF5U2Fu
ZUNoYWluSWZQb3NzaWJsZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQXJyYXlNb2RlIGFy
cmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEFycmF5
OjpTcGVjdWxhdGlvbj4gc2FuZUNoYWluU3BlY3VsYXRpb247CisgICAgICAgIGlmIChhcnJheU1v
ZGUuaXNKU0FycmF5V2l0aE9yaWdpbmFsU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIC8vIENo
ZWNrIGlmIEluQm91bmRzU2FuZUNoYWluIHdpbGwgd29yayBvbiBhIHBlci10eXBlIGJhc2lzLiBO
b3RlIHRoYXQ6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gMSkgV2UgZG9uJ3Qgd2Fu
dCBkb3VibGUgYXJyYXlzIHRvIHNvbWV0aW1lcyByZXR1cm4gdW5kZWZpbmVkLCBzaW5jZQorICAg
ICAgICAgICAgLy8gdGhhdCB3b3VsZCByZXF1aXJlIGEgY2hhbmdlIHRvIHRoZSByZXR1cm4gdHlw
ZSBhbmQgaXQgd291bGQgcGVzc2ltaXNlCisgICAgICAgICAgICAvLyB0aGluZ3MgYSBsb3QuIFNv
LCB3ZSdkIG9ubHkgd2FudCB0byBkbyB0aGF0IGlmIHdlIGFjdHVhbGx5IGhhZAorICAgICAgICAg
ICAgLy8gZXZpZGVuY2UgdGhhdCB3ZSBjb3VsZCByZWFkIGZyb20gYSBob2xlLiBUaGF0J3MgcHJl
dHR5IGFubm95aW5nLgorICAgICAgICAgICAgLy8gTGlrZWx5IHRoZSBiZXN0IHdheSB0byBoYW5k
bGUgdGhhdCBjYXNlIGlzIHdpdGggYW4gZXF1aXZhbGVudCBvZgorICAgICAgICAgICAgLy8gSW5C
b3VuZHNTYW5lQ2hhaW4gZm9yIE91dE9mQm91bmRzLiBGb3Igbm93IHdlIGp1c3QgZGV0ZWN0IHdo
ZW4gVW5kZWZpbmVkIGFuZAorICAgICAgICAgICAgLy8gTmFOIGFyZSBpbmRpc3Rpbmd1aXNoYWJs
ZSBhY2NvcmRpbmcgdG8gYmFja3dhcmRzIHByb3BhZ2F0aW9uLCBhbmQganVzdAorICAgICAgICAg
ICAgLy8gdXNlIEluQm91bmRzU2FuZUNoYWluIGluIHRoYXQgY2FzZS4gVGhpcyBoYXBwZW5zIHRv
IGNhdGNoIGEgbG90IG9mIGNhc2VzLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDIp
IFdlIGRvbid0IHdhbnQgaW50MzIgYXJyYXkgbG9hZHMgdG8gaGF2ZSB0byBkbyBhIGhvbGUgY2hl
Y2sganVzdCB0bworICAgICAgICAgICAgLy8gY29lcmNlIHRvIFVuZGVmaW5lZCwgc2luY2UgdGhh
dCB3b3VsZCBtZWFuIHR3aWNlIHRoZSBjaGVja3MuIFdlIHdhbnQgdG8KKyAgICAgICAgICAgIC8v
IGJlIGFibGUgdG8gc2F5IHdlIGFsd2F5cyByZXR1cm4gSW50MzIuIEZJWE1FOiBNYXliZSB0aGlz
IHNob3VsZCBiZSBwcm9maWxpbmcKKyAgICAgICAgICAgIC8vIGJhc2VkPworICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgIC8vIFRoaXMgaGFzIHR3byBpbXBsaWNhdGlvbnMuIEZpcnN0LCB3ZSBo
YXZlIHRvIGRvIG1vcmUgY2hlY2tzIHRoYW4gd2UnZAorICAgICAgICAgICAgLy8gbGlrZS4gSXQn
cyB1bmZvcnR1bmF0ZSB0aGF0IHdlIGhhdmUgdG8gZG8gdGhlIGhvbGUgY2hlY2suIFNlY29uZCwK
KyAgICAgICAgICAgIC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5l
ZWQgdG8gdGFrZSB0aGUgZnVsbC1ibG93bgorICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBz
bG93IHBhdGguIFdlIGNhbiBmaXggdGhhdCB3aXRoOgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NDY2OAorCisgICAgICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgor
ICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkg
PT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFp
blNwZWN1bGF0aW9uID0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGhhcHBlbnMgdG8gYmUgZW50aXJlbHkgbmF0dXJhbC4gV2UgYWxy
ZWFkeSB3b3VsZCBoYXZlCisgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYW55IEpTVmFsdWUs
IGFuZCBub3cgd2UnbGwgcmV0dXJuIFVuZGVmaW5lZC4gV2Ugc3RpbGwgZG8KKyAgICAgICAgICAg
ICAgICAvLyB0aGUgY2hlY2sgYnV0IGl0IGRvZXNuJ3QgcmVxdWlyZSB0YWtpbmcgYW55IGtpbmQg
b2Ygc2xvdyBwYXRoLgorICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2Rl
LnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRT
aXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCisgICAgICAgICAgICAg
ICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWlu
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFy
cmF5OjpJbkJvdW5kcykKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24g
PSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKKyAgICAgICAgICAgICAgICBpZiAoIShub2Rl
LT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpICYmIGFycmF5TW9kZS5zcGVjdWxh
dGlvbigpID09IEFycmF5OjpJbkJvdW5kcykgeworICAgICAgICAgICAgICAgICAgICAvLyBIb2xl
cyBsb29rIGxpa2UgTmFOIGFscmVhZHksIHNvIGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2FyZQorICAg
ICAgICAgICAgICAgICAgICAvLyBhYm91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFVuZGVmaW5l
ZCBhbmQgTmFOIHRoZW4gd2UgY2FuCisgICAgICAgICAgICAgICAgICAgIC8vIGRvIHRoaXMuCisg
ICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRz
U2FuZUNoYWluOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM2NEJpdCgpICYmIGFycmF5
TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNF
eGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAg
ICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVD
aGFpbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IGlmIChzYW5lQ2hhaW5TcGVjdWxhdGlvbikKKyAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9z
c2libGUobm9kZSwgKnNhbmVDaGFpblNwZWN1bGF0aW9uKTsKKyAgICB9CisKICAgICB2b2lkIHNl
dFNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSwgQXJyYXk6OlNwZWN1bGF0aW9uIHNwZWN1
bGF0aW9uKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmluZGV4IDlkNDlmZTYzMjVjNWQ0ZWY0ZjgxMjRmZmUz
NmZhMGNmYmRiZDYxYmYuLmRkM2NjZmRhOWU1NDdiZTExZDE5MmQxNzUyZDQ2ZmQ2ZGI5YTYxYjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCkBAIC0zODcsNiArMzg3LDgg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhT
dHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9k
ZS0+aW5CeVN0YXR1cygpKTsKICAgICBpZiAobm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQogICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICpub2RlLT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChu
b2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
ZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkpOwogICAgIGlm
IChub2RlLT5pc0p1bXAoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoiLCAqbm9kZS0+
dGFyZ2V0QmxvY2soKSk7CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0
aW9uUGhhc2UuY3BwCmluZGV4IDZjYWUwN2U5MDZmOWMxZDBlZjQwMzMwYzIzMzQ2YzVkNGMyM2Y5
YzAuLjFiYWExYzhiY2Y1MTkzMTQwNDMwYTExZmJjMGYzYTg5MjIxNTFlNDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0
aW1pemF0aW9uUGhhc2UuY3BwCkBAIC0xMzQ0LDYgKzEzNDQsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAg
IGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBB
cnJheTo6VW5kZWNpZGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzgw
LDYgKzEzODEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkK
ICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAvLyBGSVhNRTog
VGVhY2ggdGhpcyBhYm91dCBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleC4KICAgICAgICAgY2Fz
ZSBDaGVja0luQm91bmRzOiB7CiAgICAgICAgICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25z
aGlwOjpzYWZlQ3JlYXRlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9k
ZSgpLCBSZWxhdGlvbnNoaXA6Okxlc3NUaGFuKSk7CiAgICAgICAgICAgICBzZXRSZWxhdGlvbnNo
aXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbV96ZXJv
LCBSZWxhdGlvbnNoaXA6OkdyZWF0ZXJUaGFuLCAtMSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWF5RXhpdC5jcHAKaW5kZXggMGE1OTNlNTZhNzg2ZDM5M2ZkODdiNjU1N2QzNTJlM2Yw
ZDQwNmFhNS4uZWM1YThmYjZlYWNlMjlkMzVlZDA1N2NkNjRmMGQ2ZjQ2NDY2NGQwZiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCkBAIC0xMTEsOCArMTExLDExIEBA
IEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBl
JiBzdGF0ZSkKICAgICBjYXNlIEZpbHRlckRlbGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVy
Q2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CiAgICAgY2FzZSBGaWx0ZXJTZXRQcml2YXRlQnJhbmRT
dGF0dXM6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51
bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CiAgICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNlIFN0ckNhdDoKICAgICBjYXNl
IENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CmluZGV4IDY5MTYyYmNmZjRmZDI3MzYyMDkzMGM5NzA3YTZkMGE0MzhlNWVkODEuLjY5MDMzZjc5
OTFhMzY3YmE0NTUxOTM0ZGY4MzExNmFkYjQ0MTcxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCkBAIC01Miw2ICs1Miw3IEBACiAjaW5jbHVkZSAiRGVsZXRlQnlWYXJpYW50Lmgi
CiAjaW5jbHVkZSAiR2V0QnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgi
CiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRWYXJp
YW50LmgiCkBAIC0xNzcyLDYgKzE3NzMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZERpcmVjdEZsdXNoOgogICAgICAgICBjYXNlIEdldFByb3RvdHlwZU9mOgogICAgICAgICBjYXNl
IFRyeUdldEJ5SWQ6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBj
YXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6CiAgICAgICAgIGNh
c2UgR2V0UHJpdmF0ZU5hbWU6CkBAIC0xOTQxLDYgKzE5NDMsODQgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9vcEluZm8uYXM8dm9pZCo+KCk7CiAgICAgfQogCisgICAgYm9vbCBoYXNTdG9y
YWdlQ2hpbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAg
IGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAg
ICAgIGNhc2UgU3RyaW5nQ29kZVBvaW50QXQ6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5
VmFsOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgIGNhc2UgQXRvbWljc0FkZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQW5kOgorICAgICAg
ICBjYXNlIEF0b21pY3NDb21wYXJlRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0V4Y2hh
bmdlOgorICAgICAgICBjYXNlIEF0b21pY3NMb2FkOgorICAgICAgICBjYXNlIEF0b21pY3NPcjoK
KyAgICAgICAgY2FzZSBBdG9taWNzU3RvcmU6CisgICAgICAgIGNhc2UgQXRvbWljc1N1YjoKKyAg
ICAgICAgY2FzZSBBdG9taWNzWG9yOgorICAgICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAg
Y2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY2Fz
ZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToK
KyAgICAgICAgY2FzZSBBcnJheUluZGV4T2Y6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzdG9yYWdlQ2hpbGRJbmRleCgpCisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzU3RvcmFnZUNoaWxkKCkpOworICAgICAgICBzd2l0Y2gg
KG9wKCkpIHsKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckNvZGVBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDb2RlUG9pbnRBdDoKKyAgICAgICAgY2Fz
ZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAg
ICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICAgICAgcmV0dXJu
IDM7CisgICAgICAgIGNhc2UgQXRvbWljc0FkZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQW5kOgor
ICAgICAgICBjYXNlIEF0b21pY3NDb21wYXJlRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWlj
c0V4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NMb2FkOgorICAgICAgICBjYXNlIEF0b21p
Y3NPcjoKKyAgICAgICAgY2FzZSBBdG9taWNzU3RvcmU6CisgICAgICAgIGNhc2UgQXRvbWljc1N1
YjoKKyAgICAgICAgY2FzZSBBdG9taWNzWG9yOgorICAgICAgICAgICAgcmV0dXJuIDIgKyBudW1F
eHRyYUF0b21pY3NBcmdzKG9wKCkpOworICAgICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAg
ICAgIHJldHVybiAwOworCisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0
QXJyYXlMZW5ndGg6CisgICAgICAgICAgICByZXR1cm4gMjsKKworICAgICAgICBjYXNlIEhhc0lu
ZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5
OgorICAgICAgICAgICAgcmV0dXJuIDI7CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBu
b24tdHJpdmlhbCB0aGluZ3MgdG8gZGV0ZXJtaW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBi
b29sIGhhc1VpZE9wZXJhbmQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJ
ZGVudDsKQEAgLTIyMDUsNiArMjI4NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlW
YWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6
CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0
cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNl
IFN0cmluZ0NvZGVQb2ludEF0OgpAQCAtMzE3NCw2ICszMjU4LDIzIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fb3BJbmZvLmFzPFNldFByaXZhdGVCcmFuZFN0YXR1cyo+KCk7CiAgICAgfQog
CisgICAgYm9vbCBoYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAg
c3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICBj
YXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBFbnVtZXJhdG9yTWV0YWRhdGEgZW51bWVyYXRvck1ldGFkYXRhKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX29wSW5mbzIuYXM8RW51bWVyYXRvck1ldGFkYXRhPigpOworICAgIH0KKwog
ICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAgICAgewogICAgICAgICBp
ZiAoIWNoaWxkMSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4
IDVkNGIxN2ZiMzc2NTI4ODg5OGE5MzA4Y2Y2NjU4MTQyMTdjNTBhZDEuLjVjZTlhZjNlNDUwMzQ4
ZWNhYWJhYzFiMWM4OTVhZWMzZTFmNzY4YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKQEAgLTUxNSw2ICs1MTUsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIG1hY3JvKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5lcmlj
UG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhUb0lu
ZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0
ZUluZGV4QW5kTW9kZSwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNy
byhFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNy
byhFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFj
cm8oRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIE5vZGVSZXN1bHRKUykgXAorICAg
IG1hY3JvKEVudW1lcmF0b3JHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3Mg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRW51bWVyYXRvckluQnlWYWwsIE5vZGVS
ZXN1bHRCb29sZWFuIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oRW51bWVyYXRvckhhc093blByb3BlcnR5LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVI
YXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIC8qIE5vZGVzIGZvciBKU01hcCBh
bmQgSlNTZXQgKi8gXAogICAgIG1hY3JvKE1hcEhhc2gsIE5vZGVSZXN1bHRJbnQzMikgXAogICAg
IG1hY3JvKE5vcm1hbGl6ZU1hcEtleSwgTm9kZVJlc3VsdEpTKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAppbmRleCA3MDQxMzMzNWEyMmViMzE0NTczMDZi
NWFmYzM1N2EwZDMxMjdhZTk3Li44OWJkY2IxZDUwNDkwNTVjZTYyZGU4YzNkMjA3ODkyYzVmYjEw
MjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAg
LTI1MDQsNiArMjUwNCwxMDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRv
SW5kZXhTdHJpbmcsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCogZ2xvYmEKICAgICByZXR1cm4g
anNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSk7CiB9CiAK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUlu
ZGV4QW5kTW9kZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVO
dW1iZXIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0m
IHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVD
TEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlIG1vZGUg
PSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KG1vZGVOdW1iZXIp
OworICAgIGlmIChKU1ZhbHVlOjpkZWNvZGUoYmFzZVZhbHVlKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KSB7CisgICAgICAgIEFTU0VSVChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5p
dE1vZGUpOworICAgICAgICBBU1NFUlQoIWluZGV4KTsKKyAgICAgICAgQVNTRVJUKCFlbnVtZXJh
dG9yLT5zaXplT2ZQcm9wZXJ0eU5hbWVzKCkpOworICAgICAgICBtb2RlID0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTsKKyAgICB9IGVsc2UgeworICAgICAgICBKU09iamVj
dCogYmFzZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLnRvT2JqZWN0KGdsb2JhbE9iamVj
dCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAg
Y29uc3RleHByIGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyA9IGZhbHNlOwor
ICAgICAgICBlbnVtZXJhdG9yLT5jb21wdXRlTmV4dChnbG9iYWxPYmplY3QsIGJhc2UsIGluZGV4
LCBtb2RlLCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gYml0d2lzZV9jYXN0PEpTVmFsdWU+KHN0YXRpY19jYXN0PHVp
bnQ2NF90Pihtb2RlKSA8PCAzMiB8IGluZGV4IHwgSlNWYWx1ZTo6TnVtYmVyVGFnKTsKKyNlbHNl
CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlKG1vZGUsIGluZGV4KTsKKyNlbmRpZgorICAg
IEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKKworICAgIGlmIChtb2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+
aW5kZXhlZExlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0
cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLnN0cmluZygpKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAg
IH0KKworICAgIEpTU3RyaW5nKiByZXN1bHQgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdElu
ZGV4KGluZGV4KTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSk7CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5h
bWVBbmRHZXRCeVZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU0NlbGwqIGJhc2UsIHVpbnQzMl90IGluZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGVudW1lcmF0b3IpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAg
ICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklU
T3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgIEpTT2JqZWN0KiBvYmpl
Y3QgPSBiYXNlLT50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6
OmVuY29kZShvYmplY3QtPmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKK30KKwor
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsLCBFbmNv
ZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVl
IGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgcHJvcGVydHlOYW1lVmFsdWUsIHVpbnQzMl90IGlu
ZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxs
RnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
IEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpOworICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSAmJiBiYXNlLmlzT2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UuZ2V0T2JqZWN0KCktPmhhc1By
b3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgpKSk7CisKKyAgICBKU1N0cmluZyogcHJvcGVydHlO
YW1lID0ganNTZWN1cmVDYXN0PEpTU3RyaW5nKj4odm0sIEpTVmFsdWU6OmRlY29kZShwcm9wZXJ0
eU5hbWVWYWx1ZSkpOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJh
c2UsIHByb3BlcnR5TmFtZSkpKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJl
cikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9s
b2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1
ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0
LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8
SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAg
YXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIFJFTEVBU0VfQU5E
X1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVI
YXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIGlkZW50aWZpZXIpKSkpOworfQorCiBK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwg
SlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogcmVnZXhwUHRy
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4KSkKIHsKICAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CmluZGV4IDMxNGUxZmVkZTU5NWQwZmI4ZmE4MzVlZjcyMDVlNmI2NDVjMzA0NmIuLmQzNmYzNTNi
YzM2MTJiOTg4MmNhMWQxODM4NDczZGQwOTI4NTk0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCkBAIC0zNiw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgRGF0ZUluc3RhbmNlOwogY2xhc3MgSlNCaWdJbnQ7CiBzdHJ1Y3QgVW5saW5rZWRTdHJp
bmdKdW1wVGFibGU7CitjbGFzcyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I7CiAKIG5hbWVzcGFj
ZSBERkcgewogCkBAIC0xMTAsNiArMTExLDEyIEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uSW5TdHJ1Y3R1cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhCiBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwg
SlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxs
KiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQz
Ml90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMy
X3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAo
SlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90
LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0
b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdWludDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNM
QVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlW
YWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVj
dCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwg
dm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdF
bXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3RydWN0dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3ZTMwNmJhYjg1MzdjMGU4OWUyZTBkLi5kMmFlY2Mw
MWE1ZjI5MDQzYWUyMWRmZGZkY2M3ZjUxMDk5ODhjMjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQx
ID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVk
aWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAg
ICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAg
ICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAg
ICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAgICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0
aW9uKCksCiAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAg
ICAgICAgU3BlY05vbmUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJy
YXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAg
ICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihT
cGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0
aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgp
ID09IEdldEJ5VmFsKQorICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JB
cml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdl
dEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBj
YXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAg
Y2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKQEAgLTEyMDUsMTAgKzEy
MDcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90
aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRF
eHRyYWN0TW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKICAg
ICAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAg
ICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBJbkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoK
ICAgICAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKQEAgLTEyMzksNiArMTI0NiwxOSBAQCBwcml2
YXRlOgogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGU6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgY2FuIGFjdHVhbGx5IHJldHVybiBhIEpT
IG51bGwgYnV0IHdlIGJyYW5jaCBvZiB0aGF0IGNhc2UgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2sg
c28gd2UgZG9uJ3Qgd2FudCB0byBtZXNzIHdpdGgKKyAgICAgICAgICAgIC8vIGZpeHVwJ3MgbG9n
aWMuCisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNGdWxsTnVtYmVyKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0
ZVByb3BlcnR5TmFtZTogeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEg
dmFsdWUgcHJvZmlsZSB3aGV0aGVyIHdlJ3ZlIGV2ZXIgYWN0dWFsbHkgc2VlbiBhIHN5bWJvbC9z
dHJpbmcuCisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFBhcnNlSW50
OiB7CiAgICAgICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyBub2RlIHRvIGFsbW9zdCBhbHdheXMg
cHJvZHVjZSBhbiBpbnQzMi4gSG93ZXZlciwKICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUg
aXQgcHJvZHVjZXMgTmFOIG9yIGludGVnZXJzIG91dCBvZiBpbnQzMiByYW5nZS4gV2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCmluZGV4
IGM5NjM3YTFkMTNmYWFmOWVjMDQ1NjU0ODEwNWY1N2UyOTk5ZDRjMDMuLjY1NjUxMTA0MThkY2Fl
OWU0ZmVmZmZhOTk0NjIyNzIzYjQyODA1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcApAQCAtODYsNiArODYsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMCks
IG1fZ3JhcGguY2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC5jaGlsZChtX25vZGUsIDIpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAg
ICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICBsb3dlckJvdW5kc0NoZWNrKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSwgbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEp
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwogICAgICAgICAgICAgYnJlYWs7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDBmOWJk
ZTZhMzE1ZGE3MTcyYTMwZjYxOWVlMmQwYjliNDYwZTJjNTAuLmEwNTFlNzRhNzA2MjExNTljODNi
OTYyOTNjODI4NmZlMzU0ZmQyY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCkBAIC0zNzIsNiArMzcyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGln
bm8KICAgICAgICAgLy8gdG8gY2FwdHVyZSAicHJvZmlsaW5nIiBhdCB0aGUgcG9pbnQgaW4gY29u
dHJvbCBmbG93IGhlcmUgdGhlIHVzZXIgcHV0IHRoZW0uCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgIGNhc2UgR2V0QnlWYWw6CiAgICAg
Y2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
CkBAIC00OTYsNiArNDk3LDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIHJl
dHVybiBpc1NhZmU7CiAgICAgfQogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZToKKyAgICAvLyBUaGVzZSB0ZWNobmljYWxseSBkb24ndCBoYXZlIGVmZmVjdHMgYnV0
IHRoZXknbGwgb25seSBldmVyIGZvbGxvdyBhIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlIHNvIHdlIG1pZ2h0IGFzIHdlbGwgcmV0dXJuIGZhbHNlLgorICAgIGNhc2UgRW51bWVyYXRv
ck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4Ogor
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBUb1Ro
aXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgogICAgIGNhc2UgQ3JlYXRlUHJvbWlzZToKQEAgLTU5
NSw2ICs2MDEsOCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRl
LCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgTmV3U3RyaW5n
T2JqZWN0OgogICAgIGNhc2UgSW5CeVZhbDoKICAgICBjYXNlIEluQnlJZDoKKyAgICBjYXNlIEVu
dW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAg
IGNhc2UgSGFzUHJpdmF0ZU5hbWU6CiAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgY2Fz
ZSBIYXNPd25Qcm9wZXJ0eToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKaW5kZXggMWI1MWZlYTMzYWNmNjlmNTNlMDk0YTRlNTBhOGI3MGJhNmFh
YTcyNi4uZmU2NzM2MmVjNWY0YzAxOTE2NjI1ZDJmODBiYmJlNzVmZDM0NGI5YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE2MzUs
MjUgKzE2MzUsMTUgQEAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5
KFNwZWN1bGF0aXZlSklUKiBqaXQpCiB7CiB9CiAKK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1Zh
bHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBHUFJSZWcgc3BlY2lmaWNQYXls
b2FkKQogI2lmIFVTRShKU1ZBTFVFNjQpCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSlNWYWx1ZVJl
Z3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJl
dXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCkKLSAgICA6IG1fZ3ByKGppdCwgUmV1
c2UsIG9wZXJhbmQpCi17Ci19CisgICAgOiBtX2dwcihqaXQsIHNwZWNpZmljUGF5bG9hZCkKICNl
bHNlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVS
ZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBX
aGljaFZhbHVlV29yZCByZXN1bHRXb3JkKQorICAgIDogbV9wYXlsb2FkR1BSKGppdCwgc3BlY2lm
aWNQYXlsb2FkKQorICAgICwgbV90YWdHUFIoaml0KQorI2VuZGlmCiB7Ci0gICAgaWYgKHJlc3Vs
dFdvcmQgPT0gUGF5bG9hZFdvcmQpIHsKLSAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9y
YXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOwotICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFy
eShqaXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFy
eShqaXQpOwotICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVy
YW5kKTsKLSAgICB9CiB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiBKU1ZhbHVlUmVn
c1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1
c2VUYWcsIEpTVmFsdWVPcGVyYW5kJiBvcGVyYW5kKQpAQCAtMjU5NSw3ICsyNTg1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSogbm9kZSkKICAgICBz
dHJpY3RJbnQzMlJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBtX2dyYXBoLmNoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAxKSk7CkBA
IC0yNjA0LDE3ICsyNTk0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZh
bE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNo
LmdwcigpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRh
ZzsKLSAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSBy
ZWFsUmVzdWx0VGFnKHRoaXMpOwotICAgICAgICByZXN1bHRUYWcuYWRvcHQocmVhbFJlc3VsdFRh
Zyk7Ci0gICAgICAgIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICB9Ci0jZW5k
aWYKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIERhdGFGb3JtYXQgZm9ybWF0Owor
ICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kcygpID8gRGF0YUZvcm1hdEpTIDogRGF0YUZvcm1hdEpTQ2VsbCk7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKIAogICAgIC8v
IHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNl
cyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBz
Y3JhdGNoUmVnKTsKQEAgLTI2NTAsOCArMjYzMyw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBiaWdDaGFyYWN0
ZXIsIHRoaXMsIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZywgc2NyYXRjaFJlZywgJnZt
LCBzY3JhdGNoUmVnKSk7CiAKICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5k
cygpKSB7CisgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKICNpZiBVU0Uo
SlNWQUxVRTMyXzY0KQotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgcmVzdWx0VGFnUmVnKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOwogI2VuZGlmCiAKICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1faml0Lmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpOwpAQCAtMjY2OSwzNCArMjY1MywyMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgICAgICAg
ICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3RlckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihzdHJp
bmdQcm90b3R5cGVTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9qaXQuZ3JhcGgoKS5yZWdpc3Rl
ckFuZFdhdGNoU3RydWN0dXJlVHJhbnNpdGlvbihvYmplY3RQcm90b3R5cGVTdHJ1Y3R1cmUpOwog
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1h
a2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAg
ICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhzY3JhdGNoUmVnKSwgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJv
cGVydHlSZWcpKTsKLSNlbHNlCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihtYWtl
VW5pcXVlPFNhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAgICAg
ICAgICBvdXRPZkJvdW5kcywgdGhpcywgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCBzY3JhdGNo
UmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgIG91dE9mQm91
bmRzLCB0aGlzLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICB9IGVsc2Ug
ewotI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
ICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCiAgICAgICAgICAgICAgICAgICAgIG91dE9m
Qm91bmRzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbFN0cmluZ0ludCwKLSAgICAgICAgICAgICAg
ICAgICAgc2NyYXRjaFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xv
YmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSNlbHNlCi0gICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAg
ICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbFN0cmlu
Z0ludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCBzY3Jh
dGNoUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0
KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmpl
Y3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwogICAgICAgICB9CiAgICAgICAgIAotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgICAgIGpzVmFsdWVSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50
Tm9kZSk7Ci0jZWxzZQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgc2NyYXRj
aFJlZywgbV9jdXJyZW50Tm9kZSk7Ci0jZW5kaWYKLSAgICB9IGVsc2UKLSAgICAgICAgY2VsbFJl
c3VsdChzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoZm9y
bWF0ID09IERhdGFGb3JtYXRKUykKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbV9jdXJyZW50Tm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNlbGxSZXN1bHQo
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG1fY3VycmVudE5vZGUpOworICAgIH0KIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZyb21DaGFyQ29kZShOb2RlKiBub2RlKQpAQCAtMzM0
OSwxMyArMzMyMSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpsb2FkRnJvbUludFR5cGVkQXJy
YXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZwogICAgIH0KIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwg
R1BSUmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUgdHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiBu
b2RlLCBKU1ZhbHVlUmVncyByZXN1bHRSZWdzLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBib29sIGNh
blNwZWN1bGF0ZSwgYm9vbCBzaG91bGRCb3gpCiB7CisgICAgaWYgKHNob3VsZEJveCkgeworICAg
ICAgICAvLyBUT0RPOiBUaGlzIGlzIHdyb25nIGZvciBVSW50MzIuLi4KKyAgICAgICAgbV9qaXQu
Ym94SW50MzIocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOwogICAgIGlm
IChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpIHsKICAgICAgICAgc3Ry
aWN0SW50MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKKwogICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25lZCh0
eXBlKSk7CiAgICAgaWYgKG5vZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkgJiYgY2FuU3BlY3Vs
YXRlKSB7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCks
IG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0
UmVnLCBUcnVzdGVkSW1tMzIoMCkpKTsKQEAgLTMzODAsNyArMzM2MCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEdQUlJlZyBy
ZXN1bHRSZWcsIFR5CiAgICAgZG91YmxlUmVzdWx0KGZyZXN1bHQuZnByKCksIG5vZGUpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9k
ZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIEFTU0VSVChpc0lu
dCh0eXBlKSk7CiAgICAgCkBAIC0zMzkyLDEzICszMzcyLDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5
VHlwZSB0CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3RkOjp0aWUo
cmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0SW50MzIpOworICAgIGJvb2wg
c2hvdWxkQm94ID0gZm9ybWF0ID09IERhdGFGb3JtYXRKUzsKIAogICAgIGVtaXRUeXBlZEFycmF5
Qm91bmRzQ2hlY2sobm9kZSwgYmFzZVJlZywgcHJvcGVydHlSZWcpOwotICAgIGxvYWRGcm9tSW50
VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgcmVzdWx0UmVnLCB0eXBlKTsKKyAg
ICBsb2FkRnJvbUludFR5cGVkQXJyYXkoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpLCB0eXBlKTsKICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUg
PSB0cnVlOwotICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdFJlZywg
dHlwZSwgY2FuU3BlY3VsYXRlKTsKKyAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2Rl
LCByZXN1bHRSZWdzLCB0eXBlLCBjYW5TcGVjdWxhdGUsIHNob3VsZEJveCk7CiB9CiAKIGJvb2wg
U3BlY3VsYXRpdmVKSVQ6OmdldEludFR5cGVkQXJyYXlTdG9yZU9wZXJhbmQoCkBAIC0zNjM2LDcg
KzM2MTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBl
ZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydAogICAgIG5vUmVzdWx0KG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJh
eShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5
cGUgdHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFG
b3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBBU1NF
UlQoaXNGbG9hdCh0eXBlKSk7CiAgICAgCkBAIC0zNjQ4LDYgKzM2MzAsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwg
VHlwZWRBcnJheVR5cGUKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgIHN0ZDo6dGllKHJlc3Vs
dFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1hdERvdWJsZSk7CisKICAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7
CiAgICAgZW1pdFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
Zyk7CkBAIC0zNjY0LDcgKzM2NTAsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCi0gICAgZG91Ymxl
UmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMp
IHsKKyAgICAgICAgbV9qaXQuYm94RG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVncyk7CisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKTsKKyAgICAgICAgZG91YmxlUmVz
dWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9w
ZXJ0eSwgTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKQEAgLTM3MDMsNyArMzY5NSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJh
eShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9k
ZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdp
dGhTdHJpbmcoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkK
IHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcxKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzIodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CkBAIC0zNzExLDE5ICszNzAzLDIwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSogbm9k
ZSkKICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIg
PSBhcmcyLmdwcigpOwogCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRp
ZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKwogICAg
IHNwZWN1bGF0ZU9iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBhcmcxR1BSKTsK
ICAgICBzcGVjdWxhdGVTdHJpbmcobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgYXJnMkdQ
Uik7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcs
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BS
KTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogCiAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MzEs
MTIgKzM3MjQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN5bWJvbChOb2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIo
KTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZp
eChEYXRhRm9ybWF0SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCksIGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN5bWJvbChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
SlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25HZXRCeVZhbE9iamVjdFN5bWJvbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGFyZzFHUFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAK
QEAgLTgwMzgsMTcgKzgwMzIsMTcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5
cGVkQXJyYXlCeXRlT2Zmc2V0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQodmVj
dG9yR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJk
YTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0g
ICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0
Y2guZ3ByKCk7CisKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJl
c3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gcmVzdWx0UmVncy5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgwNzMsMjQgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkK
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSog
bm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwog
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgLy8gVE9ETzogQXJlIGJvdGggb2YgdGhlc2UgbmVjZXNzYXJ5Pz8KICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7
CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBy
ZXN1bHQucmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAg
ICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSks
IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKQEAgLTEzNDgyLDYgKzEzNDc4LDMxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKiBub2RlKQogICAgIGNl
bGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
RWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisKKyAgICBHUFJSZWcg
aW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7
CisgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgaWYg
KG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBSZXVzZSwgaW5kZXgpOworICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVy
dHlJbmRleE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKDApKSk7CisKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIGluY3JlbWVudExvb3A7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGRvbmU7CisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9u
SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BS
UmVnLCBHUFJSZWc+KCk+KFsmXSB7CisKKyAgICAgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIs
IHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5pdE1v
ZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1vZGVHUFIpOwor
CisgICAgICAgICAgICBpbmNyZW1lbnRMb29wID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAg
IG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaC5ncHIoKSk7CisKKyAgICAgICAg
ICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoLmdwcigpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSkp
OworICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3Vs
dFJlZ3MucGF5bG9hZEdQUigpKS5saW5rVG8oaW5jcmVtZW50TG9vcCwgJm1faml0KTsKKworICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0YXRpY19jYXN0PHVp
bnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSA8PCAzMiksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgbV9qaXQub3I2NChzY3JhdGNoLmdwcigp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSkpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpIHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAg
ICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVz
dWx0LnJlZ3MoKTsKKworICAgICAgICAvLyBIYXMgdGhlIHNhbWUgc3RydWN0dXJlIGFzIHRoZSBl
bnVtZXJhdG9yLgorICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5ncHIoKSk7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLmdw
cigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgcmVzdWx0UmVncy5ncHIoKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpLCByZXN1bHRSZWdzLmdwcigpKSk7CisK
KyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAgICAgbV9qaXQuYWRkMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworCisgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBtX2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpIDw8
IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6TmFtZWRNb2RlKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgIEpTVmFs
dWVSZWdzIGJhc2VSZWdzID0gYmFzZS5yZWdzKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOwor
ICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywgaW5kZXhHUFIsIG1vZGVHUFIsIGVudW1l
cmF0b3JHUFIpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KE5vZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJh
bmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBh
aXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQ
UiA9IHBhaXJSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIG1faml0LmFu
ZDMyKFRydXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBw
YXlsb2FkR1BSLCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0
RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRhdGVkUGFp
cih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3MgPSB1cGRh
dGVkUGFpci5qc1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBwYWlyR1BSID0gaXM2NEJpdCgpID8g
cGFpclJlZ3MuZ3ByKCkgOiBwYWlyUmVncy50YWdHUFIoKTsKKworICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
IGlmIGNvbnN0ZXhwciAoaXM2NEJpdCgpKQorICAgICAgICBtX2ppdC5yc2hpZnQ2NChwYWlyR1BS
LCBUcnVzdGVkSW1tMzIoMzIpLCByZXN1bHRHUFIpOworICAgIGVsc2UKKyAgICAgICAgbV9qaXQu
bW92ZShwYWlyR1BSLCByZXN1bHRHUFIpOworICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spLCByZXN1bHRHUFIp
OworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5v
ZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4T3BlcmFu
ZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IG1vZGVPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisKKyAgICBHUFJS
ZWcgaW5kZXggPSBpbmRleE9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIG1vZGUgPSBtb2RlT3Bl
cmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRvciA9IGVudW1lcmF0b3JPcGVyYW5kLmdw
cigpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCBy
ZXN1bHRHUFIodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdCA9IHJlc3VsdEdQUi5ncHIoKTsKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1l
LCByZXN1bHQsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwgZW51bWVy
YXRvcik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdCwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
R2V0QnlWYWwoTm9kZSogbm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChHUFJSZWcgYmFzZUNl
bGxHUFIpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAg
ICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgICAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgICAgIEdQUlJlZyBlbnVt
ZXJhdG9yR1BSOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmVTbG93
UGF0aDsKKworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6
dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQpPihbJl0gKERhdGFGb3Jt
YXQpIHsKKyAgICAgICAgICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZTsKKyAgICAgICAg
ICAgIGlmIChzdG9yYWdlRWRnZSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLmVtcGxhY2UodGhp
cywgc3RvcmFnZUVkZ2UpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCA0KSk7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9y
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNSkpOworCisgICAgICAgICAgICBHUFJS
ZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7CisgICAgICAgICAgICBpbmRleEdQUiA9IGluZGV4Lmdw
cigpOworICAgICAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAg
ICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAg
ICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIGJvb2wgaGF2ZVN0b3JhZ2Ug
PSAhIXN0b3JhZ2VFZGdlOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VUZW1wb3Jh
cnk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKKyAgICAgICAgICAgIGlmICghaGF2
ZVN0b3JhZ2UpIHsKKyAgICAgICAgICAgICAgICBzdG9yYWdlVGVtcG9yYXJ5ID0gR1BSVGVtcG9y
YXJ5KHRoaXMsIFJldXNlLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BS
ID0gc3RvcmFnZVRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgbm90RmFzdE5hbWVkQ2FzZXM7CisKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgZ2VuZXJhdGUgdGhpcyBjb2RlIGlmIHdlIGtub3cgYmFzZSBpcyBu
b3QgYW4gb2JqZWN0LgorICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbW9kZUdQUiwgVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSkpOworICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgYmFzZSBpcyBhIGNlbGwgaGVy
ZSBzaW5jZSB3ZSB3b24ndCBnZW5lcmF0ZSBOYW1lZE1vZGUgcHJvcGVydGllcyBmb3Igbm9uLW9i
amVjdHMuCisgICAgICAgICAgICAgICAgLy8gVE9ETzogcHV0IEFzc2VydCBoZXJlPworCisgICAg
ICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBJZiB3ZSBrbm93IHRoZXJlJ3Mgb25seSBvbmUgc3RydWN0dXJlIGZvciBiYXNlIHdlIGNh
biBqdXN0IGVtYmVkIGl0IGhlcmUuCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBzY3JhdGNoR1BSKTsKKworICAgICAgICAgICAgICAgIGF1dG8gYmFkU3RydWN0dXJlID0g
bV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5
YmUgd2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHJlcHJlc2VudCBJbmRleGVkK05hbWVk
PworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLm5vZGUo
KSA9PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpLm5vZGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYmFkU3RydWN0dXJlU2xvd1BhdGggPSBiYWRTdHJ1Y3R1cmU7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQoYmFk
U3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAg
ICAgICAgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNl
Q2VsbEdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKworICAgICAgICAgICAgICAg
IGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE90
aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgICAgICAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5u
ZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0
cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhdmVTdG9y
YWdlKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VDZWxsR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdl
R1BSKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRW
YWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBEYXRhRm9y
bWF0SlMpOworICAgICAgICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVseSBvbiBjb21waWxlR2V0
QnlWYWwgdG8gY2FsbCBqc1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMga2luZGEgaGFja3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZvKG5vZGUp
LmpzVmFsdWVSZWdzKCkgPT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9uSW5mbyhub2RlKS5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgaWYgKGJhZFN0cnVjdHVy
ZVNsb3dQYXRoLmlzU2V0KCkpCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoYmFkU3RydWN0dXJlU2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkVudW1lcmF0b3JS
ZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYmFzZUNlbGxHUFIsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BSKSk7CisKKyAgICAgICAg
ZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICB9OworCisgICAgaWYgKGlzQ2VsbChiYXNlRWRn
ZS51c2VLaW5kKCkpKSB7CisgICAgICAgIC8vIFVzZSBtYW51YWwgb3BlcmFuZCBzcGVjdWxhdGlv
biBzaW5jZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQgYSBVc2VLaW5kIG1vcmUgcmVzdHJpY3RpdmUg
dGhhbiBDZWxsVXNlLgorICAgICAgICBzcGVjdWxhdGUobm9kZSwgYmFzZUVkZ2UpOworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2VPcGVyYW5kKHRoaXMs
IGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5vZGUqIG5vZGUsIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAgRWRnZSBiYXNlRWRnZSA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAo
YXV0byBiYXNlUmVncywgR1BSUmVnIGJhc2VDZWxsR1BSKSB7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5TmFtZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
bW9kZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDQpKTsKKworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eU5hbWVSZWdzID0gcHJvcGVydHlO
YW1lLnJlZ3MoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBtb2RlR1BSID0gbW9kZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0
b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5yZWdzKCku
Z3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG9wZXJhdGlvbkNhc2Vz
OworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2UpLm1fdHlwZSAmIH5TcGVj
Q2VsbCkKKyAgICAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZVJlZ3MpKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVy
YXRlIHRoaXMgY29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGEgY2VsbC4KKyAgICAgICAgb3Bl
cmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgbW9kZUdQUiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRN
b2RlKSkpOworCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlQ2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRHUFIpOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIG9wZXJhdGlvbkNhc2Vz
LmxpbmsoJm1faml0KTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKHNsb3dQYXRoRnVuY3Rpb24sIHJlc3VsdC5yZWdzKCksIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBiYXNlUmVncywgcHJvcGVydHlOYW1lUmVncywgaW5kZXhHUFIsIG1vZGVH
UFIpOworICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworCisgICAgICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAg
Z2VuZXJhdGUoYmFzZS5ncHIoKSwgYmFzZS5ncHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJh
c2UucmVncygpLCBiYXNlLmdwcigpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVt
ZXJhdG9ySGFzUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5v
ZGUqIG5vZGUpCit7CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVy
YXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqIG5vZGUpCiB7CiAgICAgc3RkOjpvcHRpb25hbDxH
UFJUZW1wb3Jhcnk+IHN0dWJJbmZvOwpAQCAtMTQ5MzQsMjggKzE1MjM3LDI4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBT
X0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dD
WiBzbG93UGF0aE9wZXJhdGlvbiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVn
LCBHUFJSZWc+KCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0g
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKLSAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CiAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIEFycmF5TW9kZSBtb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCk7CiAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgIGNhc2UgQXJy
YXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgQVNTRVJU
KCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEFT
U0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgo
KSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAor
ICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogCiAg
ICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE0OTgzLDEyICsxNTI4NiwxNCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUs
IFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBB
cnJheTo6RG91YmxlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VD
aGlsZEluZGV4KCkpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAg
ICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCBy
ZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0
T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygp
KQpAQCAtMTUwMTIsMTMgKzE1MzE3LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAg
ICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Cisg
ICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNo
aWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQ
UiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgp
OworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgb3V0T2ZCb3Vu
ZHMpOwpAQCAtMTUwNDcsMTQgKzE1MzU0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAg
ICAgZGVmYXVsdDogewogICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgVHlwZWRBcnJheXMgaW4g
SGFzSW5kZXhlZFByb3BlcnR5IElDCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3Vs
dEdQUikgPSBwcmVmaXgoKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgc2xvd1BhdGhPcGVyYXRpb24sIHJlc3Vs
dEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGluZGV4R1BSKSk7Ci0K
LSAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREaXJlY3RQbmFtZShOb2RlKiBub2RlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDk4Yzc2MTZi
OGZkMmZiZjVjNGRkOGE1NzcxNTA4YWQyNjc5Zjk5ZDEuLjViYjZkZTFiOWVmNmM2NGM3NDRkYTU3
NzU5YWU0NDZjYWE1ODE4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKIAogY2xhc3MgR1BSVGVtcG9yYXJ5OworY2xhc3MgSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnk7CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJhdG9yOwogY2xh
c3MgU3BlY3VsYXRpdmVKSVQ7CkBAIC0yNDYsNiArMjQ3LDggQEAgcHVibGljOgogICAgIH0KICAg
ICBHUFJSZWcgYWxsb2NhdGUoR1BSUmVnIHNwZWNpZmljKQogICAgIHsKKyAgICAgICAgaWYgKHNw
ZWNpZmljID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0ZSgpOwogI2lmIEVO
QUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQogICAgICAgICBtX2ppdC5h
ZGRSZWdpc3RlckFsbG9jYXRpb25BdE9mZnNldChtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRp
ZgpAQCAtMTM0NSwxMiArMTM0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0ZW1wb3Jh
cnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS0+YXJyYXlNb2RlKCkpOwogICAg
IH0KICAgICAKKyAgICAvLyBXZSB1c2UgYSBzY29wZWRMYW1iZGEgdG8gcGxhY2F0ZSByZWdpc3Rl
ciBhbGxvY2F0aW9uIHZhbGlkYXRpb24uCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoTm9kZSos
IGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihE
YXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworCiAgICAgdm9pZCBjb21waWxl
R2V0Q2hhckNvZGVBdChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhO
b2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRnJvbUNoYXJDb2Rl
KE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5v
ZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqLCBjb25zdCBT
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1h
dCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9u
U2NvcGVkQXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1Zh
bHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4
KTsKIAogICAgIHZvaWQgY29tcGlsZUdldFByaXZhdGVOYW1lKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVHZXRQcml2YXRlTmFtZUJ5SWQoTm9kZSopOwpAQCAtMTQyNCwxMiArMTQzMCwxMiBAQCBw
dWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlJc0RldGFjaGVk
SWZPdXRPZkJvdW5kcyhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEpJVENvbXBpbGVyOjpKdW1wIG91
dE9mQm91bmRzKTsKICAgICB2b2lkIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2soTm9kZSosIEdQ
UlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5kZXhHUFIpOwogICAgIHZvaWQgY29tcGlsZUdldFR5cGVk
QXJyYXlCeXRlT2Zmc2V0KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRh
PHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVk
Rm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFy
cmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7
Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiwgVHlwZWRB
cnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9k
ZSosIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsK
ICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2Rl
KiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+
KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxl
UHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGls
ZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5
bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CkBAIC0xNDU4LDcgKzE0NjQs
NyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgRWRnZSB2YWx1ZVVzZSk7CiAgICAgdm9pZCBs
b2FkRnJvbUludFR5cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJl
ZywgR1BSUmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgc2V0SW50VHlw
ZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlUeXBl
LCBib29sIGNhblNwZWN1bGF0ZSk7CisgICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3Vs
dChOb2RlKiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5cGUsIGJvb2wgY2Fu
U3BlY3VsYXRlLCBib29sIHNob3VsZEJveCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNz
VHlwZT4gdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVnLCBSZWdpc3RlcmVkU3Ry
dWN0dXJlLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qm
LCBzaXplX3QsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0
aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwpAQCAt
MTUyOCw2ICsxNTM0LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxl
U3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQ
cm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKik7CisK
KyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKik7
CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoTm9kZSopOworICAgIHZvaWQg
Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqKTsKKyAgICB2b2lk
IGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSopOworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFNsb3dQYXRoRnVuY3Rpb25UeXBlPgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9w
ZXJ0eShOb2RlKiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgIHZvaWQgY29tcGlsZUVudW1l
cmF0b3JJbkJ5VmFsKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHkoTm9kZSopOworCiAgICAgdm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVQdXRCeUlkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRGly
ZWN0KE5vZGUqKTsKQEAgLTE1NjgsNyArMTU4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBp
bGVDYWxsTnVtYmVyQ29uc3RydWN0b3IoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1NoYWRv
d0NoaWNrZW5Qcm9sb2d1ZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hpY2tl
blRhaWwoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiwg
U19KSVRPcGVyYXRpb25fR0NaKTsKKyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
Tm9kZSosIFNfSklUT3BlcmF0aW9uX0dDWiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
R1BSUmVnLCBHUFJSZWc+KCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZUV4dHJhY3RDYXRj
aExvY2FsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDbGVhckNhdGNoTG9jYWxzKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVQcm9maWxlVHlwZShOb2RlKik7CkBAIC0xOTM3LDYgKzE5NTQsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MoZ3ByKCkpOwogICAg
IH0KKyAgICBKU1ZhbHVlUmVncyByZWdzKCkgeyByZXR1cm4ganNWYWx1ZVJlZ3MoKTsgfQogI2Vs
aWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBib29sIGlzRG91YmxlKCkgeyByZXR1cm4gbV9pc0Rv
dWJsZTsgfQogCkBAIC0xOTY1LDcgKzE5ODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBK
U1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5bG9hZEdQUigpKTsKICAgICB9CiAKLSAgICBHUFJSZWcg
Z3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoKQorICAgIEdQUlJlZyBncHIoV2hpY2hWYWx1ZVdvcmQg
d2hpY2ggPSBQYXlsb2FkV29yZCkKICAgICB7CiAgICAgICAgIHJldHVybiBqc1ZhbHVlUmVncygp
Lmdwcih3aGljaCk7CiAgICAgfQpAQCAtMjAwMywyMSArMjAyMSwyMCBAQCBwcml2YXRlOgogY2xh
c3MgU3RvcmFnZU9wZXJhbmQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgorICAgIFN0b3JhZ2VPcGVyYW5kKCkgPSBkZWZhdWx0OworCiAgICAgZXhwbGljaXQgU3RvcmFn
ZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQogICAgICAgICA6IG1faml0
KGppdCkKICAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJ
bnZhbGlkR1BSUmVnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNT
RVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25v
d25DZWxsVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKLSAgICAgICAg
ICAgIGdwcigpOworICAgICAgICBlbXBsYWNlKGppdCwgZWRnZSk7CiAgICAgfQogICAgIAogICAg
IH5TdG9yYWdlT3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQg
IT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQp
OworICAgICAgICBpZiAobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KICAgICAKICAgICBFZGdl
IGVkZ2UoKSBjb25zdApAQCAtMjAzNiw2ICsyMDUzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAgICAgIHJl
dHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CisKKyAgICB2b2lkIGVtcGxhY2UoU3BlY3VsYXRp
dmVKSVQqIGppdCwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbV9qaXQgPSBqaXQ7CisgICAg
ICAgIG1fZWRnZSA9IGVkZ2U7CisgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCA9PSBJbnZh
bGlkR1BSUmVnKTsKKyAgICAgICAgQVNTRVJUKG1faml0KTsKKyAgICAgICAgQVNTRVJUKGVkZ2Uu
dXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNl
KTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKKyAgICAgICAgICAgIGdwcigp
OworICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewpAQCAtMjA0Myw5ICsyMDcxLDkg
QEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU3BlY3VsYXRpdmVKSVQqIG1f
aml0OworICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdCB7IG51bGxwdHIgfTsKICAgICBFZGdlIG1f
ZWRnZTsKLSAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CisgICAgR1BSUmVnIG1fZ3ByT3JJbnZh
bGlkIHsgSW52YWxpZEdQUlJlZyB9OwogfTsKIAogCkBAIC0yMTM0LDExICsyMTYyLDE5IEBAIGNs
YXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHsKIHB1YmxpYzoKICAgICBKU1ZhbHVlUmVnc1RlbXBv
cmFyeSgpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKik7CisgICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBHUFJSZWcgc3BlY2lmaWNQYXls
b2FkKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCwgR1BSUmVnIHNwZWNpZmljVGFn
KTsKKyNlbmRpZgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSlNWYWx1ZVJlZ3NUZW1w
b3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdv
cmQgcmVzdWx0UmVnV29yZCA9IFBheWxvYWRXb3JkKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFy
eShTcGVjdWxhdGl2ZUpJVCosIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYpOwogICAgIH5KU1Zh
bHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7
IHJldHVybiAhIXJlZ3MoKTsgfQorCisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmIG9wZXJhdG9y
PShKU1ZhbHVlUmVnc1RlbXBvcmFyeSYmKSA9IGRlZmF1bHQ7CisKICAgICBKU1ZhbHVlUmVncyBy
ZWdzKCk7CiAKIHByaXZhdGU6CkBAIC0yMTUwLDYgKzIxODYsMjYgQEAgcHJpdmF0ZToKICNlbmRp
ZgogfTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorSlNWYWx1
ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQs
IFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCkKKyAgICA6IG1fZ3ByKGppdCwg
UmV1c2UsIG9wZXJhbmQpCit7Cit9CisjZWxzZQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFs
dWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0
LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKK3sKKyAg
ICBpZiAocmVzdWx0V29yZCA9PSBQYXlsb2FkV29yZCkgeworICAgICAgICBtX3BheWxvYWRHUFIg
PSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7CisgICAgICAgIG1fdGFnR1BSID0g
R1BSVGVtcG9yYXJ5KGppdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0g
R1BSVGVtcG9yYXJ5KGppdCk7CisgICAgICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwg
UmV1c2UsIG9wZXJhbmQpOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFzcyBGUFJUZW1wb3Jhcnkg
ewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggMmVhOTUxNzdi
OWJmNDU2ODcxOTViYTNkY2FiYWZiNGFlZGU3MDZkNS4uZTNlYmIxMDAyODRhOTgwODA2NWI3ODZm
MTYyNmJiYTM2NDc5NWYyNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0yMjQ1LDYgKzIyNDUsMzcwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8
c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRG
b3JtYXQpPiYgcHJlZml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheTo6QW55VHlwZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6CisgICAgY2FzZSBB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVk
OgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2Rl
IHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Cisg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3By
KCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUo
cmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKKyAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQp
LCByZXN1bHRSZWdzLmdwcigpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6QmlnSW50NjRB
cnJheToKKyAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKKyAgICBjYXNlIEFycmF5OjpH
ZW5lcmljOiB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5v
ZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VL
aW5kKCkgPT0gT2JqZWN0VXNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3lt
Ym9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdp
dGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBz
dGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWws
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0
eUdQUik7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwor
CisgICAgICAgIEdQUlRlbXBvcmFyeSBzdHViSW5mbzsKKyAgICAgICAgR1BSUmVnIHN0dWJJbmZv
R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICBzdHViSW5mbyA9IEdQUlRlbXBvcmFyeSh0aGlz
KTsKKyAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8uZ3ByKCk7CisgICAgICAgIH0K
KworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRs
aW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9z
dGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2Vs
bCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChi
YXNlR1BSKSk7CisKKyAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAg
ICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNp
dGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3Mo
cmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgZ2VuLmdl
bmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkRGR0pJVCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93
UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9y
PiBzbG93UGF0aDsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdK
SVQpKSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAorICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRP
ZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAgICAg
ICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBi
YXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihj
b2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgIH0KKworICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRo
LmdldCgpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkp
OworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewor
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAg
ICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZXN1bHRSZWdzLmdwcigpOworCisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChu
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5
KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBub3RI
b2xlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1Zh
bHVlUmVncygpLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVt
cHR5KHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQsIG5vZGUsIGZvcm1hdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCByZXN1bHRSZWcpOworCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0LmJy
YW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFs
dWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhh
biwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgfQorCisKKyAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRSZWcsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5
OjpEb3VibGU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkg
eworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVz
dWx0LmZwcigpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAg
ICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdz
LCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXREb3VibGUpOworCisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0KSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZk5hTihy
ZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKSB7Cisg
ICAgICAgICAgICAgICAgYm94RG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVncyk7CisgICAgICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91Ymxl
ICYmICFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVn
LCBub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzU2FuZUNoYWluKCkgJiYgIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0Fz
T3RoZXIpOworCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAg
ICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgocmVzdWx0SXNVbmJveGVkID8gRGF0YUZvcm1h
dERvdWJsZSA6IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisKKyAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRl
bXBSZWcpOworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVD
aGFpbigpKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4g
PSBQTmFOOworICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigm
TmFOKSwgdGVtcFJlZyk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVS
ZXN1bHQodGVtcFJlZywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAg
ICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0
aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDApKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWdzLmdwcigpKTsK
KyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5h
Tih0ZW1wUmVnKSk7CisgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVncy5n
cHIoKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3Mu
Z3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkFycmF5
U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERh
dGFGb3JtYXRKUyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0UmVncy5n
cHIoKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKworICAgICAgICAgICAgbV9q
aXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21I
b2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdEdQ
UikpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9
IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
UmVncy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0
UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsK
KworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6
OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVu
dHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6U2NvcGVk
QXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2Rl
LCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Cisg
ICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5Ogor
ICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVk
QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWlu
dDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6
OkZsb2F0NjRBcnJheTogeworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJy
YXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZp
eCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgfSB9Cit9CisKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9w
KCk7CkBAIC0yNzEyLDcgKzMwNzYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6IHsKICAgICAgICAgLy8gUmVsaWVz
IG9uIFN0cmluZ0NoYXJBdCBub2RlIGhhdmluZyBzYW1lIGJhc2ljIGxheW91dCBhcyBHZXRCeVZh
bAotICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhu
b2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0
YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0
KSB7CisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAg
ICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5yZWdzKCksIHByZWZlcnJlZEZvcm1h
dCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNzQ1LDM0NSAr
MzExNCwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9k
ZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgotICAgICAg
ICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5n
QXJndW1lbnRzOgotICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgot
ICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgICAgICAgICAgREZHX0NSQVNIKG1f
aml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBp
bmRleCk7Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAgICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1c2Uo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2UoKTsK
LQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRB
cnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFs
LmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkdldEJ5VmFsLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsK
LSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIFJldXNlLCBwcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQ
UiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkRGR0pJVCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSW5mby5lbXBsYWNlKHRoaXMp
OwotICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8tPmdwcigpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGUo
bm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRl
RXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNp
emUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNl
ZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7Ci0KLSAgICAgICAgICAgIEpJ
VEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2so
KSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1
YkluZm9HUFIpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNl
IGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBl
KFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAgICAg
ICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKLSAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0KLSAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7Ci0gICAgICAg
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAgICAg
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAotICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3Bl
cmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAgICAg
ICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
c2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotCi0gICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGln
dW91czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkg
ewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwot
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0g
ICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0gICAg
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwg
cmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOwotICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShy
ZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAg
ICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRh
Rm9ybWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRS
ZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKLQotICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsKLSAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJl
c3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
SWZFbXB0eShyZXN1bHRSZWcpKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkp
IHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
LQotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwot
ICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAg
ICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwotCi0gICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0
ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGlmICgh
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKQotICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0
ciwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgZG91Ymxl
UmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlN
b2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVC
eXRlY29kZVVzZXNBc090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3RkOjpvcHRp
b25hbDxHUFJSZWc+IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNVbmJveGVk
KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0UmVnID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0
ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
cmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0
Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4s
IHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAg
ICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAgICAgICAg
ICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAg
ICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0
ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAqcmVzdWx0
UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxw
dHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5v
ZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAg
ICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJlZywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCks
IG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5
VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0
PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRG
b3JtYXQpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAg
ICBzd2l0Y2ggKHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0
RG91YmxlOgogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogewor
ICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgJiBEYXRhRm9ybWF0SlMgfHwg
cHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRJbnQzMik7CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0
UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgICAg
ICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVj
dG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOwotICAgIAotICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAot
ICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFy
Z3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJ
bnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5
OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCku
dHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOwor
ICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU4MCw3ICszNjI0LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0g
ZmFsc2U7Ci0gICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdEdQ
UiwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQm94
ID0gZmFsc2U7CisgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTUyOTAsMTEgKzUzMzUsMTkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpOworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGlu
ZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJS
ZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBv
cGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisK
KyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQ
UlJlZz4oKT4oWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluZGV4LmdwcigpLCByZXN1bHQu
Z3ByKCkpOyB9KSk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6
IHsKQEAgLTUzMTQsNiArNTM2Nyw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFj
dEluZGV4OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0
ZVByb3BlcnR5TmFtZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVy
YXRvckdldEJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwobm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsK
KyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTogeworICAgICAgICBj
b21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKICAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CiAgICAgICAgIGNvbXBpbGVQcm9maWxlVHlw
ZShub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAppbmRleCAxMTc2ZDNlN2FmMjgz
MzJiMDMwNzQxYjRkOWM0MGYwYmVmMWQwMzhiLi41ZjUxZjIyNTEwNGY5YmE1MjI2OThkZDAzNjc1
YmRkNWJlMjc1ZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5
cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKQEAgLTI3Myw2ICsyNzMsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAg
ICAgICAgICAgICBjYXNlIE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgICAgICAg
ICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgICAgICAgICAgICAgY2FzZSBFbnVtZXJhdG9y
R2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAg
ICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CkBA
IC0zNTIsNiArMzUzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKICAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAg
ICAgICAgICAgICAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgICAgICAgICAgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAg
ICAgICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RI
ZWFwUmVwb3NpdG9yeS5oCmluZGV4IDJlMmYwN2RmYzdlOGMxM2RkYjBlZGQ1YTJkMDdhNWQ4NzJl
MTc5MDguLjllZDg3MTMzZjc3MjMwZTBlMWJkNDQ1ZjMwNjIzNDM3ZmNkNjM0MDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oCkBAIC0xMTQsNiArMTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
ICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRHZW5lcmljUHJvcGVydHlJbmRl
eCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNl
dCgpKSBcCiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVy
dHlJbmRleE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2lu
ZGV4TGVuZ3RoLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQo
KSkgXAorICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9tb2RlU2V0LCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0
cmluZ19mbGFncywgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZsYWdzKCkpIFwKICAgICBtYWNybyhK
U1JvcGVTdHJpbmdfbGVuZ3RoLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAg
ICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXIwLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXIw
KCkpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApp
bmRleCBhMWE1ZmQyNDRjZjIxMTAzMjY0MTk3YTc2YWUzMGM3ZjYwZjc5ZTY0Li42ZTVkMTBkNDMz
N2M3YTNkYTYxMjNiMzUwZTY4ZTI3OWYxMGI1YjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC0yOTgsNiArMjk4LDEzIEBAIGlubGluZSBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0RW51bWVy
YXRvclN0cnVjdHVyZVBuYW1lOgogICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToK
ICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUlu
ZGV4QW5kTW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgIGNhc2Ug
RW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAg
ICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2Fz
ZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKaW5kZXggMWMyZGQ5NTU1NGIyZjQ1ZGY5NTE0ZGM4NzE0MWNlM2YyZDA2
M2RkYS4uYjZjM2ZjM2JmMDhhZTNhYzRmYjgwZjlmZTQxNWQzNzUyMTk5ZGU0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTAyLDYgKzEw
Miw4IEBACiAjaW5jbHVkZSA8d3RmL1JlY3Vyc2FibGVMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYv
U3RkVW5vcmRlcmVkU2V0Lmg+CiAKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKKwogI3VuZGVm
IFJFTEVBU0VfQVNTRVJUCiAjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBc
CiAgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBcCkBAIC0xNTU4LDYgKzE1NjAsMjcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgICAgICAgICAgY29tcGlsZVRvSW5k
ZXhTdHJpbmcoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51
bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4
dEV4dHJhY3RNb2RlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
TmV4dFVwZGF0ZVByb3BlcnR5TmFtZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JHZXRC
eVZhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckluQnlWYWwoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAg
ICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgICAgICAgICAgY29t
cGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUw
MjAsNyArNTA0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHdlIGRvbWluYXRlIHRoZW0uCiAg
ICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKCkKKyAgICBMVmFsdWUgY29tcGls
ZUdldEJ5VmFsSW1wbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwogICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CkBAIC01MDQ3LDggKzUwNzAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFs
aXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgIGlm
IChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cykKICAgICAg
ICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBmYXN0Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01MDgwLDggKzUxMDIsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8g
a2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICBpZiAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAgICAgICAgICAgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jl
c3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpEb3Vi
bGU6IHsKQEAgLTUxMDAsOCArNTEyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQocmVzdWx0LCByZXN1bHQpKTsK
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIHJlc3VsdElzVW5ib3hlZCA9IG1fbm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobV9ub2RlLT5mbGFn
cygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOwpAQCAtNTE0MSwxOCArNTE2MiwxNiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIGlmIChyZXN1bHRJc1VuYm94ZWQpCi0gICAg
ICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShEb3VibGUsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoRG91YmxlLCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0KTsKKworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgZmFz
dFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpV
bmRlY2lkZWQ6IHsKICAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CiAKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdXRPZkJv
dW5kcywgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lmxlc3NUaGFuKGluZGV4LCBtX291dC5pbnQz
Mlplcm8pKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVl
OjpWYWx1ZVVuZGVmaW5lZCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7CkBA
IC01MTY5LDggKzUxODgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShP
dXRPZkJvdW5kcywgbm9WYWx1ZSgpLCBudWxscHRyLCBpc091dE9mQm91bmRzKTsKICAgICAgICAg
ICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKICAgICAgICAg
ICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCkpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQubG9h
ZDY0KGFkZHJlc3MpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LmxvYWQ2NChhZGRyZXNzKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTE5Miw4ICs1
MjEwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0g
ICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jl
c3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBo
aShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKQEAgLTUyNDYsOCArNTI2
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIG5hbWVkUmVz
dWx0LCBvdmVyZmxvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93UmVzdWx0KTsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6
CkBAIC01MjU2LDI0ICs1MjcyLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhtX25vZGUpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSku
dXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SlNW
YWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0
cmluZywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3RyaW5n
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3RyaW5nKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9s
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTeW1ib2wobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMCkpLCBsb3dTeW1ib2wobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAg
ICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWwsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDApKSwgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MSkpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX25vZGU7CkBAIC01MzczLDggKzUzODYsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIHNldEpTVmFs
dWUocGF0Y2hwb2ludCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
cGF0Y2hwb2ludDsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZToKQEAgLTUzOTAsOCArNTQwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm82NChyZXN1
bHQpKTsKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBr
ZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBlbnN1cmVTdGls
bEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQu
bmV3QmxvY2soKTsKQEAgLTU0MTcsMTMgKzU0MjgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgLy8g
V2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxp
dmUuCiAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBm
YXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICAgICAgY29tcGlsZVN0cmluZ0NoYXJBdCgp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVTdHJpbmdD
aGFyQXRJbXBsKCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpJbnQ4QXJyYXk6CkBAIC01NDQ4LDkgKzU0NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG9hZEZyb21JbnRUeXBlZEFycmF5KHBvaW50ZXIsIHR5
cGUpOwogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBz
aW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYm9v
bCBjYW5TcGVjdWxhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzZXRJbnRUeXBlZEFy
cmF5TG9hZFJlc3VsdChyZXN1bHQsIHR5cGUsIGNhblNwZWN1bGF0ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNGbG9h
dCh0eXBlKSk7CkBAIC01NDY5LDggKzU0NzYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNpbmNlIHRo
YXQga2VlcHMgc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCkBAIC01NDgwLDggKzU0ODYsMjQgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBBcnJh
eTo6VW5wcm9maWxlZDoKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgYXJyYXkgdHlwZSIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisgICAgeworICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBUeXBlZEFycmF5VHlw
ZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBp
ZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0
ZSA9IHRydWU7CisgICAgICAgICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChyZXN1bHQs
IHR5cGUsIGNhblNwZWN1bGF0ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwor
ICAgICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgc2V0RG91
YmxlKHJlc3VsdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkKQEAg
LTg1NzEsNyArODU5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KEludDY0LCBmYXN0UmVzdWx0LCBlbXB0eVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQXQoKQorICAgIExWYWx1ZSBjb21waWxlU3Ry
aW5nQ2hhckF0SW1wbCgpCiAgICAgewogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd1N0cmluZyht
X2dyYXBoLmNoaWxkKG1fbm9kZSwgMCkpOwogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQz
MihtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSkpOwpAQCAtODY3OSw3ICs4NzAxLDEyIEBAIHByaXZh
dGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAg
ICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0b3Jh
Z2UgYWxpdmUuCiAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgcmVzdWx0cykpOworICAgICAgICByZXR1cm4gbV9v
dXQucGhpKEludDY0LCByZXN1bHRzKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVTdHJpbmdD
aGFyQXQoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShjb21waWxlU3RyaW5nQ2hhckF0SW1w
bCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckNvZGVBdCgpCkBA
IC0xMjkwNiwxNyArMTI5MzMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgZW1pdFN0b3JlQmFycmll
cihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX25vZGUtPm9wKCkgPT0gRmVuY2VkU3RvcmVC
YXJyaWVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbikKKyAgICBMVmFsdWUgY29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwoTFZhbHVlIGluZGV4LCBTX0pJVE9wZXJhdGlvbl9HQ1og
c2xvd1BhdGhPcGVyYXRpb24pCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDAp
KTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEpKTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBtX25vZGUtPmFycmF5TW9kZSgp
OwogCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsK
LSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkp
KTsKIAogICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1vZGUudHlwZSgp
ID09IEFycmF5OjpJbnQzMiA/CiAgICAgICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQ
cm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM7CkBAIC0xMjk1
MSwxMSArMTI5NzcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xl
UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgTFZhbHVl
IHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Cisg
ICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5pbmRleGVkRG91
YmxlUHJvcGVydGllczsKICAgICAgICAgICAgIApAQCAtMTI5ODksMTIgKzEzMDE0LDExIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwg
c2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgTFZhbHVl
IHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Cisg
ICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogCiAgICAgICAgICAgICBM
QmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTMwMjYsMTcgKzEz
MDUwLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwg
c2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbV9v
dXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAK
ICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3RaZXJv
NjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2Jq
ZWN0KSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKTsKICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFNfSklUT3Bl
cmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbikKKyAgICB7CisgICAgICAgIExWYWx1ZSBpbmRl
eCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIHNl
dEJvb2xlYW4oY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwoaW5kZXgsIHNsb3dQYXRoT3Bl
cmF0aW9uKSk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5
KCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CkBAIC0xMzIxNyw2ICsxMzI0NSwy
NDcgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25Ub0lu
ZGV4U3RyaW5nLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBpbmRleCkpOwogICAgIH0KKwor
ICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKCkKKyAgICB7
CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIExWYWx1ZSBtb2Rl
ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZh
bHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7
CisKKyAgICAgICAgaWYgKG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJh
ZENhY2hlLCBub1ZhbHVlKCksIG1fbm9kZSwgbV9vdXQubm90WmVybzMyKG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRHZW5lcmljUHJv
cGVydHlJbmRleCkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrSGFzUHJvcGVydHkg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5pdGlh
bEluZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGluaXRpYWxJbmRleEZvckhhc1Byb3BlcnR5ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihtb2RlKSwgdW5zdXJlKGNoZWNrSGFz
UHJvcGVydHkpLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBMVmFsdWUgaW5kZXhQaGkgPSBtX291dC5waGko
SW50MzIsIGluaXRpYWxJbmRleCk7CisgICAgICAgICAgICBMVmFsdWUgaW5jcmVtZW50ZWRJbmRl
eCA9IG1fb3V0LmFkZChpbmRleFBoaSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgaW5jcmVtZW50ZWRJbmRleFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbmNyZW1l
bnRlZEluZGV4KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZpbmFsSW5jcmVtZW50ZWRJ
bmRleCA9IG1fb3V0LmFuY2hvcihpbmNyZW1lbnRlZEluZGV4KTsKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5sZXNzVGhhbihpbmNyZW1lbnRlZEluZGV4LCBtX291dC5sb2FkMzIoZW51
bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgpKSwg
dW5zdXJlKGNoZWNrSGFzUHJvcGVydHkpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSGFzUHJvcGVydHkpOworICAgICAgICAgICAgTFZh
bHVlIHByb3BlcnR5SW5kZXggPSBtX291dC5waGkoSW50MzIsIGluaXRpYWxJbmRleEZvckhhc1By
b3BlcnR5LCBpbmNyZW1lbnRlZEluZGV4UmVzdWx0KTsKKyAgICAgICAgICAgIG1fb3V0LmFkZElu
Y29taW5nVG9QaGkoaW5kZXhQaGksIG1fb3V0LmFuY2hvcihwcm9wZXJ0eUluZGV4KSk7CisgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmaW5hbFByb3BlcnR5SW5kZXggPSBtX291dC5hbmNob3Io
cHJvcGVydHlJbmRleCk7CisgICAgICAgICAgICBMVmFsdWUgaGFzUHJvcGVydHkgPSBjb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5SW1wbChwcm9wZXJ0eUluZGV4LCBvcGVyYXRpb25IYXNFbnVtZXJh
YmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChoYXNQcm9wZXJ0
eSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpbmNyZW1lbnQpKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIExWYWx1ZSBmaW5h
bEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBmaW5hbEluY3JlbWVudGVkSW5kZXgsIGZpbmFsUHJv
cGVydHlJbmRleCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmJpdE9yKG1fb3V0Lnpl
cm9FeHQoZmluYWxJbmRleCwgSW50NjQpLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Ok51bWJl
clRhZyB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwor
ICAgICAgICBpZiAobV9ub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkg
eworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKGJhc2VFZGdlKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdEVxdWFs
KG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksIG1fb3V0Lmxv
YWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRT
dHJ1Y3R1cmVJRCkpKTsKKworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBub1ZhbHVl
KCksIG1fbm9kZSwgbV9vdXQubm90RXF1YWwobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVh
cHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQpLCBtX291dC5jb25zdEludDMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOworCisgICAgICAgICAgICBMQmFz
aWNCbG9jayBpbmNyZW1lbnQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgaW5pdGlhbEluZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihtb2RlKSwgdW5zdXJlKGNvbnRpbnVhdGlv
biksIHVuc3VyZShpbmNyZW1lbnQpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5j
cmVtZW50KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3JlbWVudGVkSW5kZXggPSBt
X291dC5hbmNob3IobV9vdXQuYWRkKGluZGV4LCBtX291dC5pbnQzMk9uZSkpOworICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24pOworICAgICAgICAgICAgaW5kZXggPSBtX291dC5waGkoSW50MzIsIGlu
aXRpYWxJbmRleCwgaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmJpdE9yKG1fb3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgbV9vdXQuY29uc3RJbnQ2NChK
U1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpOYW1lZE1vZGUpIDw8IDMyKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCwg
bW9kZSwgZW51bWVyYXRvcikpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIHNldEludDMyKG1fb3V0LmNhc3RU
b0ludDMyKGJveGVkUGFpcikpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGJveGVkUGFpciA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgTFZhbHVlIGhpZ2hCaXRzID0gbV9v
dXQuY2FzdFRvSW50MzIobV9vdXQubFNocihib3hlZFBhaXIsIG1fb3V0LmNvbnN0SW50MzIoMzIp
KSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChoaWdoQml0cywgbV9vdXQuY29uc3RJ
bnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBoYXZlIGEgbWV0aG9kIG9m
IHZhbHVlIHJlY292ZXJ5IGZvciB0aGlzIG5vZGUgc2luY2UgaXQncyAiZWZmZWN0IiBmcmVlIGJ1
dCBhbHdheXMgbGl2ZSBpbiBieXRlY29kZS4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZSgpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZh
bHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0
b3IpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoKQorICAg
IHsKKyAgICAgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KTsKKyAgICAgICAgRWRnZSBwcm9wZXJ0eU5hbWVFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEpOworICAgICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDIpOworICAgICAgICBFZGdlIGluZGV4RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAzKTsKKworICAgICAgICBMVmFsdWUgYmFzZSA9IERGRzo6aXNDZWxsKGJhc2VF
ZGdlLnVzZUtpbmQoKSkgPyBsb3dDZWxsKGJhc2VFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24pIDogbG93SlNWYWx1ZShiYXNlRWRnZSk7CisKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBz
dG9yYWdlRWRnZSA/IGxvd1N0b3JhZ2Uoc3RvcmFnZUVkZ2UpIDogbnVsbHB0cjsKKyAgICAgICAg
Ly8gV2UgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgcHJvcGVydHlOYW1lIGhlcmUgaW4gY2FzZSBp
dCByZXF1aXJlcyBib3hpbmcgc2luY2UgdGhlIElDIHBhdGggd29uJ3QgZG9taW5hdGUgc3Vic2Vx
dWVudCB1c2VzIGluIHN1YnNlcXVlbnQgbm9kZXMuCisgICAgICAgIC8vIElmIGl0J3MgYW4gSW50
MzIgYW5kIHdlIHVzZSBpdCBhcyBzdWNoIHRoaXMgYm94aW5nIHdpbGwgYmUgRENFJ2QgYnkgYjMg
bGF0ZXIgYW55d2F5LgorICAgICAgICBsb3dKU1ZhbHVlKHByb3BlcnR5TmFtZUVkZ2UsIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQz
MihpbmRleEVkZ2UpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCA0KSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2Vs
bChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNSkpOworCisgICAgICAgIExCYXNpY0Jsb2Nr
IGNoZWNrU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBpbmxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBnZW5lcmljSUNCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAg
ICAgICAgTFZhbHVlIGlzTm90TmFtZWQgPSBtX291dC50ZXN0Tm9uWmVybzMyKG1vZGUsIG1fb3V0
LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KGlzTm90TmFtZWQsIHVuc3VyZShnZW5lcmljSUNCbG9jayksIHVuc3VyZShjaGVja1N0cnVjdHVy
ZUJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tTdHJ1Y3R1cmVCbG9jayk7
CisgICAgICAgIC8vIFRPRE8gY2hlY2sgY2VsbD8KKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlE
OworICAgICAgICBhdXRvIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZS5ub2Rl
KCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSkK
KyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlk
KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQz
MihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisKKyAgICAgICAgTFZhbHVlIGhh
c0VudW1lcmF0b3JTdHJ1Y3R1cmUgPSBtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQubG9h
ZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0
cnVjdHVyZUlEKSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYmFkU3RydWN0dXJlU2xvd1Bh
dGhSZXN1bHQ7CisgICAgICAgIGlmIChpbmRleEVkZ2Uubm9kZSgpID09IHByb3BlcnR5TmFtZUVk
Z2Uubm9kZSgpKSB7CisgICAgICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOworICAgICAgICAgICAg
TEJhc2ljQmxvY2sgYmFkU3RydWN0dXJlU2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKGhhc0VudW1lcmF0b3JTdHJ1Y3R1cmUsIHVzdWFsbHkoY2hl
Y2tJbmxpbmVPck91dE9mTGluZUJsb2NrKSwgcmFyZWx5KGdlbmVyaWNJQ0Jsb2NrKSk7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJhZFN0cnVjdHVyZVNsb3dQYXRoKTsKKyAgICAgICAg
ICAgIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBlbnVtZXJhdG9yKSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGhhc0VudW1lcmF0b3JTdHJ1Y3R1cmUsIHVzdWFs
bHkoY2hlY2tJbmxpbmVPck91dE9mTGluZUJsb2NrKSwgcmFyZWx5KGdlbmVyaWNJQ0Jsb2NrKSk7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tJbmxpbmVPck91dE9mTGluZUJsb2NrKTsK
KyAgICAgICAgTFZhbHVlIGlubGluZUNhcGFjaXR5ID0gbnVsbHB0cjsKKyAgICAgICAgYm9vbCBo
YXNOb091dE9mTGluZVByb3BlcnRpZXMgPSBmYWxzZTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZSkg
eworICAgICAgICAgICAgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gIXN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQuY29u
c3RJbnQzMihzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICB9CisgICAgICAg
IGlmICghaW5saW5lQ2FwYWNpdHkpCisgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0
LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNo
ZWRJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIExWYWx1ZSBpc0lubGluZSA9IGhhc05vT3V0T2ZM
aW5lUHJvcGVydGllcyA/IG1fb3V0LmludDMyT25lIDogbV9vdXQuYmVsb3coaW5kZXgsIGlubGlu
ZUNhcGFjaXR5KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzSW5saW5lLCB1bnN1cmUoaW5saW5l
TG9hZEJsb2NrKSwgdW5zdXJlKG91dE9mTGluZUxvYWRCbG9jaykpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGlubGluZUxvYWRCbG9jayk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlubGlu
ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5i
YXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksCisgICAgICAgICAgICAg
ICAgYmFzZSwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBTY2FsZUVpZ2h0LCBKU09iamVj
dDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkQmxvY2spOwor
ICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0
cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisKKyAgICAgICAgTFZhbHVlIHJl
YWxJbmRleCA9IG1fb3V0LnNpZ25FeHQzMlRvNjQoCisgICAgICAgICAgICBtX291dC5uZWcobV9v
dXQuc3ViKGluZGV4LCBpbmxpbmVDYXBhY2l0eSkpKTsKKyAgICAgICAgaW50MzJfdCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShm
aXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgb3V0T2ZMaW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlO
dW1iZXIoKSwgc3RvcmFnZSwgcmVhbEluZGV4LCBTY2FsZUVpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhnZW5lcmljSUNCbG9jayk7CisgICAgICAgIExWYWx1ZSBnZW5lcmljUmVz
dWx0ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBl
ID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJ
bnQodHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNT
aWduZWQodHlwZSkpCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveEludDMyKGdl
bmVyaWNSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdlbmVyaWNS
ZXN1bHQgPSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChnZW5lcmljUmVzdWx0LT50eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgZ2Vu
ZXJpY1Jlc3VsdCA9IGJveERvdWJsZShnZW5lcmljUmVzdWx0KTsKKworICAgICAgICBWYWx1ZUZy
b21CbG9jayBnZW5lcmljSUNSZXN1bHQgPSBtX291dC5hbmNob3IoZ2VuZXJpY1Jlc3VsdCk7Cisg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24pOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKEludDY0
LCBnZW5lcmljSUNSZXN1bHQsIG91dE9mTGluZVJlc3VsdCwgaW5saW5lUmVzdWx0KTsKKyAgICAg
ICAgaWYgKGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0KQorICAgICAgICAgICAgbV9vdXQuYWRk
SW5jb21pbmdUb1BoaShyZXN1bHQsIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNs
b3dQYXRoRnVuY3Rpb25UeXBlPgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0
eShTbG93UGF0aEZ1bmN0aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9uKQorICAgIHsKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBiYXNlRWRnZS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSA/IGxvd0NlbGwoYmFzZUVkZ2UpIDogbG93SlNWYWx1ZShiYXNlRWRnZSk7
CisgICAgICAgIExWYWx1ZSBwcm9wZXJ0eU5hbWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50
MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKyAgICAgICAgTFZhbHVlIGVudW1l
cmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KSk7CisKKyAgICAg
ICAgTEJhc2ljQmxvY2sgaXNOYW1lZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBtYXRjaGVzU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBvcGVyYXRpb25CbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpLCB1bnN1cmUoaXNOYW1lZEJsb2Nr
KSwgdW5zdXJlKG9wZXJhdGlvbkJsb2NrKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzTmFt
ZWRCbG9jayk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBl
KGJhc2VFZGdlKSksIHVuc3VyZShpc0NlbGxCbG9jayksIHVuc3VyZShvcGVyYXRpb25CbG9jaykp
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzQ2VsbEJsb2NrKTsKKyAgICAgICAgTFZhbHVl
IHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291
dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2Fj
aGVkU3RydWN0dXJlSUQpKSwKKyAgICAgICAgICAgIHVzdWFsbHkobWF0Y2hlc1N0cnVjdHVyZUJs
b2NrKSwgcmFyZWx5KG9wZXJhdGlvbkJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bWF0Y2hlc1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmFtZWRSZXN1
bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3BlcmF0aW9uQmxvY2sp
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3Io
dW5ib3hCb29sZWFuKHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhGdW5jdGlvbiwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgbW9kZSkpKTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBuYW1lZFJl
c3VsdCwgb3BlcmF0aW9uUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRW51bWVy
YXRvckluQnlWYWwoKQorICAgIHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0
eShvcGVyYXRpb25FbnVtZXJhdG9ySW5CeVZhbCk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxl
RW51bWVyYXRvckhhc093blByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJh
dG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5KTsKKyAgICB9
CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQogICAgIHsK
QEAgLTE3MzQ0LDcgKzE3NjEzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldEludDMyKHJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgaWYgKG1fbm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsK
ICAgICAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1
ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihyZXN1bHQsIG1fb3V0LmludDMyWmVybykpOwpA
QCAtMjAyODMsNiArMjA1NTIsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKICAgICB9CiAKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGludHMgcmlnaHQgbm93
LgorICAgIFBhdGNocG9pbnRWYWx1ZSogZGF0YUxvZ0ZvckRlYnVnZ2luZyhjb25zdCBjaGFyKiBw
cmVmaXgsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcmVz
dWx0ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgcmVzdWx0LT5lZmZlY3RzLndy
aXRlc0xvY2FsU3RhdGUgPSB0cnVlOworICAgICAgICByZXN1bHQtPmFwcGVuZCh2YWx1ZSwgVmFs
dWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBUeXBlIHZhbHVlVHlwZSA9IHZh
bHVlLT50eXBlKCk7CisgICAgICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAg
ICAgICAgICAgaml0LnByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gSW50MzIpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPGludDMyX3Q+KEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
cHJlZml4LCBjb250ZXh0LmdwcjxKU1ZhbHVlPihHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAg
ICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJp
bGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KICAgICAKICAgICBWTSYgdm0oKSB7IHJl
dHVybiBtX2dyYXBoLm1fdm07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvRFNMLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIK
aW5kZXggNzMxNzEwMDk2Y2YzZTI0OThhZTQ1ZGRhMjZhYTgyZTc5Y2Q0NmE0ZS4uNjk3ZGU4ZDk4
ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRmNTE5YjA2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9EU0wucmIKQEAgLTEzOCw2ICsxMzgsNyBAQCBtb2R1bGUgRFNMCiAjaW5jbHVkZSAi
R2V0QnlWYWxIaXN0b3J5LmgiCiAjaW5jbHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJJ
dGVyYXRpb25Nb2RlTWV0YWRhdGEuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCIKICNpbmNsdWRlICJPcGNvZGUuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5k
LmgiCiAjaW5jbHVkZSAiUHV0QnlJZFN0YXR1cy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAppbmRleCA0NDQ2MzVlOTgwZDkwYWY4MzdlYmQ2M2I5NjJm
YWVkZTJlYzUzNTAzLi5kODc5YzkwYmUzMTE3ODYyMzNmNTI2YjE4M2VkZjFjYjNjN2JiMzhhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaApAQCAtNTMs
NyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3Rl
ciYgb3BlcmF0b3I9KENhbGxGcmFtZSopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVy
JiBvcGVyYXRvcj0oQ29kZUJsb2NrKik7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIm
IG9wZXJhdG9yPShKU1Njb3BlKik7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9w
ZXJhdG9yPShKU09iamVjdCopOworICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVy
YXRvcj0oSlNDZWxsKik7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9y
PShFbmNvZGVkSlNWYWx1ZSk7CiAKICAgICAgICAgaW50MzJfdCBpKCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKaW5k
ZXggYzU2ZWY1ZTQ1NTRjYjEwM2FiZWJlNzJlNjI5OGY4YzQ4YWFkOTg2MC4uNTkzZWY2NjY4ZGUy
ZTAzYTY1OWIzOWYzMWFmNjBmODhjMjc4Mzk4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaApAQCAtNjMsNyArNjMsNyBAQCBB
TFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KENvZGVCbG9jayogY29k
ZUJsb2NrKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotQUxXQVlTX0lOTElORSBSZWdpc3RlciYg
UmVnaXN0ZXI6Om9wZXJhdG9yPShKU09iamVjdCogb2JqZWN0KQorQUxXQVlTX0lOTElORSBSZWdp
c3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShKU0NlbGwqIG9iamVjdCkKIHsKICAgICB1LnZhbHVl
ID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUob2JqZWN0KSk7CiAgICAgcmV0dXJuICp0aGlzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggYWM4YjUx
MzdkODUzNTQ1MDZhZWVkY2VkYmQxYzViZDc3MjU3OWMwMS4uNDE1OWU3ZTUwNDk2OTM3ZWUxZTU2
YWZiN2MyMGFlOWNmMmE4OWVlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCkBAIC04ODksNyArODg5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YnJhbmNoOCgKICAgICAgICAgICAgIEJlbG93LCBBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpOwogICAgIH0KLSAg
ICAKKwogICAgIC8vIE5vdGUgdGhhdCBmaXJzdCBhbmQgbGFzdCBhcmUgaW5jbHVzaXZlLgogICAg
IEp1bXAgYnJhbmNoSWZUeXBlKEdQUlJlZyBjZWxsR1BSLCBKU1R5cGVSYW5nZSByYW5nZSkKICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNDJiOGNhZjVmNWNiOGM0YjVmM2Fk
ZWIzZWRhNDdhYjI2OTBkNDkwNC4uNGY3ZjI5NTEyOGU4YzVlMDkwZTZkMjEyYTI0MWQ4YjM2YjVj
YmIyMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMzExLDYgKzMxMSw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX1NMT1dfT1Ao
Z2V0X2VudW1lcmFibGVfbGVuZ3RoKQogICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVy
YWJsZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3IpCisgICAgICAgIERFRklORV9TTE9XX09QKGVudW1lcmF0b3JfbmV4dCkKICAgICAgICAg
REVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5nKQogICAgICAgICBERUZJTkVfU0xPV19PUChj
cmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Nj
b3BlZF9hcmd1bWVudHMpCkBAIC0zNjUsNiArMzY2LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykK
ICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9P
UChvcF9nZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9pbl9ieV92YWwpCisgICAgICAg
IERFRklORV9PUChvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCiAgICAgICAgIERFRklO
RV9PUChvcF9nZXRfcHJpdmF0ZV9uYW1lKQogICAgICAgICBERUZJTkVfT1Aob3Bfc2V0X3ByaXZh
dGVfYnJhbmQpCiAgICAgICAgIERFRklORV9PUChvcF9jaGVja19wcml2YXRlX2JyYW5kKQpAQCAt
NTc4LDYgKzU4Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQogICAgICAgICBE
RUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9l
bnVtZXJhdG9yX2dldF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRf
cHJpdmF0ZV9uYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc2V0X3ByaXZhdGVf
YnJhbmQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja19wcml2YXRlX2JyYW5k
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggNDg3YTVhYzViOGU1ZDhhOWQ4MGIyYzZkMzA2
ZTA4MTUyMWI4MjgxNC4uMTQyNjA0Mjg3NWRmNTdhM2VjYTUwZDNjNWI0MzI1ODcwYjg2OTY4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC02ODUsNiArNjg1LDE3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCBJbnN0cnVjdGlvbiopOwogCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CisgICAgICAgIHZvaWQgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUm
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisKKyAgICAgICAgdm9pZCBlbWl0
X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICAg
ICAgdm9pZCBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlv
biosIGNvbnN0IE9wY29kZVR5cGUmLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSk7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOworICAg
ICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDE1ZTFkMzQ1
NzliNmQ0YzhjMTcwZDIzNTBjNmMzNjQ0M2ZmZWE0MTUuLjM1ZjE2OTUxYTI1Njc5NjFlNzVhYTVh
OWVkM2U3YzIwY2Q2NmQ4MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNMZXhpY2Fs
RW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0
ZUZpZWxkUHV0S2luZC5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlNs
b3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAi
VGh1bmtHZW5lcmF0b3JzLmgiCkBAIC04NiwxMCArODcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgordm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxT
bG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0g
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+
KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICAg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAg
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKQEAg
LTEyOSw2ICsxMzAsMTggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICAgICAgZW1pdE5h
a2VkTmVhckNhbGwodm0uZ2V0Q1RJU3R1YihjaGVja0V4Y2VwdGlvbkdlbmVyYXRvcikucmV0YWdn
ZWRDb2RlPE5vUHRyVGFnPigpKTsKIAogICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1l
dGFkYXRhLCByZXR1cm5WYWx1ZUdQUik7CisgICAgICAgIC8vIGlmIChtX2J5dGVjb2RlSW5kZXgu
b2Zmc2V0KCkgPT0gNzI5KSB7CisgICAgICAgIC8vICAgICBhdXRvKiBtZXRhZGF0YVB0ciA9ICZt
ZXRhZGF0YTsKKyAgICAgICAgLy8gICAgIGF1dG8qIGNvZGVCbG9ja1B0ciA9IG1fY29kZUJsb2Nr
OworICAgICAgICAvLyAgICAgcHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0
KSB7CisgICAgICAgIC8vICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2tQdHItPm1fbG9jayk7CisgICAgICAgIC8vICAgICAgICAgbWV0YWRhdGFQdHItPm1fcHJvZmls
ZS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKKyAgICAgICAgLy8gICAgICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGNvbnRleHQuZ3ByPEpTVmFsdWU+KHJldHVyblZhbHVlR1BSKTsKKyAg
ICAgICAgLy8gICAgICAgICBpZiAocmVzdWx0LmlzU3RyaW5nKCkpCisgICAgICAgIC8vICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKChtZXRhZGF0YVB0ci0+bV9wcm9maWxlLm1fcHJlZGljdGlv
biAmIChTcGVjU3RyaW5nIHwgU3BlY1N0cmluZ0lkZW50KSkpOworICAgICAgICAvLyAgICAgfSk7
CisgICAgICAgIC8vIH0KKwogICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogI2VuZGlmIC8vIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogCkBAIC0x
MzYsNiArMTQ5LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgfQogfQogCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAg
IGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlW
YWw+KCksIGl0ZXIpOworfQorCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3By
ZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkKIHsKQEAgLTM1NDAsNiArMzU1OCwxNDggQEAgSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHkKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCit2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0
ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgSnVtcExpc3QgZG9u
ZUNhc2VzOworCisgICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9k
ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdU
MSk7CisKKyAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEpKTsKKyAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZh
bHVlLgorICAgIEp1bXAgaXNOb3ROYW1lZE1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVn
VDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworCisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsK
KyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKTsKKworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09i
amVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwg
VGltZXNFaWdodCksIHJlc3VsdEdQUik7CisKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7
CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgIG91dE9mTGluZUFjY2Vz
cy5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICAvLyBUT0RPOiBuZWc2ND8KKyAgICBuZWczMihyZWdUMSk7CisgICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIp
OworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIHN0cnVjdHVyZU1pc21hdGNo
LmxpbmsodGhpcyk7CisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Okhhc1NlZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSk7CisKKyAgICBpc05vdE5hbWVkTW9kZS5saW5rKHRoaXMpOworICAg
IEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIC8vIFJlcGxh
Y2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGluZGV4LCByZWdUMSk7CisKKyAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKKyAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworCisgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxp
bmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOworICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpC
YXNlbGluZUpJVCkpCisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Cisg
ICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChn
ZW4pOworCisgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICAvLyBpZiAobV9i
eXRlY29kZUluZGV4Lm9mZnNldCgpID09IDcyOSkgeworICAgIC8vICAgICBhdXRvKiBtZXRhZGF0
YVB0ciA9ICZtZXRhZGF0YTsKKyAgICAvLyAgICAgYXV0byogY29kZUJsb2NrUHRyID0gbV9jb2Rl
QmxvY2s7CisgICAgLy8gICAgIHByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4
dCkgeworICAgIC8vICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihjb2RlQmxvY2tQ
dHItPm1fbG9jayk7CisgICAgLy8gICAgICAgICBtZXRhZGF0YVB0ci0+bV9wcm9maWxlLmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOworICAgIC8vICAgICAgICAgSlNWYWx1ZSByZXN1
bHQgPSBjb250ZXh0LmdwcjxKU1ZhbHVlPihyZXN1bHRHUFIpOworICAgIC8vICAgICAgICAgaWYg
KHJlc3VsdC5pc1N0cmluZygpKQorICAgIC8vICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCht
ZXRhZGF0YVB0ci0+bV9wcm9maWxlLm1fcHJlZGljdGlvbiAmIChTcGVjU3RyaW5nIHwgU3BlY1N0
cmluZ0lkZW50KSkpOworICAgIC8vICAgICB9KTsKKyAgICAvLyB9CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0
ZXIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1Bh
dGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQoreworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2Rl
Lm1fbW9kZTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobW9kZSwgcmVnVDApOworICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVnVDApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93Q2FzZXMubGluayh0aGlzKTsKKworICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBnZW5l
cmFsQ2FzZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKworICAgIGRvbmUubGluayh0aGlz
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0X2VudW1lcmF0b3JfaGFz
X3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9ySW5CeVZhbD4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdF9lbnVtZXJhdG9y
X2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpLCBzbG93X3BhdGhfZW51bWVyYXRvcl9o
YXNfb3duX3Byb3BlcnR5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNhMDAxYTU2NTVlYTFiYjFkYjU5NTcz
Y2Y2MDguLmY3MzI2ODhhZTMyZWNkZGI5NzRiYWJmZmIzNjcyZmZhM2MxYmY1ZjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
QEAgLTE5OTgsNiArMTk5OCwxMCBAQCBzbG93UGF0aE9wKGdldF9ieV92YWxfd2l0aF90aGlzKQog
c2xvd1BhdGhPcChnZXRfZGlyZWN0X3BuYW1lKQogc2xvd1BhdGhPcChnZXRfZW51bWVyYWJsZV9s
ZW5ndGgpCiBzbG93UGF0aE9wKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQorc2xvd1BhdGhPcChl
bnVtZXJhdG9yX25leHQpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKK3Nsb3dQ
YXRoT3AoZW51bWVyYXRvcl9pbl9ieV92YWwpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfaGFzX293
bl9wcm9wZXJ0eSkKIHNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkK
IHNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IDExMjk1NGJiOWI2
ZTUwMTM2ODgzYjc0NTZjYjFlODMxOGZiNWE1MTEuLmU5OWNlMzc4ZmY0OTFhOTQyZWFhYjI0ZjE3
N2ZiOGVmNzUzZjM2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcApAQCAtMTA4NCwxMSArMTA4NCwxMzEgQEAgSlNDX0RFRklORV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcikKICAgICBS
RVRVUk4ocHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2UpKTsKIH0KIAor
SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpCit7
CisgICAgQkVHSU4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvck5l
eHQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OworICAgIFJlZ2lzdGVyJiBtb2RlUmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9tb2RlKTsKKyAg
ICBSZWdpc3RlciYgaW5kZXhSZWdpc3RlciA9IEdFVChieXRlY29kZS5tX2luZGV4KTsKKyAgICBS
ZWdpc3RlciYgbmFtZVJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKTsKKwor
ICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9k
ZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICB1aW50MzJfdCBpbmRl
eCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMyKCk7CisKKyAgICBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQo
IWJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJh
c2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwor
ICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlLT5zdHJ1
Y3R1cmVJRCgpKTsKKworICAgIEpTU3RyaW5nKiBuYW1lID0gZW51bWVyYXRvci0+Y29tcHV0ZU5l
eHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9kZSk7CisgICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7CisKKyAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1
aW50OF90Pihtb2RlKTsKKyAgICBtb2RlUmVnaXN0ZXIgPSBqc051bWJlcihzdGF0aWNfY2FzdDx1
aW50OF90Pihtb2RlKSk7CisgICAgaW5kZXhSZWdpc3RlciA9IGpzTnVtYmVyKGluZGV4KTsKKyAg
ICBuYW1lUmVnaXN0ZXIgPSBuYW1lID8gbmFtZSA6IGpzTnVsbCgpOworICAgIEVORCgpOworfQor
CitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbCkKK3sKKyAgICBCRUdJTigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVt
ZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29k
ZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50
MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8
dWludDhfdD4obW9kZSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0
b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51
bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IEdFVChieXRlY29kZS5t
X2luZGV4KS5qc1ZhbHVlKCkuYXNJbnQzMigpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAg
ICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGU6IHsKKyAgICAgICAg
ICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJh
c2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpKSk7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVk
TW9kZTogeworICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBiYXNlVmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQo
KSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ2xsIG9ubHkgbWF0Y2ggdGhlIHN0cnVjdHVyZSBJ
RCBpZiB0aGUgYmFzZSBpcyBhbiBvYmplY3QuCisgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4
IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKTsKKyAgICAgICAgICAg
ICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldE9iamVjdCgpLT5nZXREaXJlY3QoaW5k
ZXggPCBlbnVtZXJhdG9yLT5jYWNoZWRJbmxpbmVDYXBhY2l0eSgpID8gaW5kZXggOiBpbmRleCAt
IGVudW1lcmF0b3ItPmNhY2hlZElubGluZUNhcGFjaXR5KCkgKyBmaXJzdE91dE9mTGluZU9mZnNl
dCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9lbnVt
ZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0Y2gpOworICAgICAgICAgICAg
RkFMTFRIUk9VR0g7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsKKyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNDZWxs
KCkgJiYgbW9kZSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkKKyAgICAg
ICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFz
ZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgICAgIEpTU3RyaW5nKiBz
dHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7
CisgICAgICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGds
b2JhbE9iamVjdCk7CisgICAgICAgICAgICAvLyBUT0RPIERvZXMgdGhpcyBhY3R1YWxseSBldmVy
IHRocm93PyBJc24ndCBzdHJpbmcgYmFja2VkIGJ5IGEgVVVJRD8KKyAgICAgICAgICAgIENIRUNL
X0VYQ0VQVElPTigpOworICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgfTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
CitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlf
dmFsKQoreworICAgIEJFR0lOKCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1l
cmF0b3JJbkJ5VmFsPigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMy
KCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KG1vZGUpOworCisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8q
IGJhc2UgPSBiYXNlVmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9
PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpz
Qm9vbGVhbih0cnVlKSk7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+
aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgp
LmFzVUludDMyKCkpKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5n
KEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICBSRVRVUk4oanNC
b29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVl
LCBzdHJpbmcsICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSkpKTsKK30KKworSlNDX0RFRklORV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCit7
CisgICAgQkVHSU4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckhh
c093blByb3BlcnR5PigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMy
KCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KG1vZGUpOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1l
cmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFsdWUuZ2V0T2Jq
ZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1
Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CisKKyAgICAg
ICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAg
ICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzT3duUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkpKSk7CisgICAg
fQorCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3Bl
cnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9J
ZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgUkVU
VVJOKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3Qs
IGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lKSkpOworfQorCiBKU0NfREVGSU5FX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKQogewogICAgIEJFR0lO
KCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFt
ZT4oKTsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNW
YWx1ZSgpLmFzQ2VsbCgpKTsKKwogICAgIHVpbnQzMl90IGluZGV4ID0gR0VUKGJ5dGVjb2RlLm1f
aW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMkFzQW55SW50KCk7CiAKICAgICBKU1N0cmluZyogcHJv
cGVydHlOYW1lID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgKaW5kZXggZDhkMTUwMWZiMzViYWMyNzk0YzZkOTQxMDI3MWJiNjhm
NGNjMDU3ZS4uOWQ2NDM4YzRmNDk1ZTE2ZDI2MmI4YTMyMWRhM2YwNDA1ZGI3YWY3OSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKQEAgLTI2
NCw2ICsyNjQsMTAgQEAgSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0
X2RpcmVjdF9wbmFtZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9n
ZXRfcHJvcGVydHlfZW51bWVyYXRvcik7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk7CiBKU0NfREVDTEFSRV9DT01NT05f
U0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOworSlNDX0RFQ0xB
UkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKK0pTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CitK
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3Zh
bCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hh
c19vd25fcHJvcGVydHkpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
dG9faW5kZXhfc3RyaW5nKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfdW5yZWFjaGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGIxYjQxNmUyMDVmOGMzZTc4NDYxYTIzMGEwMmNk
M2E0NmI5NWQ3YzIuLjI0YmQ3NjYyNjhhZTUyY2NkZjNkNDM1YmIyMTQ2Y2ZlZjk4MzE5NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
QEAgLTE0NjgsNiArMTQ2OCwxMCBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJO
YW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAgICAgICB9
KTsKICNlbmRpZgogCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oTGlua1RpbWVDb25zdGFudDo6ZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKV0uaW5pdExh
dGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CisgICAgICAgIGluaXQu
c2V0KGluaXQudm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpOworICAgIH0pOworCiAg
ICAgaWYgKE9wdGlvbnM6OmV4cG9zZVByb2ZpbGVyc09uR2xvYmFsT2JqZWN0KCkpIHsKICNpZiBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiX19lbmFibGVTYW1wbGluZ1Byb2Zp
bGVyIiksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIGVuYWJsZVNh
bXBsaW5nUHJvZmlsZXIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmNwcAppbmRleCAyMWM3MGEyN2I2OTFiZTA1NjkwYTJmYWU3N2M2OTkxMmFlZWMx
MTlkLi5jZjBhNGE1MTM0ZjgyZGVlOTlhYWIyNWI2NjM1OThlNTdkY2UyYzhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5jcHAKQEAgLTQ5LDEzICs0OSwxOSBAQCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdAog
CiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbmRleGVkTGVuZ3RoLCB1aW50MzJf
dCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KiBwcm9w
ZXJ0eU5hbWVzQnVmZmVyLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWVzU2l6ZSkKICAgICA6IEpTQ2Vs
bCh2bSwgdm0ucHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1f
cHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVydHlOYW1lc0J1ZmZlcikKICAgICAsIG1fY2Fj
aGVkU3RydWN0dXJlSUQoc3RydWN0dXJlID8gc3RydWN0dXJlLT5pZCgpIDogMCkKICAgICAsIG1f
aW5kZXhlZExlbmd0aChpbmRleGVkTGVuZ3RoKQogICAgICwgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4KG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMpCiAgICAgLCBtX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KHByb3BlcnR5TmFtZXNTaXplKQogICAgICwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0
eShzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkgOiAwKQorICAgICwgbV9w
cm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5hbWVzQnVmZmVyKQogeworICAgIGlmICht
X2luZGV4ZWRMZW5ndGgpCisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlOworICAgIGlmIChtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgp
CisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9k
ZTsKKyAgICBpZiAobV9lbmRHZW5lcmljUHJvcGVydHlJbmRleCAtIG1fZW5kU3RydWN0dXJlUHJv
cGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6R2VuZXJpY01vZGU7CiB9CiAKIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+JiYgaWRlbnRp
ZmllcnMpCkBAIC0xNDgsNCArMTU0LDcwIEBAIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFt
ZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIFByCiAgICAg
fQogfQogCitKU1N0cmluZyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgdWludDMyX3QmIGlu
ZGV4LCBNb2RlJiBtb2RlLCBib29sIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVChpbmRleGVkTGVuZ3RoKCkgfHwgc2l6
ZU9mUHJvcGVydHlOYW1lcygpKTsKKworICAgIGluZGV4Kys7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBJbml0TW9kZTogeworICAgICAgICBtb2RlID0gSW5kZXhlZE1vZGU7CisgICAg
ICAgIGluZGV4ID0gMDsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorCisgICAgY2FzZSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOiB7CisgICAgICAgIHdoaWxlIChp
bmRleCA8IGluZGV4ZWRMZW5ndGgoKSAmJiAhYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGds
b2JhbE9iamVjdCwgaW5kZXgpKSB7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgICAgICBpZiAoaW5kZXggPCBpbmRleGVk
TGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0
cmluZyA/IGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3RyaW5nKCkp
IDogbnVsbHB0cjsKKworICAgICAgICBpZiAoIXNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG1vZGUgPSBOYW1lZE1vZGU7CisgICAg
ICAgIGluZGV4ID0gMDsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorCisgICAgY2FzZSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZToKKyAgICBjYXNlIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsKKyAgICAgICAgSlNTdHJpbmcqIG5hbWUgPSBu
dWxscHRyOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID49
IHNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICAgICAgICAgIGlmICgh
bmFtZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IGVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSAmJiBiYXNlLT5zdHJ1Y3R1cmVJRCgpID09IGNhY2hl
ZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhdXRv
IGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZS0+dmFsdWUoZ2xvYmFsT2JqZWN0
KSk7CisgICAgICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworICAgICAgICAgICAg
aWYgKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGlkKSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOworICAgICAgICAgICAgbmFtZSA9IG51bGxwdHI7CisgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICB9CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisKKyAg
ICAgICAgaWYgKGluZGV4ID49IGVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSAmJiBpbmRleCA8
IHNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgIG1vZGUgPSBHZW5lcmljTW9kZTsK
KyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAppbmRleCAw
MjAxMWQ0MWM3ZjY2ZGFkODgzYWU4ZDc3MGI1ZDNkMjg2Y2Q1MDg3Li5hMDA5YmIyOTAxYjRhYTE3
MGQ3MzhhNTk4NjBhMDlhMTU2ZDIwNDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaApAQCAtMjgsNyArMjgs
NyBAQAogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1
ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zNyw2ICszNywx
NyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsKICAgICBzdGF0aWMgY29uc3Rl
eHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsOwogCisgICAgZW51bSBNb2RlIDogdWludDhfdCB7CisgICAgICAgIElu
aXRNb2RlID0gMCwKKyAgICAgICAgSW5kZXhlZE1vZGUgPSAxIDw8IDAsCisgICAgICAgIE5hbWVk
TW9kZSA9IDEgPDwgMSwKKyAgICAgICAgR2VuZXJpY01vZGUgPSAxIDw8IDIsCisgICAgICAgIC8v
IFByb2ZpbGluZyBPbmx5CisgICAgICAgIEhhc1NlZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRj
aCA9IDEgPDwgMywKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGVudW1l
cmF0aW9uTW9kZU1hc2sgPSAoR2VuZXJpY01vZGUgPDwgMSkgLSAxOworCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewpAQCAtNzQsMTYgKzg1LDIwIEBAIHB1
YmxpYzoKICAgICB1aW50MzJfdCBlbmRHZW5lcmljUHJvcGVydHlJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7IH0KICAgICB1aW50MzJfdCBjYWNoZWRJbmxp
bmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7IH0KICAg
ICB1aW50MzJfdCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXgoKTsgfQorICAgIHVpbnQzMl90IG1vZGVTZXQoKSBjb25zdCB7IHJldHVy
biBtX21vZGVTZXQ7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFN0cnVjdHVyZUlET2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwg
bV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4ZWRMZW5n
dGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLCBtX2luZGV4ZWRMZW5ndGgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBlbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciwgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3QgZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LCBtX2NhY2hlZElubGluZUNhcGFjaXR5KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbW9kZVNl
dE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IsIG1fbW9kZVNldCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcyk7CiAgICAgfQogCisgICAg
SlNTdHJpbmcqIGNvbXB1dGVOZXh0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UsIHVp
bnQzMl90JiBjdXJyZW50SW5kZXgsIE1vZGUmLCBib29sIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5h
bWVTdHJpbmcgPSB0cnVlKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CkBAIC05MiwxMyArMTA3LDE0IEBAIHByaXZhdGU6CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QsIHVpbnQzMl90LCBXcml0ZUJhcnJpZXI8
SlNTdHJpbmc+KiwgdW5zaWduZWQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWZQ
dHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiYmKTsKIAotICAgIEF1eGlsaWFyeUJhcnJpZXI8V3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1lczsKLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47CiAgICAgU3RydWN0dXJlSUQgbV9jYWNo
ZWRTdHJ1Y3R1cmVJRDsKICAgICB1aW50MzJfdCBtX2luZGV4ZWRMZW5ndGg7CiAgICAgdWludDMy
X3QgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4OwogICAgIHVpbnQzMl90IG1fZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXg7CiAgICAgdWludDMyX3QgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsKKyAg
ICB1aW50MzJfdCBtX21vZGVTZXQgeyAwIH07CisgICAgQXV4aWxpYXJ5QmFycmllcjxXcml0ZUJh
cnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9wZXJ0eU5hbWVzOworICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVDaGFpbjsKIH07CiAKIHZvaWQgZ2V0RW51bWVyYWJsZVBy
b3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFycmF5
JiwgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNv
dW50KTsKQEAgLTEzNCw3ICsxNTAsMTAgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAg
ICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IDA7CiAgICAgfQogCi0gICAgZW51bWVyYXRv
ciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmVBZnRlckdl
dHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0
aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKKyAgICBpZiAoIWluZGV4ZWRMZW5ndGggJiYg
IXByb3BlcnR5TmFtZXMuc2l6ZSgpKQorICAgICAgICBlbnVtZXJhdG9yID0gdm0uZW1wdHlQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKCk7CisgICAgZWxzZQorICAgICAgICBlbnVtZXJhdG9yID0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1By
b3BlcnR5TmFtZXMsIGluZGV4ZWRMZW5ndGgsIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdU
Rk1vdmUocHJvcGVydHlOYW1lcykpOwogICAgIGlmICghaW5kZXhlZExlbmd0aCAmJiBzdWNjZXNz
ZnVsbHlOb3JtYWxpemVkQ2hhaW4gJiYgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1l
cyA9PSBzdHJ1Y3R1cmUpIHsKICAgICAgICAgZW51bWVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBl
Q2hhaW4odm0sIHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZ2xvYmFsT2JqZWN0LCBiYXNlKSk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcih2
bSkpCkBAIC0xNDMsNCArMTYyLDYgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
cHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1
cm4gZW51bWVyYXRvcjsKIH0KIAordXNpbmcgRW51bWVyYXRvck1ldGFkYXRhID0gc3RkOjp1bmRl
cmx5aW5nX3R5cGVfdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+OworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA2OWYz
ZDg5OGJiZmU5ZWQ5MTgyMzZkZTA4MDE2MjE0YTU5MTVhN2U2Li5iMDA5OWZkMWY4ZTgxNGUzMmI5
MjdjN2NjMjI0ZjlmNjRhNzk2YjY0IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDctMjYgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21p
bGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxv
b3AgaW4gYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyNzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogZm9yLWluLW9iamVjdC1vd24tbmFtZWQtYW5kLWdldHRlcnMuanM6IEFkZGVkLgor
ICAgICAgICAodGVzdCk6CisgICAgICAgICogdGVzdC5qczogQWRkZWQuCisgICAgICAgIChmb28p
OgorCiAyMDIxLTA2LTI0ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSRUdSRVNTSU9OKHIyMzY4NDYpOiBXUEUgc2hvdWxkbid0IGRlcGVuZCBvbiBPcGVu
R0wgRVMgMwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwppbmRleCAzOWNjYWViM2E4ZTVkMWNkZWUyYmY5YmE1OTVlZWE1NDFjOGI5MmUxLi5hNDNlZTU5
ZjliYmQyNzY4YzBjYzFkZTVkODI3NTEzZmFmMWQ1YjVlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0No
YW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTA3
LTI2ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIGZv
ci1pbiBzaG91bGQgb25seSBlbWl0IG9uZSBsb29wIGluIGJ5dGVjb2RlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjc5ODkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3It
aW4tZG91YmxlLWFycmF5LXdpdGgtb3duLW5hbWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5LmpzOiBBZGRl
ZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4tZ2V0
dGVycy5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvZm9yLWluLWludDMyLWFycmF5LXdpdGgtb3duLW5hbWVkLmpzOiBBZGRlZC4KKyAgICAgICAg
KHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXkuanM6
IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1pbnQzMi1vYmplY3Qtd2l0aC1vd24tbmFtZWQtYW5kLWdldHRlcnMuanM6IEFkZGVkLgorICAg
ICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1vYmpl
Y3Qtd2l0aC1vd24tbmFtZWQuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICog
bWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanM6IEFkZGVkLgor
ICAgICAgICAoc3VtKToKKyAgICAgICAgKG9wYXF1ZVNldCk6CisgICAgICAgICogbWljcm9iZW5j
aG1hcmtzL2Zvci1pbi1zdHJpbmctYXJyYXkuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6Cisg
ICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1vZi1pdGVyYXRlLWFycmF5LW1hcC1zZXQuanM6
IEFkZGVkLgorICAgICAgICAoc3VtKToKKyAgICAgICAgKGxldC5nZW5lcmF0b3IpOgorICAgICAg
ICAqIHN0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qczoKKyAgICAgICAgKHRlc3QpOgorICAgICAg
ICAqIHN0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzOgorICAgICAgICAqIHN0
cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanM6CisgICAgICAgICogc3RyZXNz
L2Zvci1pbi1wcmltaXRpdmUtaW5kZXgtb24tcHJvdG90eXBlLmpzOiBBZGRlZC4KKyAgICAgICAg
KiBzdHJlc3MvZm9yLWluLXRlc3RzLmpzOgorICAgICAgICAqIHN0cmVzcy9oYXMtb3duLXByb3Bl
cnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qczoKKyAgICAgICAgKHRlc3Q1
KToKKwogMjAyMS0wNy0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtKU0NdIFVwZGF0ZSBJbnRsLkxvY2FsZSB0ZXN0IGFmdGVyIEFwcGxlSUNVIHVwZGF0
ZQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJh
eS13aXRoLW93bi1uYW1lZC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1kb3Vi
bGUtYXJyYXktd2l0aC1vd24tbmFtZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU4YmY0M2ZlNWFmMGZmMWQz
MDEzOGJhNzdlMzczODA0NzQzNWM5NQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL2Zvci1pbi1kb3VibGUtYXJyYXktd2l0aC1vd24tbmFtZWQuanMKQEAgLTAsMCAr
MSwxNCBAQAorZnVuY3Rpb24gdGVzdChvYmplY3QpIHsKKyAgICBzdW0gPSAwOworICAgIGZvciAo
dmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJldHVybiBz
dW07Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkg
eworICAgIHZhciBvID0gQXJyYXkoMTAwKS5maWxsKDEuMTIzMjE0MjMxKTsKKyAgICBvLmEgPSAw
OworICAgIG8uYiA9ICJzdXJwcmlzZSBzdHJpbmciOworICAgIHRlc3Qobyk7Cit9CmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5LmpzIGIvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
NGEwYzNjNzFkNmU2OTEwNThhMzFkYWNiYjUwNjZmZjI0YTQwNWJiCi0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS5qcwpAQCAtMCww
ICsxLDEwIEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9y
ICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJu
IHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytp
KQorICAgIHRlc3QoQXJyYXkoMTAwKS5maWxsKDEuMTIzMTI0MSkpOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWdldHRlcnMuanMgYi9KU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9mb3ItaW4tZ2V0dGVycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGZhMzY0ODYwYTZiMDA5ZGEz
MTg4OTUyMzA4YzUzMGUwMDJiMWZhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvZm9yLWluLWdldHRlcnMuanMKQEAgLTAsMCArMSwxNSBAQAorZnVuY3Rpb24gdGVz
dChvYmplY3QpIHsKKyAgICBzdW0gPSAwOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAg
ICAgICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0
KTsKKworbGV0IG8gPSB7IH07CitPYmplY3QuZGVmaW5lUHJvcGVydHkobywgInByb3RvVmFsdWUi
LCB7IGdldCgpIHsgcmV0dXJuICJzdHJpbmciOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0pOworT2Jq
ZWN0LmRlZmluZVByb3BlcnR5KG8sICJwcm90b1ZhbHVlMiIsIHsgZ2V0KCkgeyByZXR1cm4gInN0
cmluZzEiOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0pOworT2JqZWN0LmRlZmluZVByb3BlcnR5KG8s
ICJwcm90b1ZhbHVlMyIsIHsgZ2V0KCkgeyByZXR1cm4gInN0cmluZzIiOyB9LCBlbnVtZXJhYmxl
OiB0cnVlIH0pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3Qobyk7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXkt
d2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzIt
YXJyYXktd2l0aC1vd24tbmFtZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGUyZGRiZDJmMDVkYjRlY2NlOWZk
OWJhNDU2OWY2YjA2MjRhYTEzNwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL2Zvci1pbi1pbnQzMi1hcnJheS13aXRoLW93bi1uYW1lZC5qcwpAQCAtMCwwICsxLDE0
IEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIg
aSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsK
K30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7Cisg
ICAgdmFyIG8gPSBBcnJheSgxMDApLmZpbGwoMSk7CisgICAgby5hID0gMDsKKyAgICBvLmIgPSAy
OworICAgIHRlc3Qobyk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9m
b3ItaW4taW50MzItYXJyYXkuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50
MzItYXJyYXkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJhZTVjMWI0MjU4OTQ2NjBkOTY5ODM1ZTRmNGNkNmE4
MWVlZDUxMAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1pbnQzMi1hcnJheS5qcwpAQCAtMCwwICsxLDE1IEBACisKK3ZhciBjb3VudCA9IDA7CitmdW5j
dGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmpl
Y3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5s
aW5lKHRlc3QpOworCisKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDApOworYXJyYXkuZmlsbCgx
KTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgdGVzdChhcnJheSk7CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgt
b3duLW5hbWVkLWFuZC1nZXR0ZXJzLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWlu
LWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC1hbmQtZ2V0dGVycy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
NWVmN2ViZGQyNDMyOTQ0ZmRlYjE0ZmFmZjhiNDI2ZGM0NDYzYWM5Ci0tLSAvZGV2L251bGwKKysr
IGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLW9iamVjdC13aXRoLW93bi1u
YW1lZC1hbmQtZ2V0dGVycy5qcwpAQCAtMCwwICsxLDE1IEBACitmdW5jdGlvbiB0ZXN0KG9iamVj
dCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1
bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitP
YmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgInByb3RvVmFsdWUiLCB7IGdl
dCgpIHsgcmV0dXJuICJzdHJpbmciOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0pOwordmFyIG8gPSB7
IGxlbmd0aDogMTAwIH0KK0FycmF5LnByb3RvdHlwZS5maWxsLmNhbGwobywgMSk7CitvLmEgPSAw
Oworby5iID0gMjsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgdGVzdChvKTsK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1vYmplY3Qt
d2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzIt
b2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyNjVmMWYxZjhkZWU3OTFlOTdm
Mjk4MGU5MDRkM2E5Zjc1ZWUyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCkBAIC0wLDAgKzEs
MjAgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsKKyAgICBmb3IgKHZh
ciBpIGluIG9iamVjdCkgeworLy8gICAgICAgICR2bS5kdW1wQ2VsbChvYmplY3QpOworLy8gICAg
ICAgIHByaW50KCJpOiAiICsgaSk7CisgICAgICAgIHZhciB2ID0gb2JqZWN0W2ldOworLy8gICAg
ICAgIHByaW50KCJ2YWx1ZTogIiArIHYpOworICAgICAgICBzdW0gKz0gdjsKKyAgICB9CisgICAg
cmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFl
NTsgKytpKSB7CisgICAgdmFyIG8gPSB7IGxlbmd0aDogMTAwIH07CisgICAgQXJyYXkucHJvdG90
eXBlLmZpbGwuY2FsbChvLCAxKTsKKyAgICBvLmEgPSAwOworICAgIG8uYiA9IDI7CisgICAgdGVz
dChvKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vYmpl
Y3Qtd2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tb2Jq
ZWN0LXdpdGgtb3duLW5hbWVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1ZjRlMGY0NjAwMmVhODgwNDI0YTg4
NGUyMmM0MGFjMjM4YWZlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCkBAIC0wLDAgKzEsMTcgQEAKK2Z1
bmN0aW9uIHN1bShvKSB7CisgICAgbGV0IHN1bSA9IDA7CisgICAgZm9yIChsZXQgcCBpbiBvKQor
ICAgICAgICBzdW0gKz0gb1twXTsKKyAgICByZXR1cm4gc3VtOworfQorCitmdW5jdGlvbiBvcGFx
dWVTZXQobykgeworICAgIG8ueiA9IDM7Cit9CisKK2xldCBvYmplY3QgPSB7IHg6IDEsIHk6IDIg
fTsKK29wYXF1ZVNldChvYmplY3QpOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgewor
ICAgIGlmIChzdW0ob2JqZWN0KSAhPT0gNikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQg
c3VtIik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tc3Ry
aW5nLWFycmF5LmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLXN0cmluZy1hcnJh
eS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NzI3NGZiYzEzOTAyYTY5MWEyMjhlZTdmYzYzZjc1MDJlYjhhOGFj
Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLXN0cmlu
Zy1hcnJheS5qcwpAQCAtMCwwICsxLDEwIEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAg
IHN1bSA9ICIiOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0gKz0gb2Jq
ZWN0W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9yIChsZXQg
aSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0KEFycmF5KDEwMCkuZmlsbCgiYSIpKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1vZi1pdGVyYXRlLWFycmF5LW1h
cC1zZXQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1hcnJheS1t
YXAtc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1ZDRhMDI0NDI4OWM3MmVhYzhhNmFiMzJkMDk3MGY1ODJm
ZWY1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3Itb2Yt
aXRlcmF0ZS1hcnJheS1tYXAtc2V0LmpzCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHN1bShv
YmopIHsKKyAgICBsZXQgcmVzdWx0ID0gMDsKKyAgICBmb3IgKGxldCB4IG9mIG9iaikgeworICAg
ICAgICBpZiAodHlwZW9mIHggPT0gIm51bWJlciIpCisgICAgICAgICAgICByZXN1bHQgKz0geDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ICs9IHhbMF07CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQ7Cit9Citub0lubGluZShzdW0pOworCitsZXQgYXJyYXkgPSBbMSwyLDMsNCw1
XTsKK2xldCBzZXQgPSBuZXcgU2V0KGFycmF5KTsKK2xldCBtYXAgPSBuZXcgTWFwKGFycmF5Lm1h
cCh4ID0+IFt4LCB4XSkpOworbGV0IGdlbmVyYXRvciA9IGZ1bmN0aW9uKiAoYXJyYXkpIHsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKQorICAgICAgICB5aWVsZCBh
cnJheVtpXTsKK30KKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIGlmIChz
dW0oc2V0KSAhPT0gMTUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAgIGlmIChzdW0o
Z2VuZXJhdG9yKGFycmF5KSkgIT09IDE1KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzIGIvSlNUZXN0
cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKaW5kZXggOTAwMmI5NDBhZDU5NmI3NTQ4MWYw
MjU0MGU1MGFjOWU5Y2JiNTA4OC4uM2QyZGE2MzlkODEwZjhhYjk3YTNlMjY5ZmFlMTA3MjEwYjVj
ZTc1YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKKysr
IGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKQEAgLTI2LDggKzI2LDkgQEAK
IHZhciBmdW5jQXJnQW5kQm9keVN0ciA9CiAiKGFycikgeyIgKyAiXG4iICsKICIgICAgdmFyIHN1
bSA9IDA7IiArICJcbiIgKwotIiAgICBmb3IgKHZhciBpIGluIGFycikiICsgIlxuIiArCisiICAg
IGZvciAodmFyIGkgaW4gYXJyKSB7IiArICJcbiIgKwogIiAgICAgICAgc3VtICs9IGFycltpXTsi
ICsgIlxuIiArCisiICAgIH0gIiArCiAiICAgIHJldHVybiBzdW07IiArICJcbiIgKwogIn0iOwog
CkBAIC03NSw2ICs3Niw3IEBAIGZ1bmN0aW9uIHRlc3QobmFtZSwgZGF0YSkgewogCiAgICAgICAg
IGlmICgoYWN0dWFsICE9IGV4cGVjdGVkKSAmJiAoYWN0dWFsICE9IHByZXZpb3VzUmVzdWx0KSkg
ewogICAgICAgICAgICAgcHJpbnQoIkZBSUw6ICIgKyBuYW1lICsgIjogZXhwZWN0ZWQ6ICIgKyBl
eHBlY3RlZCArICIsIGFjdHVhbDogIiArIGFjdHVhbCArICIsIHN0YXJ0aW5nIEAgbG9vcCBpdGVy
YXRpb24gIiArIGkpOworICAgICAgICAgICAgJHZtLmJyZWFrcG9pbnQoKTsKICAgICAgICAgICAg
IHByZXZpb3VzUmVzdWx0ID0gYWN0dWFsOwogICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKICAg
ICAgICAgICAgIG51bWJlck9mRmFpbHVyZXMrKzsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4t
YmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCmluZGV4IDgzMTE1YjQ5NzNjODM3Y2E2ZDNmZjA2ZWE2
ZmYxMzFjMzQ1MTFlNjIuLjA5ZjgxZDk1NjUzYmFhMTUwNmU1ZGRhMDYyZmEyZTM1ZjE1OGJmMzEg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIu
anMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qcwpA
QCAtMTQsNSArMTQsNSBAQCBub0lubGluZShmb28pOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyh7MDowLCAxOjEsIGE6MiwgYjozfSk7CiAg
ICAgaWYgKHJlc3VsdCAhPSA3KQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyByZXN1bHQ7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiArIHJlc3Vs
dCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1p
dGVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRp
b24uanMKaW5kZXggNWFkMzU2NmZkMGQzNjEwMjVhMWU1ZjMzNjVkMGJhZDM3NGQ1MTIwMi4uZDEx
NDY5MzFiMTQ3NWQ4OGM0NzM5NDllYWRhMmRkYTBmZDM5MzBhNSAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCisrKyBiL0pTVGVzdHMv
c3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcwpAQCAtMTIsOCArMTIsOSBA
QAogICAgIH07CiAgICAgbm9JbmxpbmUoZm9vKTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKLSAgICAgICAgaWYgKGZvbygpICE9PSAiMTIzNSIpCi0gICAgICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbygp
OworICAgICAgICBpZiAocmVzdWx0ICE9PSAiMTIzNSIpCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImJhZCByZXN1bHQgZ290OiAiICsgcmVzdWx0KTsKICAgICB9CiAgICAgZm9vKG51bGwp
OwogfSkoKTsKQEAgLTM2LDggKzM3LDkgQEAKICAgICB9OwogICAgIG5vSW5saW5lKGZvbyk7CiAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAgICAgIGlmIChmb28oKSAh
PT0gInh6IikKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOworICAg
ICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09ICJ4eiIpCisg
ICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogICAg
IH0KIH0pKCk7CiAoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3It
aW4tcHJpbWl0aXZlLWluZGV4LW9uLXByb3RvdHlwZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1p
bi1wcmltaXRpdmUtaW5kZXgtb24tcHJvdG90eXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2OWRlMjliYjJk
MWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2Zvci1pbi10ZXN0cy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwppbmRleCAy
ZTRkNmI4NDJhMjQyZWI3MTU5ODYwMGVlNTI4YWUxNGI5Yzg5Y2U0Li42ODk2MDk4MTg1MWVlMzQ0
ZTNhYTdmNTMyMzE1MWIyMjUxZjY1ZDkwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3It
aW4tdGVzdHMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCkBAIC0xMDUs
NiArMTA1LDcgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3dTeW50YXhFcnJvcihzY3JpcHQpIHsKICAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOwogICAgIH0KIH0pKCk7CisK
IChmdW5jdGlvbigpIHsKICAgICB2YXIgZm9vID0gZnVuY3Rpb24oYSwgYikgewogICAgICAgICBm
b3IgKHZhciBwIGluIGIpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcy1vd24tcHJv
cGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzIGIvSlNUZXN0cy9zdHJl
c3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMK
aW5kZXggOTljNTlhYzEwNTY4Y2U4YTc5MDg1MjI5ODIwNmZkYzdlMGUwZjg5Yy4uZTBhZGUwNzFh
MmU0YjhkMDI3OGQ5NWNjOTMzZTI0ZjE4YmJlZTA1OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJl
c3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMK
KysrIGIvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxv
b3AtY29ycmVjdG5lc3MuanMKQEAgLTEzMiw3ICsxMzIsMTAgQEAgZnVuY3Rpb24gdGVzdDUoKSB7
CiAgICAgby5fX3Byb3RvX18gPSBwOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyAr
K2kpIHsKLSAgICAgICAgYXNzZXJ0KGNvdW50KG8pID09PSAwKTsKKyAgICAgICAgdmFyIGMgPSBj
b3VudChvKTsKKyAgICAgICAgaWYgKGMpCisgICAgICAgICAgICBwcmludChjKTsKKyAgICAgICAg
YXNzZXJ0KGMgPT09IDApOwogICAgIH0KIH0KIHRlc3Q1KCk7CmRpZmYgLS1naXQgYS9mb3ItaW4t
b2JqZWN0LW93bi1uYW1lZC1hbmQtZ2V0dGVycy5qcyBiL2Zvci1pbi1vYmplY3Qtb3duLW5hbWVk
LWFuZC1nZXR0ZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFhYWZhMGFjYTk4ZmJmYzgxMmM5YWM4NWZjMTM3
OWUzNTQwMGRkYWEKLS0tIC9kZXYvbnVsbAorKysgYi9mb3ItaW4tb2JqZWN0LW93bi1uYW1lZC1h
bmQtZ2V0dGVycy5qcwpAQCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgewor
ICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBv
YmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitsZXQgbyA9
IHsgYTogMSwgYjogMiB9OworT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sICJwcm90b1ZhbHVlIiwg
eyBnZXQoKSB7IHJldHVybiAic3RyaW5nIjsgfSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKK09iamVj
dC5kZWZpbmVQcm9wZXJ0eShvLCAicHJvdG9WYWx1ZTIiLCB7IGdldCgpIHsgcmV0dXJuICJzdHJp
bmcxIjsgfSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCAi
cHJvdG9WYWx1ZTMiLCB7IGdldCgpIHsgcmV0dXJuICJzdHJpbmcyIjsgfSwgZW51bWVyYWJsZTog
dHJ1ZSB9KTsKKworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3Qobyk7
CmRpZmYgLS1naXQgYS90ZXN0LmpzIGIvdGVzdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTg4OGQ4ZmY5YjM4
MmU4ZmU1ZTdiMDBlZjk2MmQ0ZTMwM2M1ZDZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdC5qcwpA
QCAtMCwwICsxLDE1IEBACitmdW5jdGlvbiBmb28ob2JqZWN0KSB7CisgICAgbGV0IGFycmF5ID0g
W107CisgICAgZm9yICh2YXIgaWQgaW4gb2JqZWN0KSB7CisgICAgICAgIGFycmF5LnB1c2gob2Jq
ZWN0W2lkXSk7CisgICAgICAgIGFycmF5LnB1c2goaWQgaW4gb2JqZWN0KTsKKyAgICB9CisgICAg
cmV0dXJuIGFycmF5OworfQorbm9JbmxpbmUoZm9vKTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAx
ZTU7ICsraSkgeworICAgIGZvbyh7YTogMSwgYjogMn0pOworfQorCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434311</attachid>
            <date>2021-07-27 13:55:47 -0700</date>
            <delta_ts>2021-07-27 14:31:15 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210727165545.patch</filename>
            <type>text/plain</type>
            <size>294155</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5NzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NDc5MTRhNzhlZTE1ZmE2NzY5NWNiOTA1ZmFjNzc2MGExNWUwMjUwLi44MDIxMzk2Zjg3MzNiODhi
ODFmNThiMmIxMmE3NzVmNmU1MGM5MjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMDggIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgZGlzcGxheS1wcm9maWxlci1vdXRwdXQg
c2hvdWxkIGJlIGFibGUgdG8gcHJpbnQgZGlzYXNzZW1ibHkgZm9yIHRoZSBGVEwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgK
aW5kZXggYTZhNGVkZjg5NzUwNzVkNTk5NDE3NDhkYWY5MDM0OWQ2N2RiMWM5Yy4uYjE3MTZmODQ0
NmEzNmQ2YmNhZDUzMzNmMzM3NDc5ZWYwZWI0OGMwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTg1NCw2ICs4
NTQsMTMgQEAgcHVibGljOgogICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJl
c3MpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MubV9wdHIsIGdldENhY2hl
ZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIG9yMzIoc3JjLCBk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc3RvcmU4KGRhdGFU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MubV9wdHIpOworICAgIH0KKwogICAgIHZvaWQgb3I4KFRydXN0
ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgTG9n
aWNhbEltbWVkaWF0ZSBsb2dpY2FsSW1tID0gTG9naWNhbEltbWVkaWF0ZTo6Y3JlYXRlMzIoaW1t
Lm1fdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCmluZGV4IGEyNjU1M2E1YmNlMGZjZjdiZjA4MDcy
ZjU5ODJjOWI1MDc2MjBhZWYuLmRhZWNiZTcyNzU3MzZiZTg0ZTk5Zjc4ZjUwN2U4NDY3MjhjYzI3
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKQEAgLTYyNSw2ICs2MjUsMTIgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5vcmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0
LmluZGV4LCBkZXN0LnNjYWxlKTsKICAgICB9CiAKKyAgICB2b2lkIG9yOChSZWdpc3RlcklEIHNy
YywgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgb3I4KHNy
YywgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKQEAgLTY2NSw2ICs2NzEsMTIgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5vcmJfaW0oc3RhdGljX2Nhc3Q8aW50OF90Pihp
bW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFRydXN0ZWRJbW0zMiBpbW0s
IEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIG9yOChpbW0s
IEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoUmVn
aXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBpZiAob3AxID09IG9wMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAppbmRleCAzMzQ3MmRkOTMxYTk3YjA5Yjk3
ZGM5MmY1MTFlNmMyMmRjYTMyMTIyLi42OTFiNjUwZGI0MDk5Zjc0MWQyOTM3NmZkZjNkMDdjYzY1
ZjZiMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCkBAIC05NywxMiArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAg
IG9yMTYoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCi0gICAgewot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rl
cigpKTsKLSAgICAgICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOwotICAg
IH0KLQogICAgIHZvaWQgc3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciks
IHNjcmF0Y2hSZWdpc3RlcigpKTsKQEAgLTU4Nyw2ICs1ODEsMTIgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCisgICAgdm9pZCByc2hpZnQ2NChSZWdpc3RlcklEIHNyYywgVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShzcmMsIGRlc3Qp
OworICAgICAgICByc2hpZnQ2NChpbW0sIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgdXJzaGlm
dDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnNocnFfaThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAppbmRleCBiMDJlNTYwMjEwMjY0OTllZjM3
NWJjNjA5MTRhOWE0ZGUwMWIyZGY2Li5kY2FmMGJhNmNhMzE4ZjE4MDI5MmNiYThkN2RjMDBmYTU3
NzkxZWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oCkBAIC0xODEsNyArMTgxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oaGFzT3du
UHJvcGVydHlGdW5jdGlvbikgXAogICAgIG1hY3JvKGNyZWF0ZVByaXZhdGVTeW1ib2wpIFwKICAg
ICBtYWNybyhlbnRyaWVzKSBcCi0gICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMpCisg
ICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMpIFwKKyAgICBtYWNybyhlbXB0eVByb3Bl
cnR5TmFtZUVudW1lcmF0b3IpCiAKIAogbmFtZXNwYWNlIFN5bWJvbHMgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggMTgyNWVjMmFkNWEw
MzM5ZDRmM2VmMTk1ZGQ2ZjlmY2YyMmQwNjQ5Yy4uOTcyOTYzMGRiZGJhMzkwZDYzNTQwMjgxY2M0
YmQxNmUzOTM2NjVlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCkBAIC0yOSw2ICsyOSw3IEBAIHR5cGVzIFsKICAgICA6RGVidWdIb29rVHlw
ZSwKICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCisgICAgOkVu
dW1lcmF0b3JNZXRhZGF0YSwKICAgICA6R2V0QnlJZE1vZGUsCiAgICAgOkdldEJ5SWRNb2RlTWV0
YWRhdGEsCiAgICAgOkdldEJ5VmFsSGlzdG9yeSwKQEAgLTEyNDEsNiArMTI0Miw2NSBAQCBvcCA6
dG9faW5kZXhfc3RyaW5nLAogCiBvcCA6dW5yZWFjaGFibGUKIAorb3AgOmVudW1lcmF0b3JfbmV4
dCwKKyAgICBhcmdzOiB7CisgICAgICAgICMgb3V0CisgICAgICAgIHByb3BlcnR5TmFtZTogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICAjIGluL291dAorICAgICAgICBtb2RlOiBWaXJ0dWFsUmVn
aXN0ZXIsICMgV2lsbCBhbHdheXMgYmUgYSBKUyBVSW50MzIgcmVwcmVzZW50aW5nIGEgSlNGb3JJ
bk1vZGUuCisgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsICMgR2V0cyByZXNldCB0byB6
ZXJvIGV2ZXJ5IHRpbWUgbW9kZSBjaGFuZ2VzLgorICAgICAgICAjIGluCisgICAgICAgIGJhc2U6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAor
ICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAorICAg
IH0KKworb3AgOmVudW1lcmF0b3JfZ2V0X2J5X3ZhbCwKKyAgICBhcmdzOiB7CisgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAg
ICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1l
cmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAorICAg
IH0KKworb3AgOmVudW1lcmF0b3JfaW5fYnlfdmFsLAorICAgIGFyZ3M6IHsKKyAgICAgICAgZHN0
OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxS
ZWdpc3RlciwKKyAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTog
RW51bWVyYXRvck1ldGFkYXRhLAorICAgIH0KKworb3AgOmVudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSwKKyAgICBhcmdzOiB7CisgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwK
KyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGluZGV4OiBW
aXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKKyAgICB9
CisKIG9wIDpjcmVhdGVfcmVzdCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJl
Z2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlVXNlRGVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5jcHAKaW5kZXggMDc1NjE4OTlhNjIwOWUzNmNiZmE3MmEwNTRmMTUxMmQ2NzM4YzBjYy4u
OWI0MTU5M2YzNDRkODdjNGY1MDZmYzRiMTY1MDRhMWM4ZjYxMDE3NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCkBAIC0yOTUsNiAr
Mjk1LDExIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFy
Z3VtZW50KQogCisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwg
ZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBw
cm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBV
U0VTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUs
IGluZGV4LCBlbnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5
bWJvbENhbGwsIGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUp
OwpAQCAtNTY3LDYgKzU3MiwxMSBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleElt
cGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogCiAgICAgREVG
UyhPcENhdGNoLCBleGNlcHRpb24sIHRocm93blZhbHVlKQogCisgICAgREVGUyhPcEVudW1lcmF0
b3JOZXh0LCBwcm9wZXJ0eU5hbWUsIG1vZGUsIGluZGV4KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
R2V0QnlWYWwsIGRzdCkKKyAgICBERUZTKE9wRW51bWVyYXRvckluQnlWYWwsIGRzdCkKKyAgICBE
RUZTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBkc3QpCisKICAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAppbmRleCBmY2ZhMjkyYWQwNGVmMTA2MDUyNWUzN2YxYTg4NjYxNGQzNTQ4NzQ4Li45
OWEzNmYxODFhZjMxZmRlZmRhYmFhMDM2YjYwNzk0MGZjZDdjYTlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNTAzLDYgKzUwMywxMSBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGluawogCiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxl
KQogCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElO
SyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRv
ckhhc093blByb3BlcnR5LCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5
VmFsLCBwcm9maWxlKQorCiAgICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBM
SU5LKE9wVGFpbENhbGwsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmls
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNv
bnN0YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFu
dC5oCmluZGV4IGVlNDA5ODhhODYxZGIxNWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJh
ZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFmNDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3
IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBc
CiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQ
cml2YXRlU3ltYm9sLCBudWxscHRyKSBcCisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0
b3IsIG51bGxwdHIpIFwKIAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5h
bWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5k
ZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRiNjM4NWE1NTNjMWY5NWRmNGQxOS4uOTdiODU2ZDVkMWYz
YjA1YjQxMzNhNTcxYWE1MGFlNjMzMmUzZjRmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGNvZGUuaApAQCAtOTksNiArOTksNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQog
ICAgIG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKSBcCiAgICAgbWFjcm8oT3BDb25z
dHJ1Y3RWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAorICAgIG1hY3JvKE9wRW51
bWVyYXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BHZXREaXJlY3RQbmFtZSkgXAogICAgIG1h
Y3JvKE9wR2V0QnlJZCkgXAogICAgIG1hY3JvKE9wR2V0QnlJZFdpdGhUaGlzKSBcCkBAIC0xMzYs
NiArMTM3LDEwIEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNv
ZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BJbkJ5VmFs
KSBcCiAgICAgbWFjcm8oT3BQdXRCeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWxEaXJlY3Qp
IFwKKyAgICBtYWNybyhPcEVudW1lcmF0b3JOZXh0KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9y
R2V0QnlWYWwpIFwKKyAgICBtYWNybyhPcEVudW1lcmF0b3JJbkJ5VmFsKSBcCisgICAgbWFjcm8o
T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVf
V0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0Fy
cmF5KSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDczOTBkNTJjNGFlMWFhMWMzZTIyNmM5NTIyZjdi
NDQ2NzljOTZkZTMuLjY4NWNjNDA5MzdmYzExNWU3ODYwYjRmY2FlMzZkM2I3YzIyYmM3OTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCkBAIC0xNTAzLDExICsxNTAzLDExIEBAIHVuc2lnbmVkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0V2lkZUp1bXBJZk5vdEZ1bmN0aW9uSGFzT3duUHJvcGVydHkoUmVnaXN0
ZXJJRCoKICAgICByZXR1cm4gbV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCk7CiB9CiAKLXZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJbkxv
b3AoU3RydWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0LCB1bnNpZ25lZCBicmFu
Y2hPZmZzZXQsIExhYmVsJiBnZW5lcmljUGF0aCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJl
Y29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoRm9ySW5Db250ZXh0JiBjb250ZXh0LCB1bnNp
Z25lZCBicmFuY2hPZmZzZXQsIExhYmVsJiBnZW5lcmljUGF0aCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChnZW5lcmljUGF0aC5pc0JvdW5kKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFnZW5lcmlj
UGF0aC5pc0ZvcndhcmQoKSk7Ci0gICAgc3RydWN0dXJlQ29udGV4dC5hZGRIYXNPd25Qcm9wZXJ0
eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0
LmFkZEhhc093blByb3BlcnR5SnVtcChicmFuY2hPZmZzZXQsIGdlbmVyaWNQYXRoLmxvY2F0aW9u
KCkpOwogfQogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpoYXNDb25zdGFudChjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkgY29uc3QKQEAgLTI1ODEsMTIgKzI1ODEsOCBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluQnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBwcm9wZXJ0eQogICAgICAgICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9y
SW5Db250ZXh0KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQmIHN0cnVjdHVyZUNvbnRleHQgPSBjb250ZXh0LmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgIE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eTo6ZW1pdDxPcGNvZGVTaXplOjpX
aWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuZW51bWVy
YXRvcigpKTsKLSAgICAgICAgc3RydWN0dXJlQ29udGV4dC5hZGRJbkluc3QobV9sYXN0SW5zdHJ1
Y3Rpb24ub2Zmc2V0KCksIHByb3BlcnR5LT5pbmRleCgpKTsKKyAgICAgICAgT3BFbnVtZXJhdG9y
SW5CeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgY29udGV4
dC5tb2RlKCksIHByb3BlcnR5LCBjb250ZXh0LnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQuZW51
bWVyYXRvcigpKTsKKyAgICAgICAgY29udGV4dC5hZGRJbkluc3QobV9sYXN0SW5zdHJ1Y3Rpb24u
b2Zmc2V0KCksIHByb3BlcnR5LT5pbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGRzdDsKICAgICB9
CiAKQEAgLTI3MzQsMjQgKzI3MzAsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUgogICAgICAg
ICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgaWYgKGNvbnRleHQuaXNJbmRleGVkRm9ySW5Db250ZXh0KCkpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGluZGV4ZWRDb250ZXh0ID0gY29udGV4dC5hc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKTsKLSAgICAgICAgICAgIGtpbGwoZHN0KTsKLSAgICAgICAgICAgIGlmIChPcEdldEJ5VmFs
OjpjaGVja1dpdGhvdXRNZXRhZGF0YUlEPE9wY29kZVNpemU6Ok5hcnJvdz4odGhpcywgZHN0LCBi
YXNlLCBwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFs
bGVzdFNpemVSZXF1aXJlbWVudDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwgYmFzZSwg
aW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChPcEdldEJ5VmFs
OjpjaGVja1dpdGhvdXRNZXRhZGF0YUlEPE9wY29kZVNpemU6OldpZGUxNj4odGhpcywgZHN0LCBi
YXNlLCBwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFs
bGVzdFNpemVSZXF1aXJlbWVudDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwgYmFzZSwg
aW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwg
aW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBpbmRleGVkQ29udGV4dC5hZGRH
ZXRJbnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZHN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgY2Fubm90
IGRvIHRoZSBhYm92ZSBvcHRpbWl6YXRpb24gaGVyZSBzaW5jZSBPcEdldERpcmVjdFBuYW1lID0+
IE9wR2V0QnlWYWwgY29udmVyc2lvbiBpbnZvbHZlcyBkaWZmZXJlbnQgbWV0YWRhdGEgSUQgYWxs
b2NhdGlvbi4KLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0
ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29udGV4dCgpOwotICAgICAgICBPcEdldERpcmVj
dFBuYW1lOjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4odGhpcywga2lsbChkc3QpLCBiYXNlLCBw
cm9wZXJ0eSwgc3RydWN0dXJlQ29udGV4dC5pbmRleCgpLCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0KLSAgICAgICAgc3RydWN0dXJlQ29udGV4dC5hZGRHZXRJbnN0KG1fbGFzdElu
c3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgaGF2ZSBhIGJldHRlciBieXRlY29kZSByZXdyaXRlciB0aGF0IGNhbiByZXNp
emUgY2h1bmtzLgorICAgICAgICBPcEVudW1lcmF0b3JHZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXpl
OjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwgY29udGV4dC5tb2RlKCksIHByb3BlcnR5
LCBjb250ZXh0LnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQuZW51bWVyYXRvcigpKTsKKyAgICAg
ICAgY29udGV4dC5hZGRHZXRJbnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0
eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQogCkBAIC00NTgyLDYgKzQ1
NjMsMTcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNPd25TdHJ1Y3R1
cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2kKICAgICByZXR1cm4gZHN0OwogfQogCit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvck5leHQoUmVnaXN0ZXJJRCogcHJv
cGVydHlOYW1lLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJ
RCogYmFzZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3sKKyAgICBPcEVudW1lcmF0b3JOZXh0
OjplbWl0KHRoaXMsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgsIGJhc2UsIGVudW1lcmF0b3Ip
OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpCit7CisgICAgT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6OmVt
aXQodGhpcywgZHN0LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9y
KTsKKyAgICByZXR1cm4gZHN0OworfQorCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UpCiB7CiAgICAgT3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I6OmVtaXQodGhpcywgZHN0LCBiYXNl
KTsKQEAgLTQ2NDgsMjMgKzQ2NDAsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiAgICAgcmV0dXJu
IGRzdDsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3Bl
KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIpCi17
Ci0gICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQg
Ym9keUJ5dGVjb2RlU3RhcnRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9m
b3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5ldyBJbmRleGVkRm9ySW5Db250ZXh0
KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkp
OwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZShSZWdp
c3RlcklEKiBsb2NhbFJlZ2lzdGVyKQotewotICAgIGlmICghbG9jYWxSZWdpc3RlcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCA9IGluc3RydWN0
aW9ucygpLnNpemUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+YXNJbmRleGVk
Rm9ySW5Db250ZXh0KCkuZmluYWxpemUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwot
fQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0aW9u
TGV4aWNhbEVudmlyb25tZW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBtX2NvZGVCbG9jay0+aXNB
cnJvd0Z1bmN0aW9uQ29udGV4dCgpIHx8IGNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9y
S2luZDo6RXh0ZW5kcyB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlIHx8IG1fY29kZUJsb2NrLT5w
YXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUp
OwpAQCAtNDc2OCwyMCArNDc0MywyMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0
VGhpc1RvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZSgpCiAgICAgfQogfQogCi12b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFy
aWFibGU+IGJhc2VWYXJpYWJsZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZVJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU9mZnNldFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIG1vZGVSZWdpc3Rlciwgc3RkOjpvcHRpb25h
bDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlKQogewogICAgIGlmICghbG9jYWxSZWdpc3RlcikKICAg
ICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0ID0gaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKGFkb3B0
UmVmKCpuZXcgU3RydWN0dXJlRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0
ZXIsIHByb3BlcnR5UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgYmFzZVZhcmlhYmxlLCBi
b2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVu
ZChhZG9wdFJlZigqbmV3IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVS
ZWdpc3RlciwgcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgZW51bWVyYXRvclJlZ2lzdGVyLCBtb2Rl
UmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpKSk7CiB9CiAK
LXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJ
RCogbG9jYWxSZWdpc3RlcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUo
UmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAg
ICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0
cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzU3Ry
dWN0dXJlRm9ySW5Db250ZXh0KCkuZmluYWxpemUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5m
aW5hbGl6ZSgqdGhpcywgbV9jb2RlQmxvY2suZ2V0KCksIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7
CiAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKQEAgLTUzODQsMzQg
KzUzNTksNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayhSZWdp
c3RlcklEKiBzcmMpCiAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5l
d1RlbXBvcmFyeSgpLCBzcmMpLCBtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0
KCkpOwogfQogCi12b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWdu
ZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQotewotICAgIC8vIExleGljYWxseSBpbnZhbGlkYXRp
bmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsgc2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3Vy
cyBpZgotICAgIC8vIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToK
LSAgICAvLwotICAgIC8vICgxKSBUaGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgaXMgcmUtYXNz
aWduZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29wLgotICAgIC8vICgyKSBUaGUgbG9vcCBp
dGVyYXRpb24gdmFyaWFibGUgaXMgY2FwdHVyZWQgaW4gdGhlIGxleGljYWwgc2NvcGUgb2YgdGhl
IGZ1bmN0aW9uLgotICAgIC8vCi0gICAgLy8gVGhlc2UgdHdvIHNpdHVhdGlvbnMgb2NjdXIgc3Vm
ZmljaWVudGx5IHJhcmVseSB0aGF0IGl0J3Mgb2theSB0byB1c2UgdGhpcyBzdHlsZSBvZgotICAg
IC8vICJhbmFseXNpcyIgdG8gbWFrZSBpdGVyYXRpb24gZmFzdGVyLiBJZiB3ZSBkaWRuJ3Qgd2Fu
dCB0byBkbyB0aGlzLCB3ZSB3b3VsZCBlaXRoZXIgaGF2ZQotICAgIC8vIHRvIHBlcmZvcm0gc29t
ZSBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcyB0byBzZWUgaWYvd2hlbiB0aGUgbG9vcCBpdGVyYXRp
b24gdmFyaWFibGUgd2FzCi0gICAgLy8gcmVhc3NpZ25lZCwgb3Igd2UnZCBoYXZlIHRvIHJlc29y
dCB0byBydW50aW1lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHZhcmlhYmxlIGhhZCBiZWVuCi0gICAg
Ly8gcmVhc3NpZ25lZCBmcm9tIGl0cyBvcmlnaW5hbCB2YWx1ZS4KLQotICAgIGZvciAodW5zaWdu
ZWQgb2Zmc2V0ID0gYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoKTsgaXNWYWxpZCgpICYmIG9mZnNl
dCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDspIHsKLSAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9
IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5hdChvZmZzZXQpOwotICAgICAgICBBU1NFUlQoIWlu
c3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsKLSAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNr
cG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07
KSB7Ci0gICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbi5wdHIoKSwgY2hlY2twb2ludCwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkgewotICAgICAgICAgICAgICAgIGlmIChsb2NhbCgpLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBv
cGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfQotICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPbGRPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBPbGRPcFR5cGUsIHR5cGVuYW1lIE5ld09wVHlwZSwgdHlw
ZW5hbWUgVHVwbGVUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5cGUmIGluc3RUdXBsZSkKIHsKICAgICB1bnNpZ25l
ZCBpbnN0SW5kZXggPSBzdGQ6OmdldDwwPihpbnN0VHVwbGUpOwpAQCAtNTQzMSwzNCArNTM3OSw1
MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFR1cGxlVHlwZSYgaW5zdFR1cGxlKQogICAgIC8vIDIuIGJhc2Ugc3RheXMgdGhlIHNh
bWUuCiAgICAgLy8gMy4gcHJvcGVydHkgZ2V0cyBzd2l0Y2hlZCB0byB0aGUgb3JpZ2luYWwgcHJv
cGVydHkuCiAKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxPbGRPcFR5cGUsIE9wR2V0
RGlyZWN0UG5hbWU+Ojp2YWx1ZSkgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEdl
dEJ5VmFsKSA8PSBzaXplb2YoT3BHZXREaXJlY3RQbmFtZSkpOwotICAgICAgICBPcEdldEJ5VmFs
OjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4oJmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5
dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKLSAgICB9
IGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEluU3RydWN0dXJl
UHJvcGVydHk+Ojp2YWx1ZSkgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEluQnlW
YWwpIDw9IHNpemVvZihPcEluU3RydWN0dXJlUHJvcGVydHkpKTsKLSAgICAgICAgT3BJbkJ5VmFs
OjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4oJmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5
dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihOZXdPcFR5cGUpIDw9IHNpemVvZihPbGRPcFR5cGUpKTsKKyAgICBOZXdP
cFR5cGU6OmVtaXQoJmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwg
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKIAogICAgIC8vIDQuIG5vcCBvdXQg
dGhlIHJlbWFpbmluZyBieXRlcwogICAgIHdoaWxlIChnZW5lcmF0b3IubV93cml0ZXIucG9zaXRp
b24oKSA8IGVuZCkKICAgICAgICAgT3BOb3A6OmVtaXQ8T3Bjb2RlU2l6ZTo6TmFycm93PigmZ2Vu
ZXJhdG9yKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKK3ZvaWQgRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCiB7
Ci0gICAgQmFzZTo6ZmluYWxpemUoZ2VuZXJhdG9yLCBjb2RlQmxvY2ssIGJvZHlCeXRlY29kZUVu
ZE9mZnNldCk7Ci0gICAgaWYgKGlzVmFsaWQoKSkKKyAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0
aW5nIEZvckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1
cnMgaWYKKyAgICAvLyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6
CisgICAgLy8KKyAgICAvLyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFz
c2lnbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9vcC4KKyAgICAvLyAoMikgVGhlIGxvb3Ag
aXRlcmF0aW9uIHZhcmlhYmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRo
ZSBmdW5jdGlvbi4KKyAgICAvLworICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1
ZmZpY2llbnRseSByYXJlbHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKKyAg
ICAvLyAiYW5hbHlzaXMiIHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdh
bnQgdG8gZG8gdGhpcywgd2Ugd291bGQgZWl0aGVyIGhhdmUKKyAgICAvLyB0byBwZXJmb3JtIHNv
bWUgZmxvdy1zZW5zaXRpdmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0
aW9uIHZhcmlhYmxlIHdhcworICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNv
cnQgdG8gcnVudGltZSBjaGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgorICAg
IC8vIHJlYXNzaWduZWQgZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCisKKyAgICBib29sIGVzY2Fw
ZWQgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0KCk7ICFlc2NhcGVkICYmIG9mZnNldCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDspIHsK
KyAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5hdChv
ZmZzZXQpOworICAgICAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsKKyAg
ICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZD
aGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgY2hlY2twb2ludCwg
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChsb2Nh
bCgpLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcGVyYW5kKQorICAgICAgICAgICAgICAgICAgICBl
c2NhcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIG9mZnNl
dCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgIH0KKworICAgIGlmICghZXNjYXBlZCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgT3Bjb2RlSUQgbGFzdE9wY29kZUlEID0gZ2VuZXJhdG9yLm1f
bGFzdE9wY29kZUlEOwogICAgIEluc3RydWN0aW9uU3RyZWFtOjpNdXRhYmxlUmVmIGxhc3RJbnN0
cnVjdGlvbiA9IGdlbmVyYXRvci5tX2xhc3RJbnN0cnVjdGlvbjsKIAogICAgIGZvciAoY29uc3Qg
YXV0byYgaW5zdFR1cGxlIDogbV9nZXRJbnN0cykKLSAgICAgICAgcmV3cml0ZU9wPE9wR2V0RGly
ZWN0UG5hbWU+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9wRW51
bWVyYXRvckdldEJ5VmFsLCBPcEdldEJ5VmFsPihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBsZSA6IG1faW5JbnN0cykKLSAgICAgICAgcmV3cml0
ZU9wPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOworICAgICAg
ICByZXdyaXRlT3A8T3BFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbkJ5VmFsPihnZW5lcmF0b3IsIGlu
c3RUdXBsZSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhhc093blByb3BlcnR5VHVwbGUgOiBt
X2hhc093blByb3BlcnR5SnVtcEluc3RzKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KE9wSm1wKSA8PSBzaXplb2YoT3BKbmVxUHRyKSk7CkBAIC01NDg3LDIyICs1NDUzLDYgQEAgdm9p
ZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFVubGlua2VkQ29kZUIKICAgICB9CiB9CiAKLXZvaWQgSW5kZXhlZEZvckluQ29udGV4
dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQot
ewotICAgIEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVF
bmRPZmZzZXQpOwotICAgIGlmIChpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgaW5zdFBhaXIgOiBtX2dldEluc3RzKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGluc3RJbmRleCA9IGluc3RQYWlyLmZpcnN0OwotICAgICAgICBpbnQgcHJvcGVydHlSZWdJbmRl
eCA9IGluc3RQYWlyLnNlY29uZDsKLSAgICAgICAgZ2VuZXJhdG9yLm1fd3JpdGVyLnJlZihpbnN0
SW5kZXgpLT5jYXN0PE9wR2V0QnlWYWw+KCktPnNldFByb3BlcnR5KFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eVJlZ0luZGV4KSwgW10oKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgfSk7Ci0g
ICAgfQotfQotCiB2b2lkIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXM6OnJlY29yZCgpCiB7CiAgICAg
YXV0byogaW5zdHJ1Y3Rpb24gPSBtX2luc3RydWN0aW9uUmVmLnB0cigpOwpAQCAtNTUyOCwxNyAr
NTQ3OCwxNCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9UaGlzKCkKICAgICBPcFRv
VGhpczo6ZW1pdCh0aGlzLCBraWxsKCZtX3RoaXNSZWdpc3RlciksIGVjbWFNb2RlKCkpOwogfQog
Ci1TdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5kU3RydWN0dXJl
Rm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KQorRm9ySW5Db250ZXh0KiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZmluZEZvckluQ29udGV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eSkKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCk7IGktLTsgKSB7CiAg
ICAgICAgIEZvckluQ29udGV4dCYgY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaV0uZ2V0
KCk7CiAgICAgICAgIGlmIChjb250ZXh0LmxvY2FsKCkgIT0gcHJvcGVydHkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIWNvbnRleHQuaXNTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHJldHVybiAmY29udGV4dC5hc1N0
cnVjdHVyZUZvckluQ29udGV4dCgpOworICAgICAgICByZXR1cm4gJmNvbnRleHQ7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggMmY1ZmY3MjMyNjQyNmIxMmU0
YTAzY2NjN2NmZGI2ODRkYWU1OTkxNC4uMzM1NDE4NTkyODgxOWIzMjcxMmFkNTE4YzU3OWZkMjdi
ZTFmYjIzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNjEsOCArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIEpTSW1tdXRhYmxlQnV0dGVyZmx5OwogICAgIGNsYXNzIElkZW50aWZpZXI7
Ci0gICAgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dDsKLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ7CisgICAgY2xhc3MgRm9ySW5Db250ZXh0OwogCiAgICAgZW51bSBFeHBlY3RlZEZ1
bmN0aW9uIHsKICAgICAgICAgTm9FeHBlY3RlZEZ1bmN0aW9uLApAQCAtMjU1LDcyICsyNTQsMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRm9ySW5Db250ZXh0IDogcHVibGljIFJlZkNv
dW50ZWQ8Rm9ySW5Db250ZXh0PiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb3JJbkNvbnRleHQpOwotICAgIHB1YmxpYzoK
LSAgICAgICAgdmlydHVhbCB+Rm9ySW5Db250ZXh0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQotICAgICAgICB2b2lkIGlu
dmFsaWRhdGUoKSB7IG1faXNWYWxpZCA9IGZhbHNlOyB9Ci0KLSAgICAgICAgZW51bSBjbGFzcyBU
eXBlIDogdWludDhfdCB7Ci0gICAgICAgICAgICBJbmRleGVkRm9ySW4sCi0gICAgICAgICAgICBT
dHJ1Y3R1cmVGb3JJbgotICAgICAgICB9OwotCi0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBib29sIGlzSW5kZXhlZEZvckluQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpJbmRleGVkRm9ySW47IH0KLSAgICAgICAgYm9v
bCBpc1N0cnVjdHVyZUZvckluQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBl
OjpTdHJ1Y3R1cmVGb3JJbjsgfQotCi0gICAgICAgIEluZGV4ZWRGb3JJbkNvbnRleHQmIGFzSW5k
ZXhlZEZvckluQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0luZGV4
ZWRGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
SW5kZXhlZEZvckluQ29udGV4dCo+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RydWN0
dXJlRm9ySW5Db250ZXh0JiBhc1N0cnVjdHVyZUZvckluQ29udGV4dCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChpc1N0cnVjdHVyZUZvckluQ29udGV4dCgpKTsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBUeXBlIHR5cGUsIHVuc2lnbmVkIGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgOiBtX2xvY2FsUmVnaXN0ZXIobG9j
YWxSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCi0gICAgICAgICAgICAsIG1f
Ym9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAg
IHsgfQotCi0gICAgICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldDsgfQotCi0gICAgICAgIHZvaWQgZmlu
YWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIHVu
c2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJlZ2lzdGVyOwotICAgICAgICBib29sIG1faXNWYWxp
ZCB7IHRydWUgfTsKLSAgICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgICAgIHVuc2lnbmVkIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7Ci0gICAgfTsKLQotICAgIGNsYXNzIFN0cnVjdHVyZUZvcklu
Q29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQgewotICAgICAgICB1c2luZyBCYXNlID0gRm9y
SW5Db250ZXh0OwogICAgIHB1YmxpYzoKICAgICAgICAgdXNpbmcgR2V0SW5zdCA9IHN0ZDo6dHVw
bGU8dW5zaWduZWQsIGludD47CiAgICAgICAgIHVzaW5nIEluSW5zdCA9IEdldEluc3Q7CiAgICAg
ICAgIHVzaW5nIEhhc093blByb3BlcnR5SnVtcEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCB1
bnNpZ25lZD47CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3Bl
cnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JSZWdpc3Rlciwgc3RkOjpvcHRpb25h
bDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dCkKLSAgICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIFR5cGU6OlN0cnVj
dHVyZUZvckluLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgICwgbV9pbmRl
eFJlZ2lzdGVyKGluZGV4UmVnaXN0ZXIpCi0gICAgICAgICAgICAsIG1fcHJvcGVydHlSZWdpc3Rl
cihwcm9wZXJ0eVJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX2VudW1lcmF0b3JSZWdpc3Rlcihl
bnVtZXJhdG9yUmVnaXN0ZXIpCi0gICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJp
YWJsZSkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorICAgICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1faXNW
YWxpZCA9IGZhbHNlOyB9CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLSAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVy
dHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0ZXIuZ2V0KCk7IH0KLSAgICAgICAg
UmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvclJlZ2lz
dGVyLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlOYW1lLmdldCgpOyB9CisgICAgICAgIFJlZ2lz
dGVySUQqIHByb3BlcnR5T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU9mZnNldC5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9lbnVtZXJhdG9yLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIG1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGUuZ2V0KCk7IH0KICAgICAgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxWYXJp
YWJsZT4mIGJhc2VWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVZhcmlhYmxlOyB9CiAK
ICAgICAgICAgdm9pZCBhZGRHZXRJbnN0KHVuc2lnbmVkIGluc3RJbmRleCwgaW50IHByb3BlcnR5
UmVnSW5kZXgpCkBAIC0zMzgsMzcgKzI4NCwzNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHMuYXBwZW5kKEhhc093blByb3BlcnR5SnVtcElu
c3QgeyBicmFuY2hJbnN0SW5kZXgsIGdlbmVyaWNQYXRoVGFyZ2V0IH0pOwogICAgICAgICB9CiAK
KyAgICAgICAgRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlPZmZzZXQsIFJlZ2lzdGVySUQq
IGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIG1vZGUsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCisgICAgICAgICAg
ICA6IG1fbG9jYWxSZWdpc3Rlcihsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX3Byb3Bl
cnR5TmFtZShwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICAsIG1fcHJvcGVydHlPZmZzZXQocHJv
cGVydHlPZmZzZXQpCisgICAgICAgICAgICAsIG1fZW51bWVyYXRvcihlbnVtZXJhdG9yKQorICAg
ICAgICAgICAgLCBtX21vZGUobW9kZSkKKyAgICAgICAgICAgICwgbV9iYXNlVmFyaWFibGUoYmFz
ZVZhcmlhYmxlKQorICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KGJvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICB7IH0KKworICAgICAgICB1bnNpZ25lZCBib2R5
Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQ7IH0KKwogICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQp
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdp
c3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVydHlSZWdpc3RlcjsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvclJlZ2lzdGVyOworICAgICAgICAv
LyBUT0RPOiAgRG9lcyB0aGlzIHJlYWxseSBuZWVkIHRvIGJlIGEgUmVmUHRyPworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJlZ2lzdGVyOworICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gbV9wcm9wZXJ0eU5hbWU7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3Bl
cnR5T2Zmc2V0OworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9lbnVtZXJhdG9yOworICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9tb2RlOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFZh
cmlhYmxlPiBtX2Jhc2VWYXJpYWJsZTsKLSAgICAgICAgVmVjdG9yPEdldEluc3Q+IG1fZ2V0SW5z
dHM7CisgICAgICAgIGJvb2wgbV9pc1ZhbGlkIHsgdHJ1ZSB9OworICAgICAgICB1bnNpZ25lZCBt
X2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OwogICAgICAgICBWZWN0b3I8SW5JbnN0PiBtX2luSW5z
dHM7CisgICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOwogICAgICAgICBWZWN0b3I8
SGFzT3duUHJvcGVydHlKdW1wSW5zdD4gbV9oYXNPd25Qcm9wZXJ0eUp1bXBJbnN0czsKICAgICB9
OwogCi0gICAgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQg
ewotICAgICAgICB1c2luZyBCYXNlID0gRm9ySW5Db250ZXh0OwotICAgIHB1YmxpYzoKLSAgICAg
ICAgSW5kZXhlZEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEKiBpbmRleFJlZ2lzdGVyLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAg
ICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIFR5cGU6OkluZGV4ZWRGb3JJ
biwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3Rl
cihpbmRleFJlZ2lzdGVyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpc3Rl
cklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhSZWdpc3Rlci5nZXQoKTsgfQotCi0g
ICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0gICAgICAgIHZv
aWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eUluZGV4KSB7IG1f
Z2V0SW5zdHMuYXBwZW5kKHsgaW5zdEluZGV4LCBwcm9wZXJ0eUluZGV4IH0pOyB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVyOwotICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCBpbnQ+PiBtX2dldEluc3RzOwotICAgIH07
Ci0KICAgICBzdHJ1Y3QgVHJ5RGF0YSB7CiAgICAgICAgIFJlZjxMYWJlbD4gdGFyZ2V0OwogICAg
ICAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZTsKQEAgLTM5OSwxMSArMzQzLDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZUdlbmVyYXRv
cik7CiAKICAgICAgICAgZnJpZW5kIGNsYXNzIEZpbmFsbHlDb250ZXh0OwotICAgICAgICBmcmll
bmQgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVj
dHVyZUZvckluQ29udGV4dDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEZvckluQ29udGV4dDsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFN0cmljdE1vZGVTY29wZTsKIAotICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+CisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPbGRPcFR5cGUsIHR5cGVuYW1lIE5ld09wVHlwZSwgdHlwZW5hbWUgVHVwbGVU
eXBlPgogICAgICAgICBmcmllbmQgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImLCBU
dXBsZVR5cGUmKTsKIAogICAgIHB1YmxpYzoKQEAgLTY4MSw3ICs2MjQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGhvaXN0U2xvcHB5TW9kZUZ1bmN0aW9uSWZOZWNlc3Nhcnko
Y29uc3QgSWRlbnRpZmllciYgZnVuY3Rpb25OYW1lKTsKIAotICAgICAgICBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQqIGZpbmRTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkp
OworICAgICAgICBGb3JJbkNvbnRleHQqIGZpbmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJv
cGVydHkpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBlbWl0VHlwZVByb2ZpbGVyRXhw
cmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmREaXZvdCk7CkBAIC05MTcsNyArODYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChSZWdpc3RlcklEKiBjb25k
LCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcElmTm90RnVuY3Rpb25BcHBs
eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdW5zaWduZWQgZW1p
dFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lzdGVySUQqIGNvbmQsIExh
YmVsJiB0YXJnZXQpOwotICAgICAgICB2b2lkIHJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5
SW5Gb3JJbkxvb3AoU3RydWN0dXJlRm9ySW5Db250ZXh0JiwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0
LCBMYWJlbCYgZ2VuZXJpY1BhdGgpOworICAgICAgICB2b2lkIHJlY29yZEhhc093blByb3BlcnR5
SW5Gb3JJbkxvb3AoRm9ySW5Db250ZXh0JiwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYg
Z2VuZXJpY1BhdGgpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbk9wLCB0eXBlbmFt
ZSBKbXBPcD4KICAgICAgICAgYm9vbCBmdXNlQ29tcGFyZUFuZEp1bXAoUmVnaXN0ZXJJRCogY29u
ZCwgTGFiZWwmIHRhcmdldCwgYm9vbCBzd2FwT3BlcmFuZHMgPSBmYWxzZSk7CkBAIC05MzQsNiAr
ODc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEVudW1lcmFibGVMZW5n
dGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKyAgICAgICAgdm9pZCBlbWl0
RW51bWVyYXRvck5leHQoUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBtb2Rl
LCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvcik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdp
c3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVt
ZXJhdG9yKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51
bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxl
bmd0aCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3Ro
LCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdEVudW1lcmF0b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CkBAIC05NTcsNyArOTAyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NhbGxhYmxlKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dElzQ29uc3RydWN0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0SXNOdW1iZXIoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBz
cmMpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNOdWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNy
YywgZW1pdExvYWQobnVsbHB0ciwganNOdWxsKCkpKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXNOdWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0
VW5hcnlPcDxPcEVxTnVsbD4oZHN0LCBzcmMpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJ
c1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1p
dEVxdWFsaXR5T3A8T3BTdHJpY3RlcT4oZHN0LCBzcmMsIGVtaXRMb2FkKG51bGxwdHIsIGpzVW5k
ZWZpbmVkKCkpKTsgfQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNVbmRlZmluZWRPck51bGwo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXNFbXB0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CkBAIC0xMDU3LDEw
ICsxMDAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcG9wT3B0aW9uYWxDaGFp
blRhcmdldChSZWdpc3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUpOwogICAgICAgICB2b2lkIGVt
aXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYyk7CiAKLSAgICAgICAgdm9pZCBwdXNoSW5k
ZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4KTsKLSAg
ICAgICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7Ci0gICAg
ICAgIHZvaWQgcHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lz
dGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogZW51bWVyYXRv
ciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZSk7Ci0gICAgICAgIHZvaWQgcG9wU3RydWN0
dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7CisgICAgICAgIHZvaWQgcHVzaEZvcklu
U2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXQsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQq
IG1vZGUsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOworICAgICAgICB2b2lkIHBvcEZv
ckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwogCiAgICAgICAgIExhYmVsU2NvcGUqIGJyZWFr
VGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTGFiZWxTY29wZSogY29udGludWVU
YXJnZXQoY29uc3QgSWRlbnRpZmllciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDlhY2E1MTRlNjU1M2JhYWU0NDgz
YWU0NGNhYjVlZGM5NjYxYzRmZjcuLmMyNmM1NDkxYTdiZDZjYzM2ZWNkNmUyNjBiNGJmNTczMWNi
ZDNmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAKQEAgLTIxMzEsMjQgKzIxMzEsMjQgQEAgUmVnaXN0ZXJJRCogSGFzT3du
UHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGcKICAgICBSRUxFQVNFX0FTU0VSVChtX2FyZ3MtPm1fbGlzdE5vZGUgJiYgbV9hcmdzLT5t
X2xpc3ROb2RlLT5tX2V4cHIgJiYgIW1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0KTsgIAogICAg
IEV4cHJlc3Npb25Ob2RlKiBhcmd1bWVudCA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByOwog
ICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50LT5pc1Jlc29sdmVOb2RlKCkpOwotICAgIFN0cnVj
dHVyZUZvckluQ29udGV4dCogc3RydWN0dXJlQ29udGV4dCA9IG51bGxwdHI7CisgICAgRm9ySW5D
b250ZXh0KiBjb250ZXh0ID0gbnVsbHB0cjsKICAgICBWYXJpYWJsZSBhcmd1bWVudFZhcmlhYmxl
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oYXJndW1lbnQp
LT5pZGVudGlmaWVyKCkpOwogICAgIGlmIChhcmd1bWVudFZhcmlhYmxlLmlzTG9jYWwoKSkgewog
ICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGFyZ3VtZW50VmFyaWFibGUubG9jYWwoKTsK
LSAgICAgICAgc3RydWN0dXJlQ29udGV4dCA9IGdlbmVyYXRvci5maW5kU3RydWN0dXJlRm9ySW5D
b250ZXh0KHByb3BlcnR5KTsKKyAgICAgICAgY29udGV4dCA9IGdlbmVyYXRvci5maW5kRm9ySW5D
b250ZXh0KHByb3BlcnR5KTsKICAgICB9CiAKICAgICBhdXRvIGNhblVzZUZhc3RIYXNPd25Qcm9w
ZXJ0eSA9IFsmXSB7Ci0gICAgICAgIGlmICghc3RydWN0dXJlQ29udGV4dCkKKyAgICAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXN0cnVj
dHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpKQorICAgICAgICBpZiAoIWNvbnRleHQtPmJhc2VW
YXJpYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAobV9iYXNl
LT5pc1Jlc29sdmVOb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxl
KHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKSA9PSBzdHJ1
Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKS52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlk
ZW50aWZpZXIoKSkgPT0gY29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKICAgICAgICAg
aWYgKG1fYmFzZS0+aXNUaGlzTm9kZSgpKSB7CiAgICAgICAgICAgICAvLyBBZnRlciBnZW5lcmF0
b3IuZW5zdXJlVGhpcyAod2hpY2ggbXVzdCBiZSBpbnZva2VkIGluIHxiYXNlfCdzIG1hdGVyaWFs
aXphdGlvbiksIHdlIGNhbiBlbnN1cmUgdGhhdCB8dGhpc3wgaXMgaW4gbG9jYWwgdGhpcy1yZWdp
c3Rlci4KICAgICAgICAgICAgIEFTU0VSVChiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS50
aGlzUHJpdmF0ZU5hbWUoKSwgVGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCkgPT0gc3RydWN0dXJl
Q29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS50
aGlzUHJpdmF0ZU5hbWUoKSwgVGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCkgPT0gY29udGV4dC0+
YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfTsKQEAgLTIxNjAsNyArMjE2MCw3IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAg
ICAgICAgIFJlZjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKICAgICAgICAg
dW5zaWduZWQgYnJhbmNoSW5zbk9mZnNldCA9IGdlbmVyYXRvci5lbWl0V2lkZUp1bXBJZk5vdEZ1
bmN0aW9uSGFzT3duUHJvcGVydHkoZnVuY3Rpb24uZ2V0KCksIHJlYWxDYWxsLmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShyZXR1cm5WYWx1ZS5n
ZXQoKSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3VtZW50KSwgc3RydWN0dXJl
Q29udGV4dC0+ZW51bWVyYXRvcigpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGNvbnRleHQtPm1v
ZGUoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3VtZW50KSwgY29udGV4dC0+cHJvcGVydHlPZmZz
ZXQoKSwgY29udGV4dC0+ZW51bWVyYXRvcigpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KGVuZC5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChyZWFsQ2FsbC5nZXQo
KSk7CkBAIC0yMTcyLDcgKzIxNzIsNyBAQCBSZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0
aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZwogCiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3Iu
cmVjb3JkSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCgqc3RydWN0dXJlQ29udGV4
dCwgYnJhbmNoSW5zbk9mZnNldCwgcmVhbENhbGwpOworICAgICAgICBnZW5lcmF0b3IucmVjb3Jk
SGFzT3duUHJvcGVydHlJbkZvckluTG9vcCgqY29udGV4dCwgYnJhbmNoSW5zbk9mZnNldCwgcmVh
bENhbGwpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwpAQCAtNDE4NCw4ICs0MTg0LDYgQEAgdm9p
ZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiAgICAgaWYgKGdlbmVyYXRvci5zaG91bGRCZUNvbmNlcm5lZFdpdGhD
b21wbGV0aW9uVmFsdWUoKSAmJiBtX3N0YXRlbWVudC0+aGFzRWFybHlCcmVha09yQ29udGludWUo
KSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNVbmRlZmluZWQoKSk7CiAKLSAg
ICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotCiAgICAgUmVnaXN0ZXJJ
RCogZm9yTG9vcFN5bWJvbFRhYmxlID0gbnVsbHB0cjsKICAgICBnZW5lcmF0b3IucHVzaExleGlj
YWxTY29wZSh0aGlzLCBCeXRlY29kZUdlbmVyYXRvcjo6U2NvcGVUeXBlOjpMZXRDb25zdFNjb3Bl
LCBCeXRlY29kZUdlbmVyYXRvcjo6VERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplLCBCeXRl
Y29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3RlZCwgJmZvckxvb3BTeW1ib2xU
YWJsZSk7CiAKQEAgLTQxOTMsMTIgKzQxOTEsMTAgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpLCBtX2xleHBy
KTsKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsZW5ndGg7Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGVudW1lcmF0b3I7CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwgbV9l
eHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB0aGlzLT50cnlHZXRCb3VuZExv
Y2FsKGdlbmVyYXRvcik7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGVudW1lcmF0b3JJbmRleDsK
KwogCiAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlOwogICAgIGlmICht
X2V4cHItPmlzUmVzb2x2ZU5vZGUoKSkKQEAgLTQyMDksMTM3ICs0MjA1LDQ2IEBAIHZvaWQgRm9y
SW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogICAgICAgICBiYXNlVmFyaWFibGUgPSBnZW5lcmF0b3IudmFyaWFibGUoZ2Vu
ZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS50aGlzUHJpdmF0ZU5hbWUoKSwg
VGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCk7CiAgICAgfQogCi0gICAgLy8gUGF1c2UgYXQgdGhl
IGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBmb3IgZWFjaCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAgICBn
ZW5lcmF0b3IuZW1pdERlYnVnSG9vayhtX2xleHByKTsKLQogICAgIGludCBwcm9maWxlclN0YXJ0
T2Zmc2V0ID0gbV9zdGF0ZW1lbnQtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgaW50IHByb2ZpbGVyRW5k
T2Zmc2V0ID0gbV9zdGF0ZW1lbnQtPmVuZE9mZnNldCgpICsgKG1fc3RhdGVtZW50LT5pc0Jsb2Nr
KCkgPyAxIDogMCk7CiAKLSAgICBlbnVtZXJhdG9yID0gZ2VuZXJhdG9yLmVtaXRHZXRQcm9wZXJ0
eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpKTsKLQotICAg
IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcmVzZXJ2ZWRURFpTdGFjayBwcmVzZXJ2ZWRURFpTdGFjazsK
LSAgICBnZW5lcmF0b3IucHJlc2VydmVURFpTdGFjayhwcmVzZXJ2ZWRURFpTdGFjayk7Ci0KLSAg
ICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AuCiAgICAgewotICAgICAgICBSZWY8TGFiZWxTY29w
ZT4gc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAg
ICAgICAgUmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAg
ICAgUmVmPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0KLSAgICAgICAg
bGVuZ3RoID0gZ2VuZXJhdG9yLmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgZW51bWVyYXRvci5nZXQoKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBpID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1i
ZXIoMCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZW51bWVyYXRvciA9IGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1vZGUgPSBnZW5l
cmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbml0TW9kZSkpKTsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOwogICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMb29wSGludCgpOwotCi0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBn
ZW5lcmF0b3IuZW1pdEJpbmFyeU9wPE9wTGVzcz4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBp
LmdldCgpLCBsZW5ndGguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNl
KHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFz
RW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0
KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgKnNj
b3BlLT5jb250aW51ZVRhcmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFRvSW5kZXhT
dHJpbmcocHJvcGVydHlOYW1lLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgdGhpcy0+ZW1pdExv
b3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyU3RhcnRPZmZzZXQpOwotCi0gICAg
ICAgIGdlbmVyYXRvci5wdXNoSW5kZXhlZEZvckluU2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0KCkp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAg
IGdlbmVyYXRvci5wb3BJbmRleGVkRm9ySW5TY29wZShsb2NhbC5nZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwotCi0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlv
bih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEluYyhp
LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBh
dXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRp
b24uCi0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotCi0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJl
bChsb29wRW5kLmdldCgpKTsKLSAgICB9Ci0gICAgZ2VuZXJhdG9yLnJlc3RvcmVURFpTdGFjayhw
cmVzZXJ2ZWRURFpTdGFjayk7Ci0KLSAgICAvLyBTdHJ1Y3R1cmUgcHJvcGVydHkgbG9vcC4KLSAg
ICB7CiAgICAgICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNj
b3BlKExhYmVsU2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKIAotICAgICAgICBlbnVtZXJhdG9ySW5kZXggPSBnZW5lcmF0b3IuZW1p
dExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7Ci0gICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5TmFtZShw
cm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7Ci0KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgcHJvcGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVl
KHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFz
RW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJv
cGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0K
LSAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0
KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVy
U3RhcnRPZmZzZXQpOwotCi0gICAgICAgIGdlbmVyYXRvci5wdXNoU3RydWN0dXJlRm9ySW5TY29w
ZShsb2NhbC5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCks
IGVudW1lcmF0b3IuZ2V0KCksIGJhc2VWYXJpYWJsZSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKLSAgICAgICAgZ2VuZXJhdG9yLnBvcFN0cnVjdHVyZUZv
ckluU2NvcGUobG9jYWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNv
bnRyb2xGbG93KHByb2ZpbGVyRW5kT2Zmc2V0KTsKKyAgICAgICAgZW51bWVyYXRvciA9IGdlbmVy
YXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
YmFzZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChwcm9w
ZXJ0eU5hbWUuZ2V0KCksIExpbmtUaW1lQ29uc3RhbnQ6OmVtcHR5UHJvcGVydHlOYW1lRW51bWVy
YXRvcik7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihwcm9w
ZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShwcm9wZXJ0eU5hbWUuZ2V0KCksIHNjb3Bl
LT5icmVha1RhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKICAg
ICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlv
bih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEluYyhl
bnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9v
ayhtX2xleHByKTsgLy8gUGF1c2UgYXQgdGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBmb3IgZWFj
aCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGxvb3BTdGFy
dC5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdl
bmVyYXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gR2Vu
ZXJpYyBwcm9wZXJ0eSBsb29wLgotICAgIHsKLSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3Bl
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJl
ZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxM
YWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotCi0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0KLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0
eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7CiAK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICBn
ZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7Ci0KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
c3VsdCA9IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJv
cGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3Vs
dC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2
ZSBhIHdheSB0byBzZWUgaWYgYW55b25lIGlzIGFjdHVhbGx5IHVzaW5nIHRoZSBwcm9wZXJ0eU5h
bWUgZm9yIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZ2V0X2J5X3ZhbC4gSWYgbm90LCB3ZSBjb3Vs
ZCBlbGltaW5hdGUgdGhlIHRvU3RyaW5nIGluIHRoaXMgb3Bjb2RlLgorICAgICAgICBnZW5lcmF0
b3IuZW1pdEVudW1lcmF0b3JOZXh0KHByb3BlcnR5TmFtZS5nZXQoKSwgbW9kZS5nZXQoKSwgaW5k
ZXguZ2V0KCksIGJhc2UuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCkpOwogCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwg
cHJvcGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShy
ZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIC8vIE5vdGUs
IGNob29zaW5nIHVuZGVmaW5lZCBvciBudWxsIGhlbHBzIHBsZWFzZSBERkcncyBBYnN0cmFjdCBJ
bnRlcnByZXRlciBhcyBpdCBkb2Vzbid0IGRpc3Rpbmd1aXNoIG51bGwgYW5kIHVuZGVmaW5lZCBh
cyB0eXBlcyAodmlhIFNwZWNPdGhlcikuCisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1
ZShnZW5lcmF0b3IuZW1pdElzVW5kZWZpbmVkT3JOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgcHJvcGVydHlOYW1lLmdldCgpKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogCiAgICAgICAg
IHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKIAog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zm
c2V0KTsKIAorICAgICAgICBnZW5lcmF0b3IucHVzaEZvckluU2NvcGUobG9jYWwuZ2V0KCksIHBy
b3BlcnR5TmFtZS5nZXQoKSwgaW5kZXguZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIG1vZGUuZ2V0
KCksIGJhc2VWYXJpYWJsZSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3Rh
dGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEZvckluU2NvcGUobG9jYWwuZ2V0KCkpOwog
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
LSAgICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJh
dGlvbih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdElu
YyhlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0
b3JHZW5lcmljUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQo
KSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hv
b2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVh
Y2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3Rh
cnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9m
aWxlckVuZE9mZnNldCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcCgqc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFr
VGFyZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKICAgICB9CiAKLSAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLnBvcExleGljYWxTY29w
ZSh0aGlzKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVu
ZE9mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNGI1ZjBkNjIwMDllZTY5MGJkZGY0
MzMwMTAyMjhhZDBhNGFlNDY3NS4uMDY0MGMyYTA1ODZiZWJmMWVhZTAxZjkxYTA4OGM2YWRkMzM3
OGUyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMjE1MSw3ICsyMTUxLDE0IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIHNldEZvck5v
ZGUobm9kZSwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIHRoZSBjb2RlIGJlbG93IHRvIGRldGVy
bWluZSB0aGUgZWZmZWN0cyBvZiB0aGUgbm9kZSB3aGVuIHByb3BlcnR5TmFtZSA9PSBpbmRleC4K
KyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICBjYXNl
IEF0b21pY3NBZGQ6CiAgICAgY2FzZSBBdG9taWNzQW5kOgpAQCAtMjE2MiwxMiArMjE2OSw5IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBBdG9taWNzU3RvcmU6CiAgICAgY2Fz
ZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjogeworICAgICAgICAvLyBXZSBjb3Vs
ZCBkbyB0aGlzIGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgYnV0IGl0J3MgdW5saWtlbHkgdG8gYmUg
dXNlZnVsIGluIHByYWN0aWNlLgogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkg
ewogICAgICAgICAgICAgYXV0byBmb2xkR2V0QnlWYWxPbkNvbnN0YW50UHJvcGVydHkgPSBbJl0g
KEVkZ2UmIGFycmF5RWRnZSwgRWRnZSYgaW5kZXhFZGdlKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGNhbiBleHBhbmQgdGhpcyBmb3Igbm9uIHg4NiBlbnZpcm9ubWVudHMuCi0gICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NDY0MQotICAgICAgICAgICAgICAgIGlmICghaXNYODYoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1
ZSA9IGZvck5vZGUoYXJyYXlFZGdlKTsKIApAQCAtNDMwNCw2ICs0MzA4LDQ5IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgRW51bWVy
YXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzU2FuZUNoYWlu
KCkpCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSk7CisgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpICE9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFt
ZWRNb2RlIHx8IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpICE9IENlbGxV
c2UpCisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKworICAgICAgICBzZXROb25DZWxsVHlw
ZUZvck5vZGUobm9kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNO
dW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYm
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwKS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNhc2UgRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIHNldFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blBy
b3BlcnR5OiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdoZW4gdGhlIHBy
b3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAgICAgIC8vIHZh
bHVlIGluZm9ybWF0aW9uLgorICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAppbmRleCAxMTExZjg5ZjlkN2I1Yjk3Nzc4YzE2YzhkNTQ2NDBiZWEzNzQ0MmIyLi5hMDI2
YWFkMTg5M2JmMjNjNTcxOTZmY2M2YzkxZmMyMDAwM2M0NTY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKQEAgLTI4OSw2ICsyODksMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47
CiAgICAgfQogCisgICAgYm9vbCBpc1NhbmVDaGFpbigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNJbkJvdW5kc1NhbmVDaGFpbigpIHx8IGlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKTsK
KyAgICB9CisKICAgICBib29sIGlzT3V0T2ZCb3VuZHMoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzIHx8IHNwZWN1bGF0aW9u
KCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5k
ZXggZGIzN2Y0ZGRkYmY4MGNkNjZlYjU3ODdkN2JhYTJiZjUzYWY4OTA3Ni4uOWRiZDBiNDdkOWRm
ZjRjZjYwMzhhZjUwMDE3OTM0OGJlMGFlYTI5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0z
OTAsNyArMzkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKGZsYWdzICYgfk5vZGVCeXRlY29kZU5lZWRzTmVnWmVybyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
R2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNlc0FzVmFsdWUp
OwogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVyZ2VGbGFncyhO
b2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlciB8IE5vZGVC
eXRlY29kZVVzZXNBc0ludCB8IE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBhMjk2
YzRiODdjODU4ODY0ZmJkZWRkNzRlZjcyN2U1NGQ5NWZkNjk0Li4yMDI1MTNmZTczMTkxNzRmYTc3
YzYzNmExYzFiZDA4MDI3NGZhNWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtODQ4Niw2ICs4NDg2LDEzMiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfdG9faW5kZXhfc3RyaW5nKTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9uZXh0OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOworICAgICAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJy
YXk6OlJlYWQpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2Up
OworICAgICAgICAgICAgTm9kZSogaW5kZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAg
ICAgICAgICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7Cisg
ICAgICAgICAgICBOb2RlKiBtb2RlID0gZ2V0KGJ5dGVjb2RlLm1fbW9kZSk7CisKKyAgICAgICAg
ICAgIGF1dG8gc2Vlbk1vZGVzID0gbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGE7CisKKyAg
ICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
Y2VPU1JFeGl0KTsKKworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCht
b2RlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIHN0b3JhZ2UgZm9yIEluZGV4ZWRNb2RlIG9u
bHkuCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVkSW5kZXhBbmRNb2RlID0gYWRkVG9HcmFwaChO
b2RlOjpWYXJBcmcsIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNlZW5Nb2RlcykpOworCisgICAgICAgICAgICBOb2Rl
KiB1cGRhdGVkTW9kZSA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSwgdXBk
YXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9tb2RlLCB1cGRh
dGVkTW9kZSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRJbmRleCA9IGFkZFRvR3JhcGgo
RW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIHVwZGF0ZWRJbmRleEFuZE1vZGUpOworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1faW5kZXgsIHVwZGF0ZWRJbmRleCk7CisKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSwgYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dFVw
ZGF0ZVByb3BlcnR5TmFtZSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9kZSwgZW51bWVyYXRvcikp
OworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX25leHQpOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6IHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
dEJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5
TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQo
KTsKKworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAg
ICAgICAgICAgTm9kZSogcHJvcGVydHlOYW1lID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAg
ICAgICAgICAgTm9kZSogbW9kZSA9IGdldChieXRlY29kZS5tX21vZGUpOworICAgICAgICAgICAg
Tm9kZSogZW51bWVyYXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOworCisgICAgICAg
ICAgICBhdXRvIHNlZW5Nb2RlcyA9IE9wdGlvblNldDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok1vZGU+Ojpmcm9tUmF3KG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICAgICAg
ICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JF
eGl0KTsKKworICAgICAgICAgICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICAgICAgTm9kZSogYmFkTW9kZSA9IGFk
ZFRvR3JhcGgoQXJpdGhCaXRBbmQsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TmFtZWRNb2RlKSkpOworCisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgQXJpdGhCaXRB
bmQgY2Fubm90IGhhdmUgZWZmZWN0cyBzbyBpdCdzIG9rIHRvIGV4aXQgaGVyZS4KKyAgICAgICAg
ICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChFeGl0
T0spOworCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5m
byhtX2dyYXBoLmZyZWV6ZVN0cm9uZyhqc051bWJlcigwKSkpLCBiYWRNb2RlKTsKKworICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGluZGV4KTsgLy8gVXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4
ZWQgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRy
KTsgLy8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0QnlW
YWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisK
KyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2tpbmcgZm9yIGEgQmFkQ29uc3RhbnRWYWx1
ZSBjYXVzZXMgdXMgdG8gYWx3YXlzIHVzZSB0aGUgR2VuZXJpYyB2YXJpYW50IGlmIHdlIHN3aXRj
aGVkIGZyb20gSW5kZXhlZE1vZGUgLT4gSW5kZXhlZE1vZGUgKyBOYW1lZE1vZGUgZXZlbiB0aG91
Z2ggdGhhdCBtaWdodCBiZSBmaW5lLgorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMuY29udGFp
bnNBbnkoeyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG1vZGVUZXN0ID0gYWRkVG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQo
anNOdW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGpzQm9vbGVhbihmYWxzZSkpKSwgbW9kZVRlc3QpOworCisgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
aW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5kZXhlZCBvcHRp
bWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBG
b3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobW9k
ZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51
bWVyYXRvckdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1
bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2Up
OworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRj
aCBHZXRCeVZhbC4KKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZW51
bWVyYXRvcik7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9k
ZTo6VmFyQXJnLCBFbnVtZXJhdG9yR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkp
LCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfaW5fYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwg
QXJyYXk6OlJlYWQpOworCisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKKworICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Pigp
OworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworCisgICAgICAgICAgICBhZGRWYXJB
cmdDaGlsZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGdldChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQoYnl0ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE9wSW5mbyhh
cnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEp
KSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSk7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDog
ewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRJbnRlcm5hbEZpZWxkPigpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKEdldEludGVybmFsRmllbGQsIE9wSW5mbyhieXRlY29kZS5tX2luZGV4KSwgT3BJbmZv
KGdldFByZWRpY3Rpb24oKSksIGdldChieXRlY29kZS5tX2Jhc2UpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IGNjMGQwMTRkYTI5MzFmZjNlY2RjZTk0
MjljYzI2MjU2MWUyZjdmNzYuLjA2ZDE5ZDE3Mzk3MzAzZjc0MWJlNmIwMmJmMDEwNTdmNzIyNTY0
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNjQs
NyArMTY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2coIiAgIEZvdW5kIG11c3Qt
aGFuZGxlIGJsb2NrOiAiLCAqYmxvY2ssICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gVGhp
cyBtZXJnZXMgc25hcHNob3Qgb2Ygc3RhY2sgdmFsdWVzIHdoaWxlIENGQSBwaGFzZSB3YW50IHRv
IGhhdmUgcHJvdmVuIHR5cGVzIGFuZCB2YWx1ZXMuIFRoaXMgaXMgc29tZXdoYXQgdHJpY2t5Lgot
ICAgICAgICAvLyBCdXQgdGhpcyBpcyBPSyBhcyBsb25nIGFzIERGRyBPU1IgZW50cnkgdmFsaWRh
dGVzIHRoZSBpbnB1dHMgd2l0aCAqcHJvdmVuKiBBYnN0cmFjVmFsdWUgdmFsdWVzLiBBbmQgaXQg
dHVybnMgb3V0IHRoYXQgdGhpcworICAgICAgICAvLyBCdXQgdGhpcyBpcyBPSyBhcyBsb25nIGFz
IERGRyBPU1IgZW50cnkgdmFsaWRhdGVzIHRoZSBpbnB1dHMgd2l0aCAqcHJvdmVuKiBBYnN0cmFj
dFZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMKICAgICAgICAgLy8gdHlw
ZSB3aWRlbmluZyBpcyBjcml0aWNhbCB0byBuYXZpZXItc3Rva2VzLiBXaXRob3V0IGl0LCBuYXZp
ZXItc3Rva2VzIGhhcyBtb3JlIHN0cmljdCBjb25zdHJhaW50IG9uIE9TUiBlbnRyeSBhbmQKICAg
ICAgICAgLy8gZmFpbHMgT1NSIGVudHJ5IHJlcGVhdGVkbHkuCiAgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCmluZGV4IGM3MTY0YjMwZjQ2NGViMGQ0MzgyZTJjY2E0MmQ1Njk5NjRkMWJmNjcuLjc0M2Jj
ZDM1MzE0YTQzMzM2NGUzYTkwNGU4MjBkZjVlMDIzZTQzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTI5OSw2ICsyOTksMTAgQEAgQ2Fw
YWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX3NldF9wcml2YXRlX2JyYW5kOgogICAg
IGNhc2Ugb3BfY2hlY2tfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6
CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbDoKKyAgICBjYXNlIG9w
X2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eToKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVB
bmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX2NhbGxfZXZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOWQxMDA0ZmU1M2YzZDQ0N2RmMTAzZmFjYTBkMmUx
MGVjNGZmNWY0Ni4uNzdhNjhlOGU0MWE3NzkyZTNlNmI2ZTQ5M2E0MDVjNzVmMzg0Yzk2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTE0Nyw2ICsxNDcs
MTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVh
ZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgY2FzZSBDaGVja0FycmF5Ogog
ICAgICAgICBjYXNlIENoZWNrQXJyYXlPckVtcHR5OgogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAg
ICBjYXNlIEdldFZlY3Rvckxlbmd0aDoKQEAgLTM0Myw2ICszNDcsOSBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29u
c3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKICAgICBjYXNlIFRvSW5k
ZXhTdHJpbmc6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6CiAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7CkBAIC0zNTAsNiArMzU3LDcyIEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiBy
ZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgIHJlYWQoSlNPYmplY3Rf
YnV0dGVyZmx5KTsKKyAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIGdyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICByZWFkKE5hbWVkUHJv
cGVydGllcyk7CisgICAgICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1l
dGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAg
ICAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAg
ICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlz
U2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAg
ICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4
ZWRJbnQzMlByb3BlcnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hh
aW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFp
bigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAg
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcywgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBpZiAobW9kZS5p
c0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5n
dGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CiAgICAgY2FzZSBIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKQEAg
LTcwNSw2ICs3NzgsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgVG9Qcmlt
aXRpdmU6CiAgICAgY2FzZSBUb1Byb3BlcnR5S2V5OgogICAgIGNhc2UgSW5CeVZhbDoKKyAgICBj
YXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5
OgogICAgIGNhc2UgSW5CeUlkOgogICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CiAgICAgY2FzZSBI
YXNQcml2YXRlQnJhbmQ6CkBAIC05MDYsNiArOTgxLDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsg
c3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgZmFyIHRvbyBjb25zZXJ2YXRpdmUgZm9yIHRoZSBjaGlsZDEoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UgY2FzZS4KKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogewor
ICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJh
eU1vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA1M2Fi
ZmVhOTFkZjIyNGJkNDgyNTUwZGJlNTc4MmQ1OWNhZGQ5OGI1Li41MmE3MzE2NTY1ODYxMjUwNjU2
MGUzYmYzZjUxYjk1MTNmM2I5YTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCkBAIC0zOTUsNiArMzk1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSkKICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKICAgICBjYXNl
IEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAg
IGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHk6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgogICAgIGNhc2UgTWF0ZXJpYWxpemVO
ZXdPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld0ludGVybmFsRmllbGRPYmplY3Q6CiAg
ICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CkBAIC01MDQsMTAgKzUwOCwxNSBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICBjYXNlIEVudW1l
cmF0b3JHZXRCeVZhbDoKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBB
cnJheTo6U3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBj
YXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5k
ZXggNDcyMDJkNmRiYWQ5MWM3NmY1OTc4ZGEyOGNhMWM0OTc3MTU1YTgxOS4uYWNlNGFmNTM0NTcy
ZjRiZTZhZTc1YTIwZWEzMDE2YjRjNmM3OGY4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0xMDI0LDYgKzEwMjQsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0
QnlWYWw6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNSkpOworICAgICAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAg
ICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCkBAIC0xMDYyLDYgKzEwNjksMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTcy
CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKEFycmF5TW9kZShBcnJheTo6R2Vu
ZXJpYywgbm9kZS0+YXJyYXlNb2RlKCkuYWN0aW9uKCkpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKKworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAg
ICAgICAvLyBEb24ndCBmb3JjZSBPU1IgYmVjYXVzZSB3ZSBoYXZlIG9ubHkgc2VlbiBOYW1lZE1v
ZGUuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdFIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdh
eSB0byBkbyB0aGlzLi4uCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVy
YXRvckdldEJ5VmFsKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUobm9k
ZS0+YXJyYXlNb2RlKCkud2l0aFR5cGUoQXJyYXk6OkdlbmVyaWMpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMDk2LDcgKzExMTIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3
aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KICAgICAgICAgICAgICAgICAgICAg
Ly8gb3V0LW9mLWJvdW5kcyBzbG93IHBhdGguIFdlIGNhbiBmaXggdGhhdCB3aXRoOgogICAgICAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NjY4Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2Rl
LnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRT
aXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCkBAIC0xMTExLDcgKzEx
MjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlN
b2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWlu
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKKwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3Ro
ZXIpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhvbGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwg
c28gaWYgdGhlIHVzZXIgZG9lc24ndCBjYXJlCkBAIC0xMTIxLDcgKzExMzcsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlN
b2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4
aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3Vu
ZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE3OCw3ICsx
MTk0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0
IHNldCBhIG5vbi1KU1ZhbHVlIHJlc3VsdCBmb3IgRW51bWVyYXRvckdldEJ5VmFsIHNpbmNlIHdl
IGNvdWxkIHN0aWxsIGRvIGEgTmFtZWRNb2RlIHByb3BlcnR5IGFjY2Vzcy4gV2UgYWxzbyBkb24n
dCBoYXZlIGEgZ29vZCB3YXkgdG8KKyAgICAgICAgICAgIC8vIHByb3ZlIHRoZXJlJ3Mgbm8gc3Ry
dWN0dXJlIHByb3BlcnRpZXMgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IEVudW1lcmF0b3JHZXRCeVZhbCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMo
KQpAQCAtMjM0NSw2ICsyMzY1LDU4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmaXhFZGdlPElu
dDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAg
ICAgICAgIEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAg
ICAgICAgRWRnZSYgaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAg
ICAgICAgRWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUt
PnN0b3JhZ2VDaGlsZEluZGV4KCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRv
ck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgewor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSktPnByZWRpY3Rpb24oKSkpOworCisgICAgICAgICAgICAgICAgZml4
RWRnZTxDZWxsVXNlPihiYXNlKTsKKyAgICAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KGJhc2UsIGluZGV4LCBzdG9yYWdlRWRnZSk7CisKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS5iZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHNl
dFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJy
YXk6OkluQm91bmRzID8gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91
bmRzU2FuZUNoYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUtPmVu
dW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2Rl
ICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUp
KQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93
bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZp
eEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4
dHJhY3RJbmRleDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihu
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3Vs
ZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMy
VXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6
IHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9u
IHRoZSBpbnN0cnVjdGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9i
YWxUeXBlU2V0LgogICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0
IGlzIGNvbnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVj
ayBmb3IKQEAgLTM2OTAsNiArMzc2Miw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZv
KGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0K
IAorICAgIHZvaWQgc2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAg
ICAgICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0
aW9uOworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVy
ZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdv
cmsgb24gYSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0
dXJuIHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBh
IGNoYW5nZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAg
ICAgICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3
ZSBhY3R1YWxseSBoYWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVh
ZCBmcm9tIGEgaG9sZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExp
a2VseSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxl
bnQgb2YKKyAgICAgICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4g
Rm9yIG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8v
IE5hTiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdh
dGlvbiwgYW5kIGp1c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0
aGF0IGNhc2UuIFRoaXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRz
IHRvIGhhdmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJj
ZSB0byBVbmRlZmluZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBX
ZSB3YW50IHRvCisgICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJu
IEludDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAg
ICAvLyBiYXNlZD8KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28g
aW1wbGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QK
KyAgICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRv
IHRoZSBob2xlIGNoZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRo
YXQgaGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAg
ICAgICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoK
KyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ2NjgKKworICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYm
IGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFw
aC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAg
ICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5k
c1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJl
IGVudGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAg
IC8vIHJldHVybmVkIGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQu
IFdlIHN0aWxsIGRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0
IHJlcXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBp
ZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJv
dW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0
aXZlSW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFy
cmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAg
ICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Cisg
ICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090
aGVyKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0
aGUgdXNlciBkb2Vzbid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAg
ICAgICAgICAgICAvLyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVj
dWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0
T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBO
ZWdhdGl2ZUluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24g
PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAg
ICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlv
bik7CisgICAgfQorCiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUs
IEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5
ZDQ5ZmU2MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUx
MWQxOTJkMTc1MmQ0NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUt
Pmhhc1B1dEJ5SWRTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0
QnlJZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5p
c0JyYW5jaCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRl
Z2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2Zjlj
MWQwZWY0MDMzMGMyMzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBm
M2E4OTIyMTUxZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsx
MzQ0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAg
ICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXguCiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAg
c2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwog
ICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2
YTc4NmQzOTNmZDg3YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdj
ZDY0ZjBkNmY0NjQ2NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcApAQCAtMTExLDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRF
eHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAg
ICBicmVhazsKIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAg
ICAgY2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcw
N2E2ZDBhNDM4ZTVlZDgxLi42OTAzM2Y3OTkxYTM2N2JhNDU1MTkzNGRmODMxMTZhZGI0NDE3MTIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2lu
Y2x1ZGUgIkRlbGV0ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQu
aCIKICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc3Miw2ICsxNzczLDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIEdldEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQ
cm90b3R5cGVPZjoKICAgICAgICAgY2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1l
cmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsx
OTQzLDg0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwog
ICAgIH0KIAorICAgIGJvb2wgaGFzU3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2Fz
ZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAg
ICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAg
IGNhc2UgQXRvbWljc0FuZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgor
ICAgICAgICBjYXNlIEF0b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoK
KyAgICAgICAgY2FzZSBBdG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAg
ICAgICBjYXNlIEF0b21pY3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAg
Y2FzZSBBcnJheVB1c2g6CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0
QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBj
YXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgc3RvcmFnZUNoaWxkSW5kZXgoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1N0b3JhZ2VD
aGlsZCgpKTsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGNhc2UgU3RyaW5n
Q29kZVBvaW50QXQ6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBj
YXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgUHV0QnlW
YWxEaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBjYXNlIEF0b21pY3NBZGQ6Cisg
ICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hh
bmdlOgorICAgICAgICBjYXNlIEF0b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNz
TG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3Jl
OgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAg
ICAgICAgICAgIHJldHVybiAyICsgbnVtRXh0cmFBdG9taWNzQXJncyhvcCgpKTsKKyAgICAgICAg
Y2FzZSBBcnJheVB1c2g6CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBjYXNlIEFy
cmF5UG9wOgorICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJu
IDI7CisKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFz
RW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgICAgIHJldHVybiAyOworCisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgICAgICBy
ZXR1cm4gNDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBB
cnJheUluZGV4T2YgYnV0IGl0IGRvZXMgbm9uLXRyaXZpYWwgdGhpbmdzIHRvIGRldGVybWluZSBz
dG9yYWdlIGVkZ2UuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBoYXNVaWRPcGVyYW5kKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBvcCgpID09IENoZWNrSWRlbnQ7CkBAIC0yMjA1LDYgKzIyODUsMTAgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRh
dGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAg
ICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eToKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckNvZGVBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDb2RlUG9pbnRBdDoKQEAgLTMxNzQsNiAr
MzI1OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxTZXRQcml2YXRl
QnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRh
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgRW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0
b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0
b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVh
bSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRiMTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0
MjE3YzUwYWQxLi41Y2U5YWYzZTQ1MDM0OGVjYWFiYWMxYjFjODk1YWVjM2UxZjc2OGJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01MTUsNiArNTE1LDEzIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBt
YWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCiAgICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKSBcCisgICAg
bWFjcm8oRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSwgTm9k
ZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIE5v
ZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlO
YW1lLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yR2V0QnlWYWwsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KEVudW1lcmF0b3JJbkJ5VmFsLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwg
Tm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICAvKiBOb2RlcyBmb3IgSlNNYXAgYW5kIEpTU2V0ICovIFwKICAgICBtYWNybyhNYXBIYXNo
LCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhOb3JtYWxpemVNYXBLZXksIE5vZGVSZXN1
bHRKUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5k
ZXggNzA0MTMzMzVhMjJlYjMxNDU3MzA2YjVhZmMzNTdhMGQzMTI3YWU5Ny4uODliZGNiMWQ1MDQ5
MDU1Y2U2MmRlOGMzZDIwNzg5MmM1ZmIxMDI2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yNTA0LDYgKzI1MDQsMTA3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhCiAgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZt
LCBpbmRleCkuc3RyaW5nKCkpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCB1aW50
MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6TW9kZSBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpNb2RlPihtb2RlTnVtYmVyKTsKKyAgICBpZiAoSlNWYWx1ZTo6ZGVjb2RlKGJhc2VW
YWx1ZSkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBBU1NFUlQobW9kZSA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluaXRNb2RlKTsKKyAgICAgICAgQVNTRVJUKCFpbmRleCk7
CisgICAgICAgIEFTU0VSVCghZW51bWVyYXRvci0+c2l6ZU9mUHJvcGVydHlOYW1lcygpKTsKKyAg
ICAgICAgbW9kZSA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZVZh
bHVlKS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgICAgIGNvbnN0ZXhwciBib29sIHNob3VsZEFsbG9jYXRlSW5k
ZXhlZE5hbWVTdHJpbmcgPSBmYWxzZTsKKyAgICAgICAgZW51bWVyYXRvci0+Y29tcHV0ZU5leHQo
Z2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9kZSwgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFt
ZVN0cmluZyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
fQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4obW9kZSkgPDwgMzIgfCBpbmRleCB8IEpT
VmFsdWU6Ok51bWJlclRhZyk7CisjZWxzZQorICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZSht
b2RlLCBpbmRleCk7CisjZW5kaWYKKyAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQzMl90IGluZGV4LCBp
bnQzMl90IG1vZGVOdW1iZXIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBpZiAobW9kZU51
bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAg
IGlmIChpbmRleCA8IGVudW1lcmF0b3ItPmluZGV4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGlu
ZGV4KS5zdHJpbmcoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICB9CisKKyAgICBKU1N0cmluZyogcmVzdWx0ID0gZW51
bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNlLCB1aW50MzJfdCBpbmRl
eCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU1N0cmluZyogc3RyaW5nID0gZW51bWVyYXRvci0+cHJvcGVydHlO
YW1lQXRJbmRleChpbmRleCk7CisgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IHN0cmlu
Zy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYmFzZS0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUob2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUpKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25FbnVtZXJhdG9ySW5CeVZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3Bl
cnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVyKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUo
YmFzZVZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGlm
IChtb2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgJiYg
YmFzZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihiYXNlLmdldE9iamVjdCgpLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KSkpOwor
CisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IGpzU2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUocHJvcGVydHlOYW1lVmFsdWUpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpv
cEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUpKSkpOworfQorCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgcHJvcGVydHlOYW1lVmFsdWUsIHVpbnQzMl90
IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSAmJiBiYXNlLmlzT2JqZWN0KCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UuZ2V0T2JqZWN0KCktPmhh
c093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgpKSk7CisKKyAgICBKU1N0cmluZyogcHJv
cGVydHlOYW1lID0ganNTZWN1cmVDYXN0PEpTU3RyaW5nKj4odm0sIEpTVmFsdWU6OmRlY29kZShw
cm9wZXJ0eU5hbWVWYWx1ZSkpOworICAgIGF1dG8gaWRlbnRpZmllciA9IHByb3BlcnR5TmFtZS0+
dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNl
LCBpZGVudGlmaWVyKSkpKTsKK30KKwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0NlbGwqIHJlZ2V4cFB0ciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZExhc3RJbmRl
eCkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAppbmRleCAzMTRlMWZlZGU1OTVkMGZiOGZhODM1ZWY3
MjA1ZTZiNjQ1YzMwNDZiLi5kMzZmMzUzYmMzNjEyYjk4ODJjYTFkMTgzODQ3M2RkMDkyODU5NDVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaApAQCAtMzYsNiAr
MzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIERhdGVJbnN0YW5jZTsKIGNsYXNzIEpTQmln
SW50Owogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOworY2xhc3MgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTEwLDYgKzExMSwxMiBAQCBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJlUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlLCAoSlNHbG9iYQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3Bl
cnR5RW51bWVyYXRvckNlbGwsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopKTsK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgSlNDZWxs
KiwgKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgRW5jb2RlZEpTVmFs
dWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50MzJfdCwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90LCBpbnQzMl90LCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JJ
bkJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50MzJfdCkpOworSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQz
Ml90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiwgdWludDMyX3QsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopKTsKKwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4
LCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSkpOwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdBcnJheSwgY2hhciosIChKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpKTsKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3RW1wdHlBcnJheSwgY2hhciosIChWTSosIFN0cnVjdHVy
ZSopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggYWE3YzYxZTYwYWY1MDdlYjkxN2UzMDZi
YWI4NTM3YzBlODllMmUwZC4uZDJhZWNjMDFhNWYyOTA0M2FlMjFkZmRmZGNjN2Y1MTA5OTg4YzI4
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTQ3MywxNCArNDczLDE1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMCk7CiAgICAg
ICAgICAgICBpZiAoIWNoaWxkMS0+cHJlZGljdGlvbigpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLmNo
aWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFy
cmF5TW9kZSgpLnJlZmluZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAogICAgICAg
ICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgIGNoaWxkMi0+
cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgIFNwZWNOb25lKTsKLSAgICAgICAgICAgIAor
CiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJv
dW5kcygpKQpAQCAtNTAxLDcgKzUwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0Z1bGxEb3VibGUpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZvckFyaXRobWV0aWMobm9kZS0+Z2V0SGVhcFBy
ZWRpY3Rpb24oKSkgJiYgbm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlv
bigpKSAmJiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCB8fCBub2RlLT5vcCgpID09IEVudW1lcmF0
b3JHZXRCeVZhbCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVuYWJsZUludDUy
KCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJ
bnQ1MkFueSk7CkBAIC04NjIsNiArODYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAg
IGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBjYXNlIFJl
Z0V4cEV4ZWM6CkBAIC0xMjA1LDEwICsxMjA3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBz
ZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKIAorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXg6CiAgICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDog
ewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgICAgIGNhc2UgSW5CeVZh
bDoKICAgICAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CkBA
IC0xMjM5LDYgKzEyNDYsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
U3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgICAgICAvLyBUaGlz
IGNhbiBhY3R1YWxseSByZXR1cm4gYSBKUyBudWxsIGJ1dCB3ZSBicmFuY2ggb2YgdGhhdCBjYXNl
IGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrIHNvIHdlIGRvbid0IHdhbnQgdG8gbWVzcyB3aXRoCisg
ICAgICAgICAgICAvLyBmaXh1cCdzIGxvZ2ljLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihT
cGVjRnVsbE51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZhbHVlIHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVy
IGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3RyaW5nLgorICAgICAgICAgICAgc2V0UHJlZGljdGlv
bihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKICAgICAgICAgY2FzZSBQYXJzZUludDogewogICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRo
aXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHByb2R1Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAg
ICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0IHByb2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQg
b2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBjOTYzN2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdl
Mjk5OWQ0YzAzLi42NTY1MTEwNDE4ZGNhZTllNGZlZmZmYTk5NDYyMjcyM2I0MjgwNTQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAK
QEAgLTg2LDYgKzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGxvd2VyQm91bmRzQ2hlY2so
bV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSksIG1fZ3Jh
cGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNl
IEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAg
ICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCksIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIp
KTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJkMGI5YjQ2MGUy
YzUwLi5hMDUxZTc0YTcwNjIxMTU5YzgzYjk2MjkzYzgyODZmZTM1NGZkMmNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzcyLDYgKzM3Miw3
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIC8vIHRvIGNhcHR1cmUgInByb2Zp
bGluZyIgYXQgdGhlIHBvaW50IGluIGNvbnRyb2wgZmxvdyBoZXJlIHRoZSB1c2VyIHB1dCB0aGVt
LgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
ICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtNDk2LDYgKzQ5NywxMSBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGJvb2wgaWdubwogICAgICAgICByZXR1cm4gaXNTYWZlOwogICAgIH0KIAorICAgIGNhc2Ug
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgLy8gVGhlc2UgdGVjaG5pY2Fs
bHkgZG9uJ3QgaGF2ZSBlZmZlY3RzIGJ1dCB0aGV5J2xsIG9ubHkgZXZlciBmb2xsb3cgYSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSBzbyB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBm
YWxzZS4KKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJv
cGVydHlOYW1lOgogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhpczoKICAgICBj
YXNlIENyZWF0ZVByb21pc2U6CkBAIC01OTUsNiArNjAxLDggQEAgYm9vbCBzYWZlVG9FeGVjdXRl
KEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29s
IGlnbm8KICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICBjYXNlIEluQnlWYWw6CiAgICAg
Y2FzZSBJbkJ5SWQ6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEhhc1ByaXZhdGVOYW1lOgogICAgIGNhc2Ug
SGFzUHJpdmF0ZUJyYW5kOgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDFiNTFmZWEzM2Fj
ZjY5ZjUzZTA5NGE0ZTUwYThiNzBiYTZhYWE3MjYuLmYzODQ4YTQzZjdhYjI4ZGRkYzJjNDdkNGQw
NjI0MGM0MGUwZmY3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitK
U1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQq
IGppdCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFy
eShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdv
cmQpCi0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIo
aml0LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFs
dWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0
LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6
IG1fcGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkK
KyNlbmRpZgogewotICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAg
IG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAg
ICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBt
X3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJU
ZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5
KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkK
QEAgLTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFy
Q29kZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9j
dXJyZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
U3RyaW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2Rl
LCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQ
UlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IElu
dmFsaWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkg
ewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVz
dWx0VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1
bHRUYWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQp
ID0gcHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRK
UyA6IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmls
dGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQog
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJp
bmc6Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBE
YXRhRm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdH
UFIoKSk7CiAjZW5kaWYKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0
ICsyNjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5n
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hT
dHJ1Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVj
dFByb3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0
aEdlbmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVS
ZWdzKHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9i
YWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhH
ZW5lcmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisg
ICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3Ry
aW5nSW50LAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotI2Vsc2UKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMs
IG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlm
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAg
IH0gZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwor
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50
Tm9kZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJD
b2RlKE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3Bl
cnR5UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5
TG9hZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0
eXBlLCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVk
QXJyYXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVk
QXJyYXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAg
ICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9v
bCBpc1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOwor
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlm
IChzaG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJU
ZW1wb3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVy
VGhhbk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1f
aml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBl
cnM6OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzVUludDMyKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNT
aWduZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0
eXBlKSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3Bl
Y3VsYXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAg
ICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSog
bm9kZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIo
KSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVk
QXJyYXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdz
LCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAg
ICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5v
ZGUsIFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3By
KCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsK
KyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQz
Mik7CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAg
ZW1pdFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0g
ICAgbG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRS
ZWcsIHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29s
IGNhblNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9k
ZSwgcmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlM
b2FkUmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94
KTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFu
ZCgKQEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9S
ZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2Rl
LCBUeXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1Zh
bHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4
KQogewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJh
eShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsK
KwogICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9
IHJlc3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFy
cmF5VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAg
ICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09
IERhdGFGb3JtYXRKUykgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1
bHRSZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAt
MzcwMyw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3Rk
Ojp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3Jt
YXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJn
Mih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIs
MjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0
cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBH
UFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9y
bWF0SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCksIGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJl
Z3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZh
bE9iamVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFy
ZzFHUFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUs
IGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihE
YXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFH
UFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjpp
Z25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9s
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJ
bnQzMlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29u
c3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRK
Uyk7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLmdwcigpOwogICAgIAogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtODA3OSwyMiArODA4Miwy
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50
cyhOb2RlKiBub2RlKQogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5v
ZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFy
Z3VtZW50cyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAvLyBUT0RPOiBBcmUgYm90aCBvZiB0aGVzZSBuZWNlc3Nh
cnk/PwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMih0aGlzKTsKICAgICAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3Jh
dGNoLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwogICAg
IAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOworCisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkg
PSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKICAgICAKICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNl
dE9mU3RvcmFnZSgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwpAQCAtMTM0ODIsNiArMTM0
ODcsMzEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4U3RyaW5nKE5vZGUq
IG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSog
bm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1v
ZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsK
KworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQUlJlZyBtb2RlR1BS
ID0gbW9kZS5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3By
KCk7CisKKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIFJldXNl
LCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwg
bm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoMCkpKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaW5jcmVtZW50TG9vcDsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZTsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShu
b2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8
c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsKKworICAgICAgICAgICAgbV9qaXQu
bW92ZShpbmRleEdQUiwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgbW9kZUdQUik7CisKKyAgICAgICAgICAgIGluY3JlbWVudExvb3AgPSBtX2ppdC5sYWJlbCgp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoLmdwcigp
KTsKKworICAgICAgICAgICAgaW5pdE1vZGUubGluaygmbV9qaXQpOworICAgICAgICAgICAgZG9u
ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gu
Z3ByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICB9KSk7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpLmxpbmtUbyhpbmNyZW1lbnRMb29wLCAm
bV9qaXQpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBtX2ppdC5vcjY0
KHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNlbHNlCisgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3Mo
KTsKKworICAgICAgICAvLyBIYXMgdGhlIHNhbWUgc3RydWN0dXJlIGFzIHRoZSBlbnVtZXJhdG9y
LgorICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLmdwcigpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpLCByZXN1bHRSZWdzLmdwcigpKSk7CisKKyAgICAgICAg
bV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAg
ICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBt
X2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpIDw8IDMyKSwgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpLCByZXN1bHRSZWdzLnRh
Z0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9k
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UucmVncygpOwor
CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3Mo
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhB
bmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3Ms
IGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BSKTsKKyAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleChOb2RlKiBu
b2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVwZGF0ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVncyA9IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdz
KCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYWlyUmVncy5wYXlsb2FkR1BSKCk7CisKKyAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKSwgcGF5bG9hZEdQUiwgcmVzdWx0R1BSKTsKKworICAgIHN0
cmljdEludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
SlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpT
VmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJS
ZWcgcGFpckdQUiA9IGlzNjRCaXQoKSA/IHBhaXJSZWdzLmdwcigpIDogcGFpclJlZ3MudGFnR1BS
KCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiBjb25zdGV4cHIgKGlzNjRCaXQoKSkKKyAgICAg
ICAgbV9qaXQucnNoaWZ0NjQocGFpckdQUiwgVHJ1c3RlZEltbTMyKDMyKSwgcmVzdWx0R1BSKTsK
KyAgICBlbHNlCisgICAgICAgIG1faml0Lm1vdmUocGFpckdQUiwgcmVzdWx0R1BSKTsKKyAgICBt
X2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJh
dGlvbk1vZGVNYXNrKSwgcmVzdWx0R1BSKTsKKworICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
TmV4dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBpbmRleE9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvck9wZXJhbmQodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOworCisgICAgR1BSUmVnIGluZGV4ID0gaW5kZXhPcGVyYW5kLmdwcigpOwor
ICAgIEdQUlJlZyBtb2RlID0gbW9kZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIGVudW1lcmF0
b3IgPSBlbnVtZXJhdG9yT3BlcmFuZC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0R1BSKHRoaXMpOworICAgIEdQUlJlZyByZXN1
bHQgPSByZXN1bHRHUFIuZ3ByKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgcmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHQsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAgRWRn
ZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5l
cmF0ZSA9IFsmXSAoR1BSUmVnIGJhc2VDZWxsR1BSKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3Vs
dDsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgR1BSUmVnIGluZGV4
R1BSOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmFkU3RydWN0dXJlU2xvd1BhdGg7CisKKyAgICAgICAgY29tcGlsZUdldEJ5VmFs
KG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihE
YXRhRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7CisgICAgICAgICAgICBFZGdlIHN0b3JhZ2VF
ZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBpZiAoc3RvcmFnZUVkZ2UpCisgICAgICAgICAg
ICAgICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0b3JhZ2VFZGdlKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2Rl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDUpKTsKKworICAgICAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAg
ICAgICAgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgICAgIGVudW1lcmF0b3JHUFIg
PSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAg
ICAgICAgICBib29sIGhhdmVTdG9yYWdlID0gISFzdG9yYWdlRWRnZTsKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdG9yYWdlVGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VH
UFI7CisgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdlKSB7CisgICAgICAgICAgICAgICAgc3Rv
cmFnZVRlbXBvcmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlzLCBSZXVzZSwgZW51bWVyYXRvcik7Cisg
ICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3JhZ2VUZW1wb3JhcnkuZ3ByKCk7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vdEZhc3ROYW1lZENh
c2VzOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRoaXMg
Y29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGFuIG9iamVjdC4KKyAgICAgICAgICAgIG5vdEZh
c3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKTsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRo
YXQgdGhlIGJhc2UgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ugd29uJ3QgZ2VuZXJhdGUgTmFtZWRN
b2RlIHByb3BlcnRpZXMgZm9yIG5vbi1vYmplY3RzLgorICAgICAgICAgICAgICAgIC8vIFRPRE86
IHB1dCBBc3NlcnQgaGVyZT8KKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1
cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Uga25vdyB0aGVyZSdzIG9ubHkgb25l
IHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBlbWJlZCBpdCBoZXJlLgorICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAg
ICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0
byByZXByZXNlbnQgSW5kZXhlZCtOYW1lZD8KKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCkgPT0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAz
KS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGJhZFN0cnVjdHVyZVNsb3dQYXRoID0gYmFk
U3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm90
RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKGJhZFN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgICAgICAv
LyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSkpOworCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUNlbGxHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0
UmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAg
ICAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICAgICAgaW50MzJfdCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRl
cmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgZG9uZUNhc2Vz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub3RG
YXN0TmFtZWRDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0UmVncywgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgfSkpOworCisgICAgICAg
IC8vIFdlIHJlbHkgb24gY29tcGlsZUdldEJ5VmFsIHRvIGNhbGwganNWYWx1ZVJlc3VsdCBmb3Ig
dXMuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGtpbmRhIGhhY2t5Li4uCisgICAgICAgIEFT
U0VSVChnZW5lcmF0aW9uSW5mbyhub2RlKS5qc1ZhbHVlUmVncygpID09IHJlc3VsdFJlZ3MgJiYg
Z2VuZXJhdGlvbkluZm8obm9kZSkucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMpOwor
CisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93UGF0aC5pc1NldCgpKQorICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGJhZFN0cnVjdHVyZVNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VDZWxsR1BSLCBpbmRleEdQUiwgZW51
bWVyYXRvckdQUikpOworCisgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgfTsK
KworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAgICAgICAvLyBVc2Ug
bWFudWFsIG9wZXJhbmQgc3BlY3VsYXRpb24gc2luY2UgRml4dXAgbWF5IGhhdmUgcGlja2VkIGEg
VXNlS2luZCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gQ2VsbFVzZS4KKyAgICAgICAgc3BlY3VsYXRl
KG5vZGUsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZU9wZXJh
bmQodGhpcywgYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIGdl
bmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJh
c2VPcGVyYW5kLmdwcigpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRo
RnVuY3Rpb25UeXBlPgordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNQ
cm9wZXJ0eShOb2RlKiBub2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9u
KQoreworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwor
ICAgIGF1dG8gZ2VuZXJhdGUgPSBbJl0gKGF1dG8gYmFzZVJlZ3MsIEdQUlJlZyBiYXNlQ2VsbEdQ
UikgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eU5hbWUodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAzKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcHJv
cGVydHlOYW1lUmVncyA9IHByb3BlcnR5TmFtZS5yZWdzKCk7CisgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKworICAg
ICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQucmVncygpLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KGJhc2VFZGdlKS5tX3R5cGUgJiB+U3BlY0NlbGwpCisgICAgICAgICAgICBvcGVyYXRpb25DYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdzKSk7CisKKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlz
IG5vdCBhIGNlbGwuCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0
R1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsK
KworICAgICAgICBvcGVyYXRpb25DYXNlcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzbG93UGF0aEZ1bmN0aW9uLCByZXN1
bHQucmVncygpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5
TmFtZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBibGVzc2VkQm9v
bGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgIH07CisKKyAgICBpZiAoaXNDZWxsKGJh
c2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UuZ3ByKCksIGJhc2UuZ3ByKCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVk
Z2UpOworICAgICAgICBnZW5lcmF0ZShiYXNlLnJlZ3MoKSwgYmFzZS5ncHIoKSk7CisgICAgfQor
fQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckluQnlWYWwoTm9kZSog
bm9kZSkKK3sKKyAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG5vZGUsIG9wZXJhdGlv
bkVudW1lcmF0b3JJbkJ5VmFsKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVtZXJh
dG9ySGFzUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5KTsK
K30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5SWRGbHVzaChOb2RlKiBub2Rl
KQogewogICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsKQEAgLTE0OTM0
LDI4ICsxNTI0NiwyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdB
cnJheVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgICAgICBzaXplR1BS
LCBzdG9yYWdlR1BSKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0
aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2Rl
KiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24sIGNvbnN0IFNjb3Bl
ZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KQogewogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAK
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0g
aW5kZXguZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBH
UFJSZWcgaW5kZXhHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJ
bnZhbGlkR1BSUmVnOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgIHN3aXRjaCAobW9k
ZS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZElu
ZGV4KCkpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3Vs
dEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCkBA
IC0xNDk4MywxMiArMTUyOTUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICBBU1NFUlQo
ISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNT
RVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgp
KSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEZQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2gu
ZnByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAorICAg
ICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogCiAgICAg
ICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE1MDEyLDEzICsxNTMyNiwxNSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNf
SklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAK
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhH
UFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3Vu
ZHMoKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG91dE9mQm91bmRzKTsKQEAgLTE1MDQ3LDE0ICsxNTM2MywxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUs
IFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgLy8gRklYTUU6
IE9wdGltaXplIFR5cGVkQXJyYXlzIGluIEhhc0luZGV4ZWRQcm9wZXJ0eSBJQwogICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAg
IHN0ZDo6dGllKGluZGV4R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CiAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0K
IAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMs
IHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBiYXNlR1BSLCBpbmRleEdQUikpOwotCi0gICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RGlyZWN0
UG5hbWUoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAppbmRleCA5OGM3NjE2YjhmZDJmYmY1YzRkZDhhNTc3MTUwOGFkMjY3OWY5OWQx
Li41YmI2ZGUxYjllZjZjNjRjNzQ0ZGE1Nzc1OWFlNDQ2Y2FhNTgxOGExIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC00Nyw2ICs0Nyw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdQUlRlbXBvcmFyeTsK
K2NsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFz
cyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMjQ2LDYgKzI0
Nyw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgR1BSUmVnIGFsbG9jYXRlKEdQUlJlZyBzcGVjaWZp
YykKICAgICB7CisgICAgICAgIGlmIChzcGVjaWZpYyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgYWxsb2NhdGUoKTsKICNpZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFM
SURBVElPTikKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxvY2F0aW9uQXRPZmZzZXQobV9q
aXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKQEAgLTEzNDUsMTIgKzEzNDgsMTUgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3Jhcnks
IG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICB9CiAgICAgCisgICAgLy8gV2UgdXNlIGEgc2NvcGVk
TGFtYmRhIHRvIHBsYWNhdGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2YWxpZGF0aW9uLgorICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KTsKKwogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSopOwotICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25TdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdz
LCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAg
IHZvaWQgY29tcGlsZUZyb21DaGFyQ29kZShOb2RlKik7IAogCi0gICAgdm9pZCBjb21waWxlR2V0
QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
blNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7Cisg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRQcml2YXRl
TmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJpdmF0ZU5hbWVCeUlkKE5vZGUqKTsK
QEAgLTE0MjQsMTIgKzE0MzAsMTIgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1
bXBGb3JUeXBlZEFycmF5SXNEZXRhY2hlZElmT3V0T2ZCb3VuZHMoTm9kZSosIEdQUlJlZyBiYXNl
R1BSLCBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyk7CiAgICAgdm9pZCBlbWl0VHlwZWRB
cnJheUJvdW5kc0NoZWNrKE5vZGUqLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIGluZGV4R1BSKTsK
ICAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChOb2RlKik7Ci0gICAgdm9p
ZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsK
KyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJh
eVR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9y
bWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5
LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9h
dFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVkQXJy
YXlUeXBlKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9k
ZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKik7
CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKE5vZGUqLCBjb25z
dCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZv
cm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcoTm9kZSos
IEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYg
Y2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aFRoaXMo
Tm9kZSopOwpAQCAtMTQ1OCw3ICsxNDY0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIEVk
Z2UgdmFsdWVVc2UpOwogICAgIHZvaWQgbG9hZEZyb21JbnRUeXBlZEFycmF5KEdQUlJlZyBzdG9y
YWdlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlU
eXBlKTsKLSAgICB2b2lkIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqLCBHUFJSZWcg
cmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUpOworICAgIHZvaWQg
c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Ms
IFR5cGVkQXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSwgYm9vbCBzaG91bGRCb3gpOwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uQ29t
bW9uKEdQUlJlZywgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgR1BSUmVnLCBHUFJSZWcsIEdQUlJlZywg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Jiwgc2l6ZV90LCBGdW5jdGlvbkV4ZWN1dGFibGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU2V0
RnVuY3Rpb25OYW1lKE5vZGUqKTsKQEAgLTE1MjgsNiArMTUzNCwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZVRvSW5kZXhTdHJpbmcoTm9kZSopOworCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0
RXh0cmFjdE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFj
dEluZGV4KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5vZGUq
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lk
IGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoTm9kZSosIFNsb3dQYXRoRnVuY3Rpb25UeXBl
KTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKik7CisgICAgdm9pZCBj
b21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqKTsKKwogICAgIHZvaWQgY29tcGls
ZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7CkBAIC0xNTY4LDcgKzE1ODUsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQ2FsbE51bWJlckNvbnN0cnVjdG9yKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5UYWlsKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoTm9kZSosIFNfSklUT3BlcmF0aW9uX0dDWik7CisgICAgdm9pZCBj
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1osIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KTsKICAg
ICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
Q2xlYXJDYXRjaExvY2FscyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHJvZmlsZVR5cGUoTm9k
ZSopOwpAQCAtMTkzNyw2ICsxOTU0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVSZWdzKGdwcigpKTsKICAgICB9CisgICAgSlNWYWx1ZVJlZ3MgcmVncygpIHsgcmV0
dXJuIGpzVmFsdWVSZWdzKCk7IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgYm9vbCBp
c0RvdWJsZSgpIHsgcmV0dXJuIG1faXNEb3VibGU7IH0KIApAQCAtMTk2NSw3ICsxOTgzLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIo
KSk7CiAgICAgfQogCi0gICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCkKKyAgICBH
UFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoID0gUGF5bG9hZFdvcmQpCiAgICAgewogICAg
ICAgICByZXR1cm4ganNWYWx1ZVJlZ3MoKS5ncHIod2hpY2gpOwogICAgIH0KQEAgLTIwMDMsMjEg
KzIwMjEsMjAgQEAgcHJpdmF0ZToKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBTdG9yYWdlT3BlcmFuZCgpID0gZGVmYXVs
dDsKKwogICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAg
ICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIEFT
U0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
IHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlz
RmlsbGVkKG5vZGUoKSkpCi0gICAgICAgICAgICBncHIoKTsKKyAgICAgICAgZW1wbGFjZShqaXQs
IGVkZ2UpOwogICAgIH0KICAgICAKICAgICB+U3RvcmFnZU9wZXJhbmQoKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBtX2pp
dC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlk
KTsKICAgICB9CiAgICAgCiAgICAgRWRnZSBlZGdlKCkgY29uc3QKQEAgLTIwMzYsNiArMjA1Mywx
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3Rv
cmFnZShlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQorCisg
ICAgdm9pZCBlbXBsYWNlKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKKyAgICB7Cisg
ICAgICAgIG1faml0ID0gaml0OworICAgICAgICBtX2VkZ2UgPSBlZGdlOworICAgICAgICBBU1NF
UlQobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VSVChtX2pp
dCk7CisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2Uu
dXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5v
ZGUoKSkpCisgICAgICAgICAgICBncHIoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQog
ICAgIHsKQEAgLTIwNDMsOSArMjA3MSw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRl
OgotICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQg
eyBudWxscHRyIH07CiAgICAgRWRnZSBtX2VkZ2U7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlk
OworICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZCB7IEludmFsaWRHUFJSZWcgfTsKIH07CiAKIApA
QCAtMjEzNCwxMSArMjE2MiwxOSBAQCBjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB7CiBwdWJs
aWM6CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFy
eShTcGVjdWxhdGl2ZUpJVCopOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZl
SklUKiwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZpY1Bh
eWxvYWQsIEdQUlJlZyBzcGVjaWZpY1RhZyk7CisjZW5kaWYKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1c2VUYWcs
IFQmIG9wZXJhbmQsIFdoaWNoVmFsdWVXb3JkIHJlc3VsdFJlZ1dvcmQgPSBQYXlsb2FkV29yZCk7
CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgSlNW
YWx1ZU9wZXJhbmQmKTsKICAgICB+SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gISFyZWdzKCk7IH0KKworICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5JiBvcGVyYXRvcj0oSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmJikgPSBkZWZh
dWx0OworCiAgICAgSlNWYWx1ZVJlZ3MgcmVncygpOwogCiBwcml2YXRlOgpAQCAtMjE1MCw2ICsy
MTg2LDI2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1
ZVdvcmQpCisgICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQoreworfQorI2Vsc2UKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1w
b3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdoaWNoVmFs
dWVXb3JkIHJlc3VsdFdvcmQpCit7CisgICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQp
IHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJh
bmQpOworICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgICAgICBtX3Rh
Z0dQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKKyAgICB9Cit9CisjZW5k
aWYKKwogY2xhc3MgRlBSVGVtcG9yYXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCmluZGV4IDlkNDAzNjk2MTBkODllNDFlNTE2ZjZjNGE0MjVlNWZkNzEw
MmExYmUuLmU3ZTZhNmU5OTk4NDM2OTQxMTM0NjNlNTJjYmIwMmNjOTU5MjcxMWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cApAQCAtMTgxMiw2ICsxODEyLDMzOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29u
dGlndW91c1B1dEJ5VmFsKE5vZGUqIG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZQogICAgIG5v
UmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7ICAgIAogfQogCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAg
Y2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2lmIENPTVBJTEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQorICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpT
VmFsdWVSZWdzKCksIDApOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsK
KworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9n
cmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9
PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBjZWxs
LiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJv
cGVydHlSZWdzID0gcHJvcGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6
aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGws
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0
eVJlZ3MpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VS
ZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJl
Z3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZp
eChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0
LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRl
ZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BSKCkp
KTsKKworICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBiYXNlUmVncywg
cHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKKworICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVj
U3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0g
dHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wp
KQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwor
CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAg
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJh
c2VSZWdzLCBwcm9wZXJ0eVJlZ3MpOworCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwg
c2xvd1BhdGguZ2V0KCkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNs
b3dQYXRoKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3Vu
ZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKwor
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsK
KyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRJbnQzMiA6IERh
dGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIGlmIChm
b3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50MzIpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7CisKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigK
KyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1
bHRQYXlsb2FkLnBheWxvYWRHUFIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdEpT
KTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAgICAg
ICAgICAgcmVzdWx0LnRhZ0dQUigpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAg
ICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBh
eWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgIHJlc3VsdC5wYXlsb2FkR1BSKCkpOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewor
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJ
Zk5vdEVtcHR5KHJlc3VsdC50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0LnRhZ0dQUigpKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0LnBheWxvYWRH
UFIoKSk7CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQudGFnR1BSKCkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHBy
ZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0
UmVncy50YWdHUFIoKSkpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAg
ICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0
RG91YmxlKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9h
ZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAg
ICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0LmZwcigpKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0
ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHQuZnBy
KCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChm
b3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgc3RkOjppZykgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0KSwgdGVtcFJlZyk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOYU4odGVtcFJlZykpOworICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVncyk7
CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9i
amVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsK
KyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJl
Zml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3Vs
dFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhv
bGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdH
UFIoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKSk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAg
ICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRK
Uyk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworCisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisK
KyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7
CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmpl
Y3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksCisgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmlu
Zyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RB
cmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUs
IHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50
czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSwgcHJlZml4
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogeworICAgICAgICBUeXBlZEFycmF5VHlw
ZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYg
KGlzSW50KHR5cGUpKQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5
KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgfSB9Cisg
ICAgYnJlYWs7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
IHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CkBAIC0yMjMzLDcgKzI1NjUsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6IHsKICAgICAgICAgLy8gUmVsaWVzIG9uIFN0cmluZ0NoYXJBdCBub2RlIGhhdmlu
ZyBzYW1lIGJhc2ljIGxheW91dCBhcyBHZXRCeVZhbAotICAgICAgICBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhub2RlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAg
ICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPihb
Jl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRG
b3JtYXQgJiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KHJlc3VsdC5yZWdzKCksIHByZWZlcnJlZEZvcm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0yMjY1LDMyNyArMjYwMiwyNCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewot
ICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNl
IEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgotICAgICAgICBjYXNlIEFycmF5OjpGb3Jj
ZUV4aXQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2lmIENP
TVBJTEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQotICAgICAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVn
cygpLCAwKTsKLSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDogewotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGlu
ZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBSZXVzZSwgaW5kZXgpOwotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJl
c3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVz
dWx0UGF5bG9hZC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApKSk7Ci0KLSAgICAgICAgICAgIHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKLSAgICAgICAgICAgIGluZGV4LnVzZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwg
cmVzdWx0VGFnR1BSKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxs
ZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5
VmFsLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RX
aXRoU3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNw
ZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KLSAgICAgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJvcGVydHkuanNWYWx1ZVJlZ3Mo
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwot
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OwotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxDZWxsLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlS
ZWdzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNw
ZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLQotICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhp
cywgUmV1c2UsIHByb3BlcnR5LCBUYWdXb3JkKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwgUGF5bG9hZFdvcmQpOwotCi0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlc3VsdFRhZy5ncHIoKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAgICAgICAgICBS
ZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwotCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgaWYg
KCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNw
ZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
Tm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOwotCi0gICAgICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6
OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2Vk
UmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3Vs
dFJlZ3MsIEludmFsaWRHUFJSZWcpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0
ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9s
KSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRy
dWU7Ci0KLSAgICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwot
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRo
ID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2Rl
T3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlUmVncywgcHJvcGVydHlSZWdz
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93
UGF0aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNs
b3dQYXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIpIHsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRz
U2FuZUNoYWluKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxvYWRPZmZz
ZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG5v
ZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlz
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCks
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRU
YWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIoKSkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Zy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3Vs
dFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0
UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVzdWx0VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aElmRW1wdHkocmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXls
b2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVn
LCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmZwcigpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkK
LSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFs
dWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOwotICAgICAgICAg
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsK
LSAgICAgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0KSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRU
YWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpOwotCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5
bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJh
eVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRz
KCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
LSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkp
OwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCAwLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5v
ZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBqc1ZhbHVlUmVzdWx0OworICAgICAg
ICBHUFJUZW1wb3Jhcnkgb25lUmVnUmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9k
ZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkg
eworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN3aXRj
aCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQz
MjoKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgICAgICAgICAgcmVz
dWx0ID0KKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJl
ZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICAgICAganNWYWx1ZVJl
c3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgICAgIHJlc3Vs
dFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwotCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFn
KHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0g
ICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdS
ZWcpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaElm
RW1wdHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGhvbGUpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAg
ICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVy
dHlSZWcpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3Vs
dFBheWxvYWRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJp
bmcobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMo
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAg
VHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7
Ci0gICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUp
OwotICAgICAgICB9IH0KLSAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9OworICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdFJlZ3MsIHByZWZlcnJlZEZvcm1hdCk7Cisg
ICAgICAgIH0pKTsKICAgICB9CiAgICAgCiAgICAgY2FzZSBTdHJpbmdTbGljZTogewpAQCAtNDEz
MywxMSArNDE2NywxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewot
ICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOworCisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8
c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KGluZGV4LmdwcigpLCByZXN1bHQuZ3ByKCkpOyB9KSk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xl
YW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgUmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KG5vZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJk
YTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3Bh
aXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9v
bGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewpAQCAtNDE1Nyw2ICs0MTk5LDQyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29tcGlsZVRvSW5kZXhT
dHJpbmcobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0
b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY29tcGlsZUVu
dW1lcmF0b3JHZXRCeVZhbChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvckluQnlWYWwo
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvckhhc093
blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkobm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAg
ICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDJl
YTk1MTc3YjliZjQ1Njg3MTk1YmEzZGNhYmFmYjRhZWRlNzA2ZDUuLjZlMWIzMmIyMWY0MjNhNWFj
MTI5OWQ3ODliNDUwZGQ3MjVhNGUzNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjI0NSw2ICsyMjQ1LDM3MCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiAgICAgfQogfQogCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkFueVR5cGVkQXJyYXk6CisgICAgY2FzZSBBcnJh
eTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nQXJndW1lbnRzOgorICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgY2FzZSBBcnJheTo6VW5w
cm9maWxlZDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJy
YXkgbW9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRl
ZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGlu
ZGV4LmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOwor
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5v
ZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4s
IGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CisKKyAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OlZhbHVlVW5k
ZWZpbmVkKSwgcmVzdWx0UmVncy5ncHIoKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkJp
Z0ludDY0QXJyYXk6CisgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CisgICAgY2FzZSBB
cnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250
YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlLCBwcmVm
aXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgp
ID09IFN5bWJvbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3ltYm9sKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0
UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdl
dEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwg
cHJvcGVydHlHUFIpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5n
cHIoKTsKKworICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87CisgICAgICAgIEdQUlJlZyBz
dHViSW5mb0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc3R1YkluZm8gPSBHUFJUZW1wb3Jh
cnkodGhpcyk7CisgICAgICAgICAgICBzdHViSW5mb0dQUiA9IHN0dWJJbmZvLmdwcigpOworICAg
ICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0
aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRp
b25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsK
KyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMo
KTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBp
ZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUo
U3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZUdQUikpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFs
dWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgICAgICBpZiAobV9zdGF0ZS5m
b3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkK
KyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdl
bmVyYXRvcj4gc2xvd1BhdGg7CisgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6REZHSklUKSkgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKKyAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQ
UiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6
b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAg
ICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBzdHViSW5mb0dQUiwgbnVs
bHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZUdQUiwgcHJv
cGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBz
bG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xv
d1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRz
KCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Cisg
ICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9ybWF0SlNJbnQzMiA6IERh
dGFGb3JtYXRKUyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVzdWx0UmVncy5ncHIo
KTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKTsKKyAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZO
b3RFbXB0eShyZXN1bHQpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9s
ZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoSWZFbXB0eShyZXN1bHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LCBub2RlLCBmb3JtYXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBz
dGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKKworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBt
X2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZyk7CisgICAgICAgICAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwor
ICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7CisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgIH0KKworCisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91
bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisK
KyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAg
ICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdFJl
ZyA9IHJlc3VsdC5mcHIoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVz
dWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5
TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNo
SWZOYU4ocmVzdWx0UmVnKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRK
UykgeworICAgICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHRSZWcsIHJlc3VsdFJlZ3MpOwor
ICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1h
dERvdWJsZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJl
c3VsdFJlZywgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29k
ZVVzZXNBc090aGVyKTsKKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOworCisgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICBz
dGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KHJlc3VsdElzVW5ib3hlZCA/IERh
dGFGb3JtYXREb3VibGUgOiBEYXRhRm9ybWF0SlMpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91
YmxlKSB7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgTmFOID0gUE5hTjsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKFRydXN0ZWRJ
bW1QdHIoJk5hTiksIHRlbXBSZWcpOworICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAg
ZG91YmxlUmVzdWx0KHRlbXBSZWcsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsK
KyAgICAgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVncy5ncHIoKSk7Cisg
ICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0UmVncy5n
cHIoKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3Vs
dFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1
bHRSZWdzLmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVy
dHlSZWcpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncy5ncHIoKSwgbm9k
ZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewor
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHBy
ZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisKKyAgICAgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExv
YWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRHUFIpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omln
bm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9
IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwor
CisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKKworICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAg
IHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBjb21waWxl
R2V0QnlWYWxPblN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0
QXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVu
dHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6SW50OEFy
cmF5OgorICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MzJB
cnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQ4
Q2xhbXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgIGNhc2UgQXJy
YXk6OlVpbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICBjYXNl
IEFycmF5OjpGbG9hdDY0QXJyYXk6IHsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBl
KSkKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBl
LCBwcmVmaXgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZs
b2F0VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0gfQorfQorCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBu
b2RlLT5vcCgpOwpAQCAtMjcxMiw3ICszMDc2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgIC8v
IFJlbGllcyBvbiBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBiYXNpYyBsYXlvdXQgYXMg
R2V0QnlWYWwKLSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CisgICAgICAg
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25T
dHJpbmcobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhp
cyk7CisgICAgICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRKUyB8
fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5yZWdzKCksIHByZWZlcnJlZEZvcm1hdCk7CisgICAgICAg
IH0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNzQ1LDM0NSArMzExNCwyMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBHZXRCeVZhbDogewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkg
ewotICAgICAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgotICAgICAgICBjYXNlIEFycmF5
OjpGb3JjZUV4aXQ6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nQXJndW1lbnRzOgot
ICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgotICAgICAgICBjYXNl
IEFycmF5OjpVbnByb2ZpbGVkOgotICAgICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1c2UobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2UoKTsKLQotICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKLSAgICAg
ICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5v
ZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCku
dXNlS2luZCgpID09IE9iamVjdFVzZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51
c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBw
cm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsKLSAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBwcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEludmFsaWRH
UFJSZWc7Ci0gICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJ
VCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSW5mby5lbXBsYWNlKHRoaXMpOwotICAgICAgICAg
ICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8tPmdwcigpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29k
ZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFu
ZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAg
ICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygp
OwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAg
ICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSku
aXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7Ci0KLSAgICAgICAgICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6
REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRS
ZWdpc3RlcnMsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOwot
Ci0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9u
bHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0
cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAgICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKLSAgICAgICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7Ci0gICAgICAgICAgICBpZiAoSklU
Q29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAgICAgICAgICAgICBzbG93
UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRo
aXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0
dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5
R1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGggPSBz
bG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihj
b2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
Uik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEdl
dEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotCi0gICAgICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAg
ICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0Lmdwcigp
KTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVD
aGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOwotICAgICAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHQuZ3ByKCkp
OwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAg
ICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAg
TG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9ybWF0SlNJbnQz
MiA6IERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZG9u
ZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBz
bG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7Ci0g
ICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1
bHRSZWcpKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcs
IHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBG
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwotCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKLQotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlN
b2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJh
bmNoSWZOYU4ocmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRP
ZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNB
c090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJSZWc+
IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmVn
ID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJv
eGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVn
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1
bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAqcmVzdWx0UmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwg
KnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
ICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAg
Ym94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1f
aml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNj
b3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0
IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2ggKHBy
ZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAg
ICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTIHx8IHByZWZlcnJlZEZv
cm1hdCA9PSBEYXRhRm9ybWF0SW50MzIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFs
dWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MgPSByZXN1
bHQucmVncygpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0
UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotICAgIAotICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
KSwgcmVzdWx0UmVnKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
SWZFbXB0eShyZXN1bHRSZWcpKTsKLSAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJl
ZywgcHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJp
bmcobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMo
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5Ogot
ICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpG
bG9hdDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheTogewotICAgICAg
ICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlU
eXBlKCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUs
IHR5cGUpOwotICAgICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4g
c3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM1ODAsNyArMzYyNCw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IGZhbHNlOwotICAg
ICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2RlLCByZXN1bHRHUFIsIHR5cGUsIGNh
blNwZWN1bGF0ZSk7CisgICAgICAgIGNvbnN0ZXhwciBib29sIHNob3VsZEJveCA9IGZhbHNlOwor
ICAgICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2RlLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCB0eXBlLCBjYW5TcGVjdWxhdGUsIHNob3VsZEJveCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCkBAIC01MjkwLDExICs1MzM1LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
bm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAg
ICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVk
UHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0g
eyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsK
KyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5
OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFz
RW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOworCisgICAgICAgIGNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsm
XSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwgcmVzdWx0LmdwcigpKTsgfSkp
OworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CkBAIC01MzE0
LDYgKzUzNjcsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAg
ICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5h
bWU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZh
bDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNv
bXBpbGVFbnVtZXJhdG9ySW5CeVZhbChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAg
Y2FzZSBQcm9maWxlVHlwZTogewogICAgICAgICBjb21waWxlUHJvZmlsZVR5cGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggMTE3NmQzZTdhZjI4MzMyYjAzMDc0MWI0
ZDljNDBmMGJlZjFkMDM4Yi4uNWY1MWYyMjUxMDRmOWJhNTIyNjk4ZGQwMzY3NWJkZDViZTI3NWZh
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0yNzMsNiArMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAg
Y2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnV0dGVyZmx5OgorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbERpcmVjdDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtMzUyLDYgKzM1
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAg
ICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAg
Y2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAppbmRleCAyZTJmMDdkZmM3ZThjMTNkZGIwZWRkNWEyZDA3YTVkODcyZTE3OTA4Li45ZWQ4
NzEzM2Y3NzIzMGUwZTFiZDQ0NWYzMDYyMzQzN2ZjZDYzNDA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApAQCAtMTE0
LDYgKzExNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkgXAogICAg
IG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZz
ZXQoKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpIFwKKyAgICBt
YWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfbW9kZVNldCwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmxhZ3Ms
IEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGbGFncygpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5n
X2xlbmd0aCwgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSBcCiAgICAgbWFjcm8oSlNS
b3BlU3RyaW5nX2ZpYmVyMCwgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVyMCgpKSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggYTFhNWZk
MjQ0Y2YyMTEwMzI2NDE5N2E3NmFlMzBjN2Y2MGY3OWU2NC4uNmU1ZDEwZDQzMzdjN2EzZGE2MTIz
YjM1MGU2OGUyNzlmMTBiNWI2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcApAQCAtMjk4LDYgKzI5OCwxMyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZToKICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6CiAgICAgY2FzZSBU
b0luZGV4U3RyaW5nOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6
CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRv
ck5leHRFeHRyYWN0SW5kZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5
TmFtZToKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JJ
bkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgQm90
dG9tVmFsdWU6CiAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNhc2UgUGhhbnRvbU5l
d0Z1bmN0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCmluZGV4IDFjMmRkOTU1NTRiMmY0NWRmOTUxNGRjODcxNDFjZTNmMmQwNjNkZGEuLmI2YzNm
YzNiZjA4YWUzYWM0ZmI4MGY5ZmU0MTVkMzc1MjE5OWRlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTEwMiw2ICsxMDIsOCBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZWN1cnNhYmxlTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3JkZXJl
ZFNldC5oPgogCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisKICN1bmRlZiBSRUxFQVNFX0FT
U0VSVAogI2RlZmluZSBSRUxFQVNFX0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAogICAgIGlmICgh
KGFzc2VydGlvbikpIHsgXApAQCAtMTU1OCw2ICsxNTYwLDI3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUlu
ZGV4QW5kTW9kZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5l
eHRFeHRyYWN0SW5kZXg6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
SW5kZXgoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0
RXh0cmFjdE1vZGU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9k
ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRh
dGVQcm9wZXJ0eU5hbWU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQ
cm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0
b3JHZXRCeVZhbDoKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAg
ICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CisgICAgICAgICAgICBjb21waWxl
RW51bWVyYXRvckhhc093blByb3BlcnR5KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0
cnVjdHVyZUltbWVkaWF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MDIwLDcgKzUwNDMs
NyBAQCBwcml2YXRlOgogICAgICAgICAvLyB3ZSBkb21pbmF0ZSB0aGVtLgogICAgIH0KICAgICAK
LSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisgICAgTFZhbHVlIGNvbXBpbGVHZXRCeVZhbElt
cGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgc3dpdGNoICht
X25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA0Nyw4ICs1MDcwLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVw
IGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAgICAgICAgICAgICAg
ICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgIHNldEpTVmFs
dWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFz
dENhc2UgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTA4MCw4ICs1MTAyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVu
dCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQs
IGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CkBAIC01
MTAwLDggKzUxMjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZy
b21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtX291
dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7CiAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBtX25vZGUtPmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVC
eXRlY29kZVVzZXNBc090aGVyKTsKQEAgLTUxNDEsMTggKzUxNjIsMTYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKQotICAgICAgICAgICAgICAg
IHNldERvdWJsZShtX291dC5waGkoRG91YmxlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50
NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCk7CisKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNs
b3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7
CiAgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpOwogCiAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFs
dWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0g
ICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVVbmRl
ZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKTsKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogewpAQCAtNTE2OSw4ICs1
MTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMs
IG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5kcyk7CiAgICAgICAgICAgICAgICAgVHlw
ZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgICAg
IG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0Lnplcm9FeHRQdHIo
aW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNz
KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBtX291
dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUxOTIsOCArNTIxMCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CkBAIC01MjQ2LDggKzUyNjMsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZs
b3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291
dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgpAQCAtNTI1Niwy
NCArNTI3MiwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0
QnlWYWwuY29udGFpbnMobV9ub2RlKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9
PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxs
KAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcsIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2Jq
ZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkp
KTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludDY0
LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN5bWJvbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAx
KSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93
U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwoCisgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAg
ICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAot
ICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKSksIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gbV9ub2RlOwpAQCAtNTM3Myw4ICs1Mzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9p
bnQpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7
CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CkBAIC01Mzkw
LDggKzU0MDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJv
bUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAg
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50
IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CkBAIC01NDE3LDEzICs1NDI4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8g
a2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAg
ICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaW5nQ2hhckF0SW1wbCgp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5
OgpAQCAtNTQ0OCw5ICs1NDU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGxvYWRGcm9tSW50VHlwZWRBcnJheShwb2ludGVyLCB0eXBlKTsKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBr
ZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3Vs
YXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1
bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwpA
QCAtNTQ2OSw4ICs1NDc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0
b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7
Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KIApAQCAtNTQ4MCw4ICs1NDg2LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmls
ZWQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5
cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1f
bm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5
cGUpKSB7CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOwor
ICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5T
cGVjdWxhdGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgaWYg
KHJlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBAIC04NTcxLDcgKzg1
OTMsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFz
dFJlc3VsdCwgZW1wdHlSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICB9CiAgICAgCi0gICAgdm9p
ZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICBMVmFsdWUgY29tcGlsZVN0cmluZ0NoYXJBdElt
cGwoKQogICAgIHsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dTdHJpbmcobV9ncmFwaC5jaGls
ZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC5j
aGlsZChtX25vZGUsIDEpKTsKQEAgLTg2NzksNyArODcwMSwxMiBAQCBwcml2YXRlOgogICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgLy8gV2Ug
aGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgog
ICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5waGkoSW50NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2
NCwgcmVzdWx0cyk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAg
ICB7CisgICAgICAgIHNldEpTVmFsdWUoY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQpAQCAtMTI5MDYsMTcg
KzEyOTMzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJh
dGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCisgICAgTFZhbHVlIGNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHlJbXBsKExWYWx1ZSBpbmRleCwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3Bl
cmF0aW9uKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTFZhbHVl
IGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7Ci0gICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7
CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbV9ub2RlLT5hcnJheU1vZGUoKTsKIAogICAgICAg
ICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAg
ICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAg
ICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtb2RlLnR5cGUoKSA9PSBBcnJheTo6
SW50MzIgPwogICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6
IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwpAQCAtMTI5NTEsMTEgKzEyOTc3
LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xv
d1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0
LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0g
bG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAg
TFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBt
X25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
SW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRp
ZXM7CiAgICAgICAgICAgICAKQEAgLTEyOTg5LDEyICsxMzAxNCwxMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50
MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0g
bG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAg
TFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBt
X25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEzMDI2LDE3ICsxMzA1MCwyMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQp
KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQz
MiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIGRl
ZmF1bHQ6IHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJ
bnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2Us
IGluZGV4KSkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQu
bm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSk7CiAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IAorICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1og
c2xvd1BhdGhPcGVyYXRpb24pCisgICAgeworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQz
MihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBzZXRCb29sZWFuKGNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKGluZGV4LCBzbG93UGF0aE9wZXJhdGlvbikpOwor
ICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpCiAgICAgewog
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwpAQCAtMTMyMTcsNiArMTMyNDUsMjQ3IEBAIHByaXZh
dGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgaW5kZXgpKTsKICAgICB9CisKKyAgICB2b2lkIGNv
bXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgpCisgICAgeworICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMy
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJh
dG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworCisgICAgICAg
IGlmIChtX25vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9W
YWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgp
KSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluY3JlbWVudCA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjaGVja0hhc1Byb3BlcnR5ID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1f
b3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5k
ZXhGb3JIYXNQcm9wZXJ0eSA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwg
dW5zdXJlKGluY3JlbWVudCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1l
bnQpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0
aWFsSW5kZXgpOworICAgICAgICAgICAgTFZhbHVlIGluY3JlbWVudGVkSW5kZXggPSBtX291dC5h
ZGQoaW5kZXhQaGksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGluY3JlbWVudGVkSW5kZXhSZXN1bHQgPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291
dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9v
dXQubGVzc1RoYW4oaW5jcmVtZW50ZWRJbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVj
a0hhc1Byb3BlcnR5KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjaGVja0hhc1Byb3BlcnR5KTsKKyAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0
eUluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSwgaW5j
cmVtZW50ZWRJbmRleFJlc3VsdCk7CisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhp
KGluZGV4UGhpLCBtX291dC5hbmNob3IocHJvcGVydHlJbmRleCkpOworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZmluYWxQcm9wZXJ0eUluZGV4ID0gbV9vdXQuYW5jaG9yKHByb3BlcnR5SW5k
ZXgpOworICAgICAgICAgICAgTFZhbHVlIGhhc1Byb3BlcnR5ID0gY29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eUltcGwocHJvcGVydHlJbmRleCwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaGFzUHJvcGVydHksIHVuc3VyZShj
b250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgZmluYWxJbmRleCA9IG1f
b3V0LnBoaShJbnQzMiwgZmluYWxJbmNyZW1lbnRlZEluZGV4LCBmaW5hbFByb3BlcnR5SW5kZXgp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGZpbmFs
SW5kZXgsIEludDY0KSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkg
PDwgMzIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBFZGdl
JiBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYg
KG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChiYXNlRWRnZSk7CisgICAgICAgICAgICBzcGVjdWxh
dGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5ub3RFcXVhbChtX291dC5sb2Fk
MzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVy
YXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQp
KSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUs
IG1fb3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcl9tb2RlU2V0KSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5j
cmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUo
aW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluY3JlbWVudCk7Cisg
ICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJPbmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uKTsKKyAgICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgs
IGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPciht
X291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVt
YmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TmFtZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpT
VmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5k
TW9kZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1l
cmF0b3IpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJ
bmRleCgpCisgICAgeworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihib3hl
ZFBhaXIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0lu
dDMyKG1fb3V0LmxTaHIoYm94ZWRQYWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOworICAgICAg
ICBzZXRJbnQzMihtX291dC5iaXRBbmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNv
dmVyeSBmb3IgdGhpcyBub2RlIHNpbmNlIGl0J3MgImVmZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxp
dmUgaW4gYnl0ZWNvZGUuCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWUoKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBt
b2RlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJh
dG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBzZXRKU1ZhbHVlKHZt
Q2FsbChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7CisgICAg
fQorCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKCkKKyAgICB7CisgICAgICAg
IEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAg
IEVkZ2UgcHJvcGVydHlOYW1lRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKTsK
KyAgICAgICAgRWRnZSBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAy
KTsKKyAgICAgICAgRWRnZSBpbmRleEVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
Myk7CisKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBERkc6OmlzQ2VsbChiYXNlRWRnZS51c2VLaW5k
KCkpID8gbG93Q2VsbChiYXNlRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSA6IGxvd0pT
VmFsdWUoYmFzZUVkZ2UpOworCisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gc3RvcmFnZUVkZ2Ug
PyBsb3dTdG9yYWdlKHN0b3JhZ2VFZGdlKSA6IG51bGxwdHI7CisgICAgICAgIC8vIFdlIGhhdmUg
dG8gbWF0ZXJpYWxpemUgdGhlIHByb3BlcnR5TmFtZSBoZXJlIGluIGNhc2UgaXQgcmVxdWlyZXMg
Ym94aW5nIHNpbmNlIHRoZSBJQyBwYXRoIHdvbid0IGRvbWluYXRlIHN1YnNlcXVlbnQgdXNlcyBp
biBzdWJzZXF1ZW50IG5vZGVzLgorICAgICAgICAvLyBJZiBpdCdzIGFuIEludDMyIGFuZCB3ZSB1
c2UgaXQgYXMgc3VjaCB0aGlzIGJveGluZyB3aWxsIGJlIERDRSdkIGJ5IGIzIGxhdGVyIGFueXdh
eS4KKyAgICAgICAgbG93SlNWYWx1ZShwcm9wZXJ0eU5hbWVFZGdlLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOworCisKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIoaW5kZXhFZGdl
KTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgNCkpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDUpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjaGVja1N0cnVj
dHVyZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJ
bmxpbmVPck91dE9mTGluZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgaW5saW5lTG9hZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgb3V0T2ZMaW5lTG9hZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgZ2VuZXJpY0lDQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIExWYWx1
ZSBpc05vdE5hbWVkID0gbV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE5hbWVk
LCB1bnN1cmUoZ2VuZXJpY0lDQmxvY2spLCB1bnN1cmUoY2hlY2tTdHJ1Y3R1cmVCbG9jaykpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrU3RydWN0dXJlQmxvY2spOworICAgICAgICAv
LyBUT0RPIGNoZWNrIGNlbGw/CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRDsKKyAgICAgICAg
YXV0byBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2Uubm9kZSgpKS5tX3N0cnVj
dHVyZS5vbmx5U3RydWN0dXJlKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpCisgICAgICAgICAg
ICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworCisgICAgICAgIExWYWx1ZSBoYXNFbnVtZXJhdG9y
U3RydWN0dXJlID0gbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJh
dG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkp
OworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0Owor
ICAgICAgICBpZiAoaW5kZXhFZGdlLm5vZGUoKSA9PSBwcm9wZXJ0eU5hbWVFZGdlLm5vZGUoKSkg
eworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGJhZFN0cnVjdHVyZVNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIG1f
b3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5lT3JP
dXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhiYWRTdHJ1Y3R1cmVTbG93UGF0aCk7CisgICAgICAgICAgICBiYWRTdHJ1
Y3R1cmVTbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlv
bkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBiYXNlLCBpbmRleCwgZW51bWVyYXRvcikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5s
aW5lT3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayk7CisgICAgICAgIExW
YWx1ZSBpbmxpbmVDYXBhY2l0eSA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxp
bmVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAg
ICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFj
aXR5KCk7CisgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3Ry
dWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlubGlu
ZUNhcGFjaXR5KQorICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51
bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2Fw
YWNpdHkpOworICAgICAgICBMVmFsdWUgaXNJbmxpbmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRp
ZXMgPyBtX291dC5pbnQzMk9uZSA6IG1fb3V0LmJlbG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0lubGluZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayks
IHVuc3VyZShvdXRPZkxpbmVMb2FkQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhp
bmxpbmVMb2FkQmxvY2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmxpbmVSZXN1bHQgPSBt
X291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1f
aGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLAorICAgICAgICAgICAgICAgIGJhc2UsIG1f
b3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9hZEJsb2NrKTsKKyAgICAgICAgaWYg
KCFzdG9yYWdlKQorICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9o
ZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworCisgICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBt
X291dC5zaWduRXh0MzJUbzY0KAorICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRl
eCwgaW5saW5lQ2FwYWNpdHkpKSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxp
bmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0Lmxv
YWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0
b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oZ2VuZXJpY0lDQmxvY2spOworICAgICAgICBMVmFsdWUgZ2VuZXJpY1Jlc3VsdCA9IGNvbXBp
bGVHZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7
CisgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUp
KQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBib3hJbnQzMihnZW5lcmljUmVzdWx0
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnZW5lcmljUmVzdWx0ID0gc3Ry
aWN0SW50NTJUb0pTVmFsdWUoZ2VuZXJpY1Jlc3VsdCk7CisgICAgICAgIH0gZWxzZSBpZiAoZ2Vu
ZXJpY1Jlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQg
PSBib3hEb3VibGUoZ2VuZXJpY1Jlc3VsdCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2Vu
ZXJpY0lDUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShJbnQ2NCwgZ2VuZXJpY0lD
UmVzdWx0LCBvdXRPZkxpbmVSZXN1bHQsIGlubGluZVJlc3VsdCk7CisgICAgICAgIGlmIChiYWRT
dHJ1Y3R1cmVTbG93UGF0aFJlc3VsdCkKKyAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9Q
aGkocmVzdWx0LCBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdCk7CisgICAgICAgIHNldEpTVmFs
dWUocmVzdWx0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0
aW9uVHlwZT4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoU2xvd1BhdGhG
dW5jdGlvblR5cGUgc2xvd1BhdGhGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1h
bnRpYyk7CisgICAgICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMCk7CisgICAgICAgIExWYWx1ZSBiYXNlID0gYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxV
c2UgPyBsb3dDZWxsKGJhc2VFZGdlKSA6IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBM
VmFsdWUgcHJvcGVydHlOYW1lID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSkpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMikpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93
Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNCkpOworCisgICAgICAgIExCYXNpY0Js
b2NrIGlzTmFtZWRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGlzQ2VsbEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbWF0
Y2hlc1N0cnVjdHVyZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgb3BlcmF0aW9uQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1fb3V0LmJyYW5j
aChtX291dC50ZXN0Tm9uWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSwgdW5zdXJlKGlzTmFtZWRCbG9jayksIHVuc3VyZShv
cGVyYXRpb25CbG9jaykpOworICAgICAgICBtX291dC5hcHBlbmRUbyhpc05hbWVkQmxvY2spOwor
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoYmFzZSwgcHJvdmVuVHlwZShiYXNlRWRnZSkp
LCB1bnN1cmUoaXNDZWxsQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxvY2spKTsKKworICAgICAg
ICBtX291dC5hcHBlbmRUbyhpc0NlbGxCbG9jayk7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJ
RCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQubG9hZDMyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVy
ZUlEKSksCisgICAgICAgICAgICB1c3VhbGx5KG1hdGNoZXNTdHJ1Y3R1cmVCbG9jayksIHJhcmVs
eShvcGVyYXRpb25CbG9jaykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1hdGNoZXNTdHJ1
Y3R1cmVCbG9jayk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5hbWVkUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG9wZXJhdGlvbkJsb2NrKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgb3BlcmF0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVh
bih2bUNhbGwoSW50NjQsIHNsb3dQYXRoRnVuY3Rpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVj
dCksIGJhc2UsIHByb3BlcnR5TmFtZSwgaW5kZXgsIG1vZGUpKSk7CisgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24p
OworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1bHQsIG9wZXJh
dGlvblJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFs
KCkKKyAgICB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9u
RW51bWVyYXRvckluQnlWYWwpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eSgpCisgICAgeworICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3Bl
cnR5KG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CisgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCkKICAgICB7CkBAIC0xNzM0NCw3
ICsxNzYxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX25v
ZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkgJiYgY2FuU3BlY3VsYXRlKSB7CiAgICAgICAgICAg
ICBzcGVjdWxhdGUoCiAgICAgICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0
ciwgbV9vdXQubGVzc1RoYW4ocmVzdWx0LCBtX291dC5pbnQzMlplcm8pKTsKQEAgLTIwMjgzLDYg
KzIwNTUyLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAg
fQogCisgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGZvciBpbnRzIHJpZ2h0IG5vdy4KKyAgICBQYXRj
aHBvaW50VmFsdWUqIGRhdGFMb2dGb3JEZWJ1Z2dpbmcoY29uc3QgY2hhciogcHJlZml4LCBMVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHJlc3VsdCA9IG1fb3V0
LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgIHJlc3VsdC0+ZWZmZWN0cy53cml0ZXNMb2NhbFN0
YXRlID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQodmFsdWUsIFZhbHVlUmVwOjpyZWco
R1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgVHlwZSB2YWx1ZVR5cGUgPSB2YWx1ZS0+dHlwZSgp
OworICAgICAgICByZXN1bHQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3Jv
U2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgIGpp
dC5wcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodmFsdWVUeXBlID09IEludDMyKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
TG4ocHJlZml4LCBjb250ZXh0LmdwcjxpbnQzMl90PihHUFJJbmZvOjpyZWdUMCkpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29u
dGV4dC5ncHI8SlNWYWx1ZT4oR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICB9KTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIEF2YWlsYWJp
bGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxh
dG9yLm1fYXZhaWxhYmlsaXR5OyB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFw
aC5tX3ZtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RT
TC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCmluZGV4IDczMTcx
MDA5NmNmM2UyNDk4YWU0NWRkYTI2YWE4MmU3OWNkNDZhNGUuLjY5N2RlOGQ5OGYxOWRlMzllNDFj
NDI0YWI1ODQwOWY0ZjUxOWIwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvRFNMLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNM
LnJiCkBAIC0xMzgsNiArMTM4LDcgQEAgbW9kdWxlIERTTAogI2luY2x1ZGUgIkdldEJ5VmFsSGlz
dG9yeS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uTW9k
ZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5j
bHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1
ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1JlZ2lzdGVyLmgKaW5kZXggNDQ0NjM1ZTk4MGQ5MGFmODM3ZWJkNjNiOTYyZmFlZGUyZWM1MzUw
My4uZDg3OWM5MGJlMzExNzg2MjMzZjUyNmIxODNlZGYxY2IzYzdiYjM4YSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKQEAgLTUzLDcgKzUzLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9y
PShDYWxsRnJhbWUqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9
KENvZGVCbG9jayopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0o
SlNTY29wZSopOwotICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNP
YmplY3QqKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTQ2Vs
bCopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oRW5jb2RlZEpT
VmFsdWUpOwogCiAgICAgICAgIGludDMyX3QgaSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCmluZGV4IGM1NmVmNWU0
NTU0Y2IxMDNhYmViZTcyZTYyOThmOGM0OGFhZDk4NjAuLjU5M2VmNjY2OGRlMmUwM2E2NTliMzlm
MzFhZjYwZjg4YzI3ODM5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9SZWdpc3RlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKQEAgLTYzLDcgKzYzLDcgQEAgQUxXQVlTX0lOTElO
RSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpv
cGVyYXRvcj0oSlNPYmplY3QqIG9iamVjdCkKK0FMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lz
dGVyOjpvcGVyYXRvcj0oSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgdS52YWx1ZSA9IEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKG9iamVjdCkpOwogICAgIHJldHVybiAqdGhpczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IGFjOGI1MTM3ZDg1MzU0NTA2
YWVlZGNlZGJkMWM1YmQ3NzI1NzljMDEuLjQxNTllN2U1MDQ5NjkzN2VlMWU1NmFmYjdjMjBhZTlj
ZjJhODllZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aApAQCAtODg5LDcgKzg4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoCiAg
ICAgICAgICAgICBCZWxvdywgQWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKTsKICAgICB9Ci0gICAgCisKICAgICAv
LyBOb3RlIHRoYXQgZmlyc3QgYW5kIGxhc3QgYXJlIGluY2x1c2l2ZS4KICAgICBKdW1wIGJyYW5j
aElmVHlwZShHUFJSZWcgY2VsbEdQUiwgSlNUeXBlUmFuZ2UgcmFuZ2UpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDQyYjhjYWY1ZjVjYjhjNGI1ZjNhZGViM2VkYTQ3YWIy
NjkwZDQ5MDQuLjRmN2YyOTUxMjhlOGM1ZTA5MGU2ZDIxMmEyNDFkOGIzNmI1Y2JiMjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTMxMSw2ICszMTEsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJh
YmxlX2xlbmd0aCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpCiAgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQorICAg
ICAgICBERUZJTkVfU0xPV19PUChlbnVtZXJhdG9yX25leHQpCiAgICAgICAgIERFRklORV9TTE9X
X09QKHRvX2luZGV4X3N0cmluZykKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMpCiAgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1l
bnRzKQpAQCAtMzY1LDYgKzM2Niw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV9pZF93aXRoX3RoaXMpCiAgICAgICAgIERF
RklORV9PUChvcF9nZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5
X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKKyAgICAg
ICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Ao
b3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0
X3ByaXZhdGVfbmFtZSkKICAgICAgICAgREVGSU5FX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQog
ICAgICAgICBERUZJTkVfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTU3OCw2ICs1ODIs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9nZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X3ByaXZhdGVfbmFt
ZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCmluZGV4IDQ4N2E1YWM1YjhlNWQ4YTlkODBiMmM2ZDMwNmUwODE1MjFiODI4
MTQuLjE0MjYwNDI4NzVkZjU3YTNlY2E1MGQzYzViNDMyNTg3MGI4Njk2ODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaApAQCAtNjg1LDYgKzY4NSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgorICAgICAgICB2
b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJh
dG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bj
b2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+CisgICAgICAgIHZvaWQgZW1p
dF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBP
cGNvZGVUeXBlJiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgICAgICB2b2lkIGVtaXRfb3Bf
ZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwor
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Nh
bGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCAxNWUxZDM0NTc5YjZkNGM4YzE3
MGQyMzUwYzZjMzY0NDNmZmVhNDE1Li5kNTk0NTYyMjU4ODkxNWU3ODg2OTk0ZDI2YjA4Yzk2NzIz
Zjc0YWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtp
bmQuaCIKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwu
aCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJh
dG9ycy5oIgpAQCAtODYsMTAgKzg3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordGVtcGxhdGU8dHlw
ZW5hbWUgT3Bjb2RlVHlwZT4KK3ZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29u
c3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVBy
b2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CkBAIC0xMzYsNiArMTM3
LDExIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgfQogfQogCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGdlbmVyYXRl
R2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCksIGl0
ZXIpOworfQorCiAjaWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY8SklUVGh1bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxs
R2VuZXJhdG9yKFZNJiB2bSkKIHsKQEAgLTM1NDAsNiArMzU0NiwxMzYgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHkKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCit2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlO
YW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgSnVtcExpc3QgZG9uZUNhc2VzOwor
CisgICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisKKyAg
ICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRh
dGEpKTsKKyAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgorICAg
IEp1bXAgaXNOb3ROYW1lZE1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBKdW1w
IHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKKworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMSk7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVt
ZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vz
cworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDEsIHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCksIHJlc3VsdEdQUik7CisKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAv
LyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRo
aXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBuZWcz
MihyZWdUMSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBpbnQz
Ml90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldElu
QnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgp
KTsKKworICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7CisgICAgc3RvcmU4KFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5OYW1lZE1vZGVTdHJ1Y3R1
cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisKKyAgICBpc05v
dE5hbWVkTW9kZS5saW5rKHRoaXMpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVz
dDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJ
bmRleGVkTW9kZSkpOworICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4K
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisKKyAgICBpc05vdElu
ZGV4ZWQubGluayh0aGlzKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
TmFtZSwgcmVnVDEpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBt
X2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUlu
ZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZh
bCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1Zh
bHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSwgcmVnVDIpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgIGFkZFNsb3dD
YXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgp
OworICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOworCisgICAgZG9uZUNhc2VzLmxpbmsodGhp
cyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhy
ZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjpl
bWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlv
blR5cGUgZ2VuZXJhbENhc2UpCit7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZp
cnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZp
cnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOworCisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7CisgICAg
b3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRh
KSk7CisKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOworCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgbW92ZShUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIHNs
b3dDYXNlcy5saW5rKHRoaXMpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGdlbmVyYWxDYXNlKTsKKyAgICBzbG93UGF0aENhbGwu
Y2FsbCgpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpLCBzbG93
X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHk+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCA1OGU1
ZDUyZmU1YjA4YWUyOWUzZTVkZGRlM2Q3NDY3OTY3ZjIzMDE5Li4yNTdjYWVhMjc4Njg4M2JiYTA4
YzdhMmM0YjIzOGQ1MDQ0ZTcyOTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTE1MDUsNiArMTUwNSwyNSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwogCisKK3ZvaWQgSklUOjplbWl0X29w
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudElu
c3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQ
YXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhf
ZW51bWVyYXRvcl9pbl9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNf
b3duX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggMzdiNmRm
MzBmMTBjM2EwMDFhNTY1NWVhMWJiMWRiNTk1NzNjZjYwOC4uZjczMjY4OGFlMzJlY2RkYjk3NGJh
YmZmYjM2NzJmZmEzYzFiZjVmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtMTk5OCw2ICsxOTk4LDEwIEBAIHNsb3dQ
YXRoT3AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCiBzbG93UGF0aE9wKGdldF9kaXJlY3RfcG5hbWUp
CiBzbG93UGF0aE9wKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKIHNsb3dQYXRoT3AoZ2V0X3Byb3Bl
cnR5X2VudW1lcmF0b3IpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfbmV4dCkKK3Nsb3dQYXRoT3Ao
ZW51bWVyYXRvcl9nZXRfYnlfdmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2luX2J5X3ZhbCkK
K3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogc2xvd1BhdGhPcChoYXNf
ZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KQogc2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9w
cm9wZXJ0eSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKaW5kZXggMTEyOTU0YmI5YjZlNTAxMzY4ODNiNzQ1NmNiMWU4MzE4ZmI1YTUx
MS4uZTk5Y2UzNzhmZjQ5MWE5NDJlYWFiMjRmMTc3ZmI4ZWY3NTNmMzYwYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC0xMDg0
LDExICsxMDg0LDEzMSBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQogICAgIFJFVFVSTihwcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KGdsb2JhbE9iamVjdCwgYmFzZSkpOwogfQogCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCkKK3sKKyAgICBCRUdJTigpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgUmVnaXN0ZXImIG1vZGVSZWdpc3Rl
ciA9IEdFVChieXRlY29kZS5tX21vZGUpOworICAgIFJlZ2lzdGVyJiBpbmRleFJlZ2lzdGVyID0g
R0VUKGJ5dGVjb2RlLm1faW5kZXgpOworICAgIFJlZ2lzdGVyJiBuYW1lUmVnaXN0ZXIgPSBHRVQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpOworCisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihtb2RlUmVnaXN0ZXIuanNWYWx1ZSgpLmFz
VUludDMyKCkpOworICAgIHVpbnQzMl90IGluZGV4ID0gaW5kZXhSZWdpc3Rlci5qc1ZhbHVlKCku
YXNVSW50MzIoKTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9
IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJh
dG9yKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUKGJ5dGVjb2RlLm1f
YmFzZSkuanNWYWx1ZSgpOworICAgIEFTU0VSVCghYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpOworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVj
dCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUu
b2JzZXJ2ZVN0cnVjdHVyZUlEKGJhc2UtPnN0cnVjdHVyZUlEKCkpOworCisgICAgSlNTdHJpbmcq
IG5hbWUgPSBlbnVtZXJhdG9yLT5jb21wdXRlTmV4dChnbG9iYWxPYmplY3QsIGJhc2UsIGluZGV4
LCBtb2RlKTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKKworICAgIG1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworICAgIG1vZGVSZWdp
c3RlciA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpKTsKKyAgICBpbmRleFJl
Z2lzdGVyID0ganNOdW1iZXIoaW5kZXgpOworICAgIG5hbWVSZWdpc3RlciA9IG5hbWUgPyBuYW1l
IDoganNOdWxsKCk7CisgICAgRU5EKCk7Cit9CisKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKQoreworICAgIEJFR0lOKCk7CisgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICBhdXRvIG1v
ZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KEdFVChieXRl
Y29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsKKworICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIHVu
c2lnbmVkIGluZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc0ludDMyKCk7
CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpJbmRleGVkTW9kZTogeworICAgICAgICAgICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUu
b2JzZXJ2ZVN0cnVjdHVyZUlEKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7Cisg
ICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOiB7CisgICAgICAgICAgICBpZiAoYmFz
ZVZhbHVlLmlzQ2VsbCgpICYmIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSA9PSBl
bnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Un
bGwgb25seSBtYXRjaCB0aGUgc3RydWN0dXJlIElEIGlmIHRoZSBiYXNlIGlzIGFuIG9iamVjdC4K
KyAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBlbnVtZXJhdG9yLT5lbmRTdHJ1Y3R1cmVQ
cm9wZXJ0eUluZGV4KCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFs
dWUuZ2V0T2JqZWN0KCktPmdldERpcmVjdChpbmRleCA8IGVudW1lcmF0b3ItPmNhY2hlZElubGlu
ZUNhcGFjaXR5KCkgPyBpbmRleCA6IGluZGV4IC0gZW51bWVyYXRvci0+Y2FjaGVkSW5saW5lQ2Fw
YWNpdHkoKSArIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2Fz
dDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5OYW1lZE1vZGVTdHJ1
Y3R1cmVNaXNtYXRjaCk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorCisg
ICAgICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTogeworICAg
ICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBtb2RlICE9IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TmFtZWRNb2RlKQorICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlE
KCkpOworICAgICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29k
ZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIC8v
IFRPRE8gRG9lcyB0aGlzIGFjdHVhbGx5IGV2ZXIgdGhyb3c/IElzbid0IHN0cmluZyBiYWNrZWQg
YnkgYSBVVUlEPworICAgICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgICAgICBS
RVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkp
OworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9OworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpCit7CisgICAgQkVHSU4oKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2Rl
ID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNv
ZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAgICBDSEVDS19F
WENFUFRJT04oKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBq
c0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRv
cikuanNWYWx1ZSgpKTsKKyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3Qo
KSkgeworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVk
TW9kZSAmJiBiYXNlLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVy
ZUlEKCkpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKKworICAgICAgICBp
ZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKQorICAgICAg
ICAgICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIEdF
VChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkpKTsKKyAgICB9CisKKyAg
ICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1l
KS5qc1ZhbHVlKCkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcElu
QnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN0cmluZywgJm1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlKSkpOworfQorCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2Vu
dW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKK3sKKyAgICBCRUdJTigpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2Rl
ID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNv
ZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAgICBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBpZiAo
YXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3QoKSkgeworICAgICAgICBpZiAobW9kZSA9
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBiYXNlLT5zdHJ1Y3R1cmVJ
RCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICBSRVRV
Uk4oanNCb29sZWFuKHRydWUpKTsKKworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbihi
YXNlLT5oYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIEdFVChieXRlY29kZS5tX2luZGV4KS5q
c1ZhbHVlKCkuYXNVSW50MzIoKSkpKTsKKyAgICB9CisKKyAgICBKU1N0cmluZyogc3RyaW5nID0g
YXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkpOworICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAg
ICBDSEVDS19FWENFUFRJT04oKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKG9iamVjdFByb3RvdHlw
ZUhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUpKSk7
Cit9CisKIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9z
dHJ1Y3R1cmVfcG5hbWUpCiB7CiAgICAgQkVHSU4oKTsKICAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwogICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihH
RVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOworCiAgICAgdWlu
dDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyQXNB
bnlJbnQoKTsKIAogICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBudWxscHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAppbmRleCBkOGQx
NTAxZmIzNWJhYzI3OTRjNmQ5NDEwMjcxYmI2OGY0Y2MwNTdlLi45ZDY0MzhjNGY0OTVlMTZkMjYy
YjhhMzIxZGEzZjA0MDVkYjdhZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaApAQCAtMjY0LDYgKzI2NCwxMCBAQCBKU0NfREVDTEFSRV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKIEpTQ19ERUNMQVJF
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKIEpT
Q19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZSk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9lbnVtZXJhdG9yX25leHQpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiBKU0NfREVDTEFS
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOwogSlNDX0RFQ0xB
UkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfcHJvZmlsZV90eXBlX2NsZWFyX2xvZyk7CiBK
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF91bnJlYWNoYWJsZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXgg
YjFiNDE2ZTIwNWY4YzNlNzg0NjFhMjMwYTAyY2QzYTQ2Yjk1ZDdjMi4uMjRiZDc2NjI2OGFlNTJj
Y2RmM2Q0MzViYjIxNDZjZmVmOTgzMTk2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTQ2OCw2ICsxNDY4LDEwIEBAIGNhcGl0
YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJl
RmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgIH0pOwogI2VuZGlmCiAKKyAgICBtX2xpbmtUaW1l
Q29uc3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50OjplbXB0eVBy
b3BlcnR5TmFtZUVudW1lcmF0b3IpXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpT
Q2VsbD4mIGluaXQpIHsKKyAgICAgICAgaW5pdC5zZXQoaW5pdC52bS5lbXB0eVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IoKSk7CisgICAgfSk7CisKICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlUHJvZmls
ZXJzT25HbG9iYWxPYmplY3QoKSkgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAg
ICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIiKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZt
LCB0aGlzLCAxLCBTdHJpbmcoKSwgZW5hYmxlU2FtcGxpbmdQcm9maWxlciksIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCmluZGV4IDIxYzcwYTI3
YjY5MWJlMDU2OTBhMmZhZTc3YzY5OTEyYWVlYzExOWQuLmNmMGE0YTUxMzRmODJkZWU5OWFhYjI1
YjY2MzU5OGU1N2RjZTJjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcApAQCAtNDksMTMgKzQ5LDE5
IEBAIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVp
bnQzMl90IGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMs
IFdyaXRlQmFycmllcjxKU1N0cmluZz4qIHByb3BlcnR5TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZXNTaXplKQogICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9w
ZXJ0eU5hbWVzQnVmZmVyKQogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUgPyBz
dHJ1Y3R1cmUtPmlkKCkgOiAwKQogICAgICwgbV9pbmRleGVkTGVuZ3RoKGluZGV4ZWRMZW5ndGgp
CiAgICAgLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgobnVtYmVyU3RydWN0dXJlUHJvcGVy
dGllcykKICAgICAsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgocHJvcGVydHlOYW1lc1NpemUp
CiAgICAgLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSA6IDApCisgICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3Bl
cnR5TmFtZXNCdWZmZXIpCiB7CisgICAgaWYgKG1faW5kZXhlZExlbmd0aCkKKyAgICAgICAgbV9t
b2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGU7CisgICAgaWYg
KG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOworICAgIGlmIChtX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4IC0gbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVT
ZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTsKIH0KIAogdm9pZCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUmVmUHRyPFBy
b3BlcnR5TmFtZUFycmF5RGF0YT4mJiBpZGVudGlmaWVycykKQEAgLTE0OCw0ICsxNTQsNzAgQEAg
dm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogYmFzZSwgUHIKICAgICB9CiB9CiAKK0pTU3RyaW5nKiBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCYgaW5kZXgsIE1vZGUmIG1vZGUsIGJvb2wgc2hvdWxk
QWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
QVNTRVJUKGluZGV4ZWRMZW5ndGgoKSB8fCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpOworCisgICAg
aW5kZXgrKzsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEluaXRNb2RlOiB7CisgICAg
ICAgIG1vZGUgPSBJbmRleGVkTW9kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGU6IHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpICYmICFi
YXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpIHsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAg
aW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwor
CisgICAgICAgIGlmIChpbmRleCA8IGluZGV4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVy
biBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nID8ganNTdHJpbmcodm0sIElkZW50aWZp
ZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSkgOiBudWxscHRyOworCisgICAgICAgIGlmICgh
c2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgbW9kZSA9IE5hbWVkTW9kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFt
ZWRNb2RlOgorICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTog
eworICAgICAgICBKU1N0cmluZyogbmFtZSA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKGluZGV4IDwgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYm
IGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gY2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBuYW1lLT52YWx1ZShnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIHNjb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBpZiAoYmFzZS0+aGFzRW51bWVyYWJsZVByb3Bl
cnR5KGdsb2JhbE9iamVjdCwgaWQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBuYW1l
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgICAgICBpZiAoaW5kZXggPj0gZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCgpICYmIGluZGV4IDwgc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAg
ICAgICAgICAgbW9kZSA9IEdlbmVyaWNNb2RlOworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oCmluZGV4IDAyMDExZDQxYzdmNjZkYWQ4ODNhZThkNzcwYjVk
M2QyODZjZDUwODcuLmEwMDliYjI5MDFiNGFhMTcwZDczOGE1OTg2MGEwOWExNTZkMjA0NWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTM3LDYgKzM3LDE3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNDZWxsOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKKyAgICBlbnVt
IE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgSW5pdE1vZGUgPSAwLAorICAgICAgICBJbmRleGVk
TW9kZSA9IDEgPDwgMCwKKyAgICAgICAgTmFtZWRNb2RlID0gMSA8PCAxLAorICAgICAgICBHZW5l
cmljTW9kZSA9IDEgPDwgMiwKKyAgICAgICAgLy8gUHJvZmlsaW5nIE9ubHkKKyAgICAgICAgSGFz
U2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoID0gMSA8PCAzLAorICAgIH07CisKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9k
ZSA8PCAxKSAtIDE7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CkBAIC03NCwxNiArODUsMjAgQEAgcHVibGljOgogICAgIHVpbnQzMl90IGVuZEdlbmVy
aWNQcm9wZXJ0eUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lbmRHZW5lcmljUHJvcGVydHlJbmRl
eDsgfQogICAgIHVpbnQzMl90IGNhY2hlZElubGluZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsgfQogICAgIHVpbnQzMl90IHNpemVPZlByb3BlcnR5TmFt
ZXMoKSBjb25zdCB7IHJldHVybiBlbmRHZW5lcmljUHJvcGVydHlJbmRleCgpOyB9CisgICAgdWlu
dDMyX3QgbW9kZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZVNldDsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3QgY2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZUlEKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhlZExlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1faW5kZXhlZExlbmd0aCk7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IGVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2VuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBlbmRHZW5lcmljUHJv
cGVydHlJbmRleE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBtb2RlU2V0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9tb2RlU2V0KTsgfQogICAgIHN0YXRp
YyBwdHJkaWZmX3QgY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpCiAgICAgewogICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9w
cm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKKyAgICBKU1N0cmluZyogY29tcHV0ZU5leHQoSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCogYmFzZSwgdWludDMyX3QmIGN1cnJlbnRJbmRleCwgTW9kZSYs
IGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyA9IHRydWUpOworCiAgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKQEAgLTkyLDEzICsxMDcsMTQgQEAgcHJp
dmF0ZToKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50
MzJfdCwgdWludDMyX3QsIFdyaXRlQmFycmllcjxKU1N0cmluZz4qLCB1bnNpZ25lZCk7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+JiYp
OwogCi0gICAgQXV4aWxpYXJ5QmFycmllcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9w
ZXJ0eU5hbWVzOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVD
aGFpbjsKICAgICBTdHJ1Y3R1cmVJRCBtX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIHVpbnQzMl90
IG1faW5kZXhlZExlbmd0aDsKICAgICB1aW50MzJfdCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXg7CiAgICAgdWludDMyX3QgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJf
dCBtX2NhY2hlZElubGluZUNhcGFjaXR5OworICAgIHVpbnQzMl90IG1fbW9kZVNldCB7IDAgfTsK
KyAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5
TmFtZXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWlu
OwogfTsKIAogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCos
IEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwg
dWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpOwpAQCAtMTM0LDcgKzE1MCwxMCBAQCBp
bmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVz
ID0gMDsKICAgICB9CiAKLSAgICBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjcmVhdGUodm0sIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMsIGluZGV4ZWRM
ZW5ndGgsIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdURk1vdmUocHJvcGVydHlOYW1lcykp
OworICAgIGlmICghaW5kZXhlZExlbmd0aCAmJiAhcHJvcGVydHlOYW1lcy5zaXplKCkpCisgICAg
ICAgIGVudW1lcmF0b3IgPSB2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKKyAgICBl
bHNlCisgICAgICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0
ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwg
bnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CiAgICAg
aWYgKCFpbmRleGVkTGVuZ3RoICYmIHN1Y2Nlc3NmdWxseU5vcm1hbGl6ZWRDaGFpbiAmJiBzdHJ1
Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzID09IHN0cnVjdHVyZSkgewogICAgICAgICBl
bnVtZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihnbG9iYWxPYmplY3QsIGJhc2UpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2Fu
Q2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtKSkKQEAgLTE0Myw0ICsxNjIsNiBAQCBpbmxp
bmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBlbnVtZXJhdG9yOwogfQogCit1c2luZyBF
bnVtZXJhdG9yTWV0YWRhdGEgPSBzdGQ6OnVuZGVybHlpbmdfdHlwZV90PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TW9kZT47CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAzOWNjYWViM2E4ZTVkMWNk
ZWUyYmY5YmE1OTVlZWE1NDFjOGI5MmUxLi45ZjI3MzVjOTZlYTVlYzFhZDgzYjJjMTEyYjUzODUy
MjJmNDJjNzIwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIxLTA3LTI3ICBLZWl0aCBNaWxsZXIgIDxrZWl0
aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIGZvci1pbiBzaG91bGQgb25seSBlbWl0IG9u
ZSBsb29wIGluIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjc5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHN0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qczoKKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzOgorICAg
ICAgICAqIHN0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanM6CisgICAgICAg
ICogc3RyZXNzL2Zvci1pbi10ZXN0cy5qczoKKyAgICAgICAgKiBzdHJlc3MvaGFzLW93bi1wcm9w
ZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanM6CisgICAgICAgICh0ZXN0
NSk6CisKIDIwMjEtMDctMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbSlNDXSBVcGRhdGUgSW50bC5Mb2NhbGUgdGVzdCBhZnRlciBBcHBsZUlDVSB1cGRh
dGUKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzIGIvSlNU
ZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKaW5kZXggOTAwMmI5NDBhZDU5NmI3NTQ4
MWYwMjU0MGU1MGFjOWU5Y2JiNTA4OC4uM2QyZGE2MzlkODEwZjhhYjk3YTNlMjY5ZmFlMTA3MjEw
YjVjZTc1YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMK
KysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKQEAgLTI2LDggKzI2LDkg
QEAKIHZhciBmdW5jQXJnQW5kQm9keVN0ciA9CiAiKGFycikgeyIgKyAiXG4iICsKICIgICAgdmFy
IHN1bSA9IDA7IiArICJcbiIgKwotIiAgICBmb3IgKHZhciBpIGluIGFycikiICsgIlxuIiArCisi
ICAgIGZvciAodmFyIGkgaW4gYXJyKSB7IiArICJcbiIgKwogIiAgICAgICAgc3VtICs9IGFycltp
XTsiICsgIlxuIiArCisiICAgIH0gIiArCiAiICAgIHJldHVybiBzdW07IiArICJcbiIgKwogIn0i
OwogCkBAIC03NSw2ICs3Niw3IEBAIGZ1bmN0aW9uIHRlc3QobmFtZSwgZGF0YSkgewogCiAgICAg
ICAgIGlmICgoYWN0dWFsICE9IGV4cGVjdGVkKSAmJiAoYWN0dWFsICE9IHByZXZpb3VzUmVzdWx0
KSkgewogICAgICAgICAgICAgcHJpbnQoIkZBSUw6ICIgKyBuYW1lICsgIjogZXhwZWN0ZWQ6ICIg
KyBleHBlY3RlZCArICIsIGFjdHVhbDogIiArIGFjdHVhbCArICIsIHN0YXJ0aW5nIEAgbG9vcCBp
dGVyYXRpb24gIiArIGkpOworICAgICAgICAgICAgJHZtLmJyZWFrcG9pbnQoKTsKICAgICAgICAg
ICAgIHByZXZpb3VzUmVzdWx0ID0gYWN0dWFsOwogICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgIG51bWJlck9mRmFpbHVyZXMrKzsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3Ry
ZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3It
aW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCmluZGV4IDgzMTE1YjQ5NzNjODM3Y2E2ZDNmZjA2
ZWE2ZmYxMzFjMzQ1MTFlNjIuLjA5ZjgxZDk1NjUzYmFhMTUwNmU1ZGRhMDYyZmEyZTM1ZjE1OGJm
MzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0
ZXIuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5q
cwpAQCAtMTQsNSArMTQsNSBAQCBub0lubGluZShmb28pOwogZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyh7MDowLCAxOjEsIGE6MiwgYjozfSk7
CiAgICAgaWYgKHJlc3VsdCAhPSA3KQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiArIHJl
c3VsdCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmlu
Zy1pdGVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVy
YXRpb24uanMKaW5kZXggNWFkMzU2NmZkMGQzNjEwMjVhMWU1ZjMzNjVkMGJhZDM3NGQ1MTIwMi4u
ZDExNDY5MzFiMTQ3NWQ4OGM0NzM5NDllYWRhMmRkYTBmZDM5MzBhNSAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCisrKyBiL0pTVGVz
dHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcwpAQCAtMTIsOCArMTIs
OSBAQAogICAgIH07CiAgICAgbm9JbmxpbmUoZm9vKTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKLSAgICAgICAgaWYgKGZvbygpICE9PSAiMTIzNSIpCi0gICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZv
bygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAiMTIzNSIpCisgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoImJhZCByZXN1bHQgZ290OiAiICsgcmVzdWx0KTsKICAgICB9CiAgICAgZm9vKG51
bGwpOwogfSkoKTsKQEAgLTM2LDggKzM3LDkgQEAKICAgICB9OwogICAgIG5vSW5saW5lKGZvbyk7
CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAgICAgIGlmIChmb28o
KSAhPT0gInh6IikKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOwor
ICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09ICJ4eiIp
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwog
ICAgIH0KIH0pKCk7CiAoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9m
b3ItaW4tdGVzdHMuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMuanMKaW5kZXggMmU0
ZDZiODQyYTI0MmViNzE1OTg2MDBlZTUyOGFlMTRiOWM4OWNlNC4uNjg5NjA5ODE4NTFlZTM0NGUz
YWE3ZjUzMjMxNTFiMjI1MWY2NWQ5MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWlu
LXRlc3RzLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwpAQCAtMTA1LDYg
KzEwNSw3IEBAIGZ1bmN0aW9uIHNob3VsZFRocm93U3ludGF4RXJyb3Ioc2NyaXB0KSB7CiAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKICAgICB9CiB9KSgpOworCiAo
ZnVuY3Rpb24oKSB7CiAgICAgdmFyIGZvbyA9IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgICAgZm9y
ICh2YXIgcCBpbiBiKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9oYXMtb3duLXByb3Bl
cnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qcyBiL0pTVGVzdHMvc3RyZXNz
L2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzCmlu
ZGV4IDk5YzU5YWMxMDU2OGNlOGE3OTA4NTIyOTgyMDZmZGM3ZTBlMGY4OWMuLmUwYWRlMDcxYTJl
NGI4ZDAyNzhkOTVjYzkzM2UyNGYxOGJiZWUwNTggMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNz
L2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzCisr
KyBiL0pTVGVzdHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29w
LWNvcnJlY3RuZXNzLmpzCkBAIC0xMzIsNyArMTMyLDEwIEBAIGZ1bmN0aW9uIHRlc3Q1KCkgewog
ICAgIG8uX19wcm90b19fID0gcDsKIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytp
KSB7Ci0gICAgICAgIGFzc2VydChjb3VudChvKSA9PT0gMCk7CisgICAgICAgIHZhciBjID0gY291
bnQobyk7CisgICAgICAgIGlmIChjKQorICAgICAgICAgICAgcHJpbnQoYyk7CisgICAgICAgIGFz
c2VydChjID09PSAwKTsKICAgICB9CiB9CiB0ZXN0NSgpOwo=
</data>
<flag name="commit-queue"
          id="456766"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434316</attachid>
            <date>2021-07-27 14:25:09 -0700</date>
            <delta_ts>2021-07-28 10:49:07 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210727172507.patch</filename>
            <type>text/plain</type>
            <size>293916</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5NzQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA1
NDc5MTRhNzhlZTE1ZmE2NzY5NWNiOTA1ZmFjNzc2MGExNWUwMjUwLi44MDIxMzk2Zjg3MzNiODhi
ODFmNThiMmIxMmE3NzVmNmU1MGM5MjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMDggIEtlaXRoIE1pbGxlciAgPGtl
aXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgZGlzcGxheS1wcm9maWxlci1vdXRwdXQg
c2hvdWxkIGJlIGFibGUgdG8gcHJpbnQgZGlzYXNzZW1ibHkgZm9yIHRoZSBGVEwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgK
aW5kZXggYTZhNGVkZjg5NzUwNzVkNTk5NDE3NDhkYWY5MDM0OWQ2N2RiMWM5Yy4uYjE3MTZmODQ0
NmEzNmQ2YmNhZDUzMzNmMzM3NDc5ZWYwZWI0OGMwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmgKQEAgLTg1NCw2ICs4
NTQsMTMgQEAgcHVibGljOgogICAgICAgICBzdG9yZTMyKGRhdGFUZW1wUmVnaXN0ZXIsIGFkZHJl
c3MpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQ4KGFkZHJlc3MubV9wdHIsIGdldENhY2hl
ZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKSk7CisgICAgICAgIG9yMzIoc3JjLCBk
YXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgc3RvcmU4KGRhdGFU
ZW1wUmVnaXN0ZXIsIGFkZHJlc3MubV9wdHIpOworICAgIH0KKwogICAgIHZvaWQgb3I4KFRydXN0
ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQogICAgIHsKICAgICAgICAgTG9n
aWNhbEltbWVkaWF0ZSBsb2dpY2FsSW1tID0gTG9naWNhbEltbWVkaWF0ZTo6Y3JlYXRlMzIoaW1t
Lm1fdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCmluZGV4IGEyNjU1M2E1YmNlMGZjZjdiZjA4MDcy
ZjU5ODJjOWI1MDc2MjBhZWYuLmRhZWNiZTcyNzU3MzZiZTg0ZTk5Zjc4ZjUwN2U4NDY3MjhjYzI3
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJYODZDb21tb24uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKQEAgLTYyNSw2ICs2MjUsMTIgQEAgcHVibGljOgogICAg
ICAgICBtX2Fzc2VtYmxlci5vcmJfcm0oc3JjLCBkZXN0Lm9mZnNldCwgZGVzdC5iYXNlLCBkZXN0
LmluZGV4LCBkZXN0LnNjYWxlKTsKICAgICB9CiAKKyAgICB2b2lkIG9yOChSZWdpc3RlcklEIHNy
YywgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgb3I4KHNy
YywgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihB
ZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIu
b3JsX21yKHNyYy5vZmZzZXQsIHNyYy5iYXNlLCBkZXN0KTsKQEAgLTY2NSw2ICs2NzEsMTIgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5vcmJfaW0oc3RhdGljX2Nhc3Q8aW50OF90Pihp
bW0ubV92YWx1ZSksIGFkZHJlc3Mub2Zmc2V0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgs
IGFkZHJlc3Muc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFRydXN0ZWRJbW0zMiBpbW0s
IEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIG9yOChpbW0s
IEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoUmVn
aXN0ZXJJRCBvcDEsIFJlZ2lzdGVySUQgb3AyLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAg
ICAgICBpZiAob3AxID09IG9wMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAppbmRleCAzMzQ3MmRkOTMxYTk3YjA5Yjk3
ZGM5MmY1MTFlNmMyMmRjYTMyMTIyLi42OTFiNjUwZGI0MDk5Zjc0MWQyOTM3NmZkZjNkMDdjYzY1
ZjZiMTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4Nl82NC5oCkBAIC05NywxMiArOTcsNiBAQCBwdWJsaWM6CiAgICAgICAg
IG9yMTYoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCi0gICAgewot
ICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rl
cigpKTsKLSAgICAgICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOwotICAg
IH0KLQogICAgIHZvaWQgc3ViMzIoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFk
ZHJlc3MpCiAgICAgewogICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciks
IHNjcmF0Y2hSZWdpc3RlcigpKTsKQEAgLTU4Nyw2ICs1ODEsMTIgQEAgcHVibGljOgogICAgICAg
ICB9CiAgICAgfQogCisgICAgdm9pZCByc2hpZnQ2NChSZWdpc3RlcklEIHNyYywgVHJ1c3RlZElt
bTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShzcmMsIGRlc3Qp
OworICAgICAgICByc2hpZnQ2NChpbW0sIGRlc3QpOworICAgIH0KKwogICAgIHZvaWQgdXJzaGlm
dDY0KFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1f
YXNzZW1ibGVyLnNocnFfaThyKGltbS5tX3ZhbHVlLCBkZXN0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAppbmRleCBiMDJlNTYwMjEwMjY0OTllZjM3
NWJjNjA5MTRhOWE0ZGUwMWIyZGY2Li5kY2FmMGJhNmNhMzE4ZjE4MDI5MmNiYThkN2RjMDBmYTU3
NzkxZWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRp
bk5hbWVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oCkBAIC0xODEsNyArMTgxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oaGFzT3du
UHJvcGVydHlGdW5jdGlvbikgXAogICAgIG1hY3JvKGNyZWF0ZVByaXZhdGVTeW1ib2wpIFwKICAg
ICBtYWNybyhlbnRyaWVzKSBcCi0gICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMpCisg
ICAgbWFjcm8ob3V0T2ZMaW5lUmVhY3Rpb25Db3VudHMpIFwKKyAgICBtYWNybyhlbXB0eVByb3Bl
cnR5TmFtZUVudW1lcmF0b3IpCiAKIAogbmFtZXNwYWNlIFN5bWJvbHMgewpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYiBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKaW5kZXggMTgyNWVjMmFkNWEw
MzM5ZDRmM2VmMTk1ZGQ2ZjlmY2YyMmQwNjQ5Yy4uOTcyOTYzMGRiZGJhMzkwZDYzNTQwMjgxY2M0
YmQxNmUzOTM2NjVlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVMaXN0LnJiCkBAIC0yOSw2ICsyOSw3IEBAIHR5cGVzIFsKICAgICA6RGVidWdIb29rVHlw
ZSwKICAgICA6RUNNQU1vZGUsCiAgICAgOkVycm9yVHlwZVdpdGhFeHRlbnNpb24sCisgICAgOkVu
dW1lcmF0b3JNZXRhZGF0YSwKICAgICA6R2V0QnlJZE1vZGUsCiAgICAgOkdldEJ5SWRNb2RlTWV0
YWRhdGEsCiAgICAgOkdldEJ5VmFsSGlzdG9yeSwKQEAgLTEyNDEsNiArMTI0Miw2NSBAQCBvcCA6
dG9faW5kZXhfc3RyaW5nLAogCiBvcCA6dW5yZWFjaGFibGUKIAorb3AgOmVudW1lcmF0b3JfbmV4
dCwKKyAgICBhcmdzOiB7CisgICAgICAgICMgb3V0CisgICAgICAgIHByb3BlcnR5TmFtZTogVmly
dHVhbFJlZ2lzdGVyLAorICAgICAgICAjIGluL291dAorICAgICAgICBtb2RlOiBWaXJ0dWFsUmVn
aXN0ZXIsICMgV2lsbCBhbHdheXMgYmUgYSBKUyBVSW50MzIgcmVwcmVzZW50aW5nIGEgSlNGb3JJ
bk1vZGUuCisgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsICMgR2V0cyByZXNldCB0byB6
ZXJvIGV2ZXJ5IHRpbWUgbW9kZSBjaGFuZ2VzLgorICAgICAgICAjIGluCisgICAgICAgIGJhc2U6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAor
ICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAorICAg
IH0KKworb3AgOmVudW1lcmF0b3JfZ2V0X2J5X3ZhbCwKKyAgICBhcmdzOiB7CisgICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAg
ICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1l
cmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAg
IHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2Zp
bGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAorICAg
IH0KKworb3AgOmVudW1lcmF0b3JfaW5fYnlfdmFsLAorICAgIGFyZ3M6IHsKKyAgICAgICAgZHN0
OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxS
ZWdpc3RlciwKKyAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTog
RW51bWVyYXRvck1ldGFkYXRhLAorICAgIH0KKworb3AgOmVudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSwKKyAgICBhcmdzOiB7CisgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwK
KyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGluZGV4OiBW
aXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxl
LAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKKyAgICB9
CisKIG9wIDpjcmVhdGVfcmVzdCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJl
Z2lzdGVyLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlVXNlRGVmLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5jcHAKaW5kZXggMDc1NjE4OTlhNjIwOWUzNmNiZmE3MmEwNTRmMTUxMmQ2NzM4YzBjYy4u
OWI0MTU5M2YzNDRkODdjNGY1MDZmYzRiMTY1MDRhMWM4ZjYxMDE3NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCkBAIC0yOTUsNiAr
Mjk1LDExIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFy
Z3VtZW50KQogCisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwg
ZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBw
cm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBV
U0VTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUs
IGluZGV4LCBlbnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5
bWJvbENhbGwsIGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUp
OwpAQCAtNTY3LDYgKzU3MiwxMSBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleElt
cGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogCiAgICAgREVG
UyhPcENhdGNoLCBleGNlcHRpb24sIHRocm93blZhbHVlKQogCisgICAgREVGUyhPcEVudW1lcmF0
b3JOZXh0LCBwcm9wZXJ0eU5hbWUsIG1vZGUsIGluZGV4KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
R2V0QnlWYWwsIGRzdCkKKyAgICBERUZTKE9wRW51bWVyYXRvckluQnlWYWwsIGRzdCkKKyAgICBE
RUZTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBkc3QpCisKICAgICBjYXNlIG9wX2l0ZXJh
dG9yX29wZW46IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcEl0
ZXJhdG9yT3Blbj4oKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAppbmRleCBmY2ZhMjkyYWQwNGVmMTA2MDUyNWUzN2YxYTg4NjYxNGQzNTQ4NzQ4Li45
OWEzNmYxODFhZjMxZmRlZmRhYmFhMDM2YjYwNzk0MGZjZDdjYTlmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcApAQCAtNTAzLDYgKzUwMywxMSBAQCBi
b29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGluawogCiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxl
KQogCisgICAgICAgIExJTksoT3BFbnVtZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElO
SyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRv
ckhhc093blByb3BlcnR5LCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5
VmFsLCBwcm9maWxlKQorCiAgICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBM
SU5LKE9wVGFpbENhbGwsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmls
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNv
bnN0YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFu
dC5oCmluZGV4IGVlNDA5ODhhODYxZGIxNWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJh
ZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFmNDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3
IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBc
CiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQ
cml2YXRlU3ltYm9sLCBudWxscHRyKSBcCisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0
b3IsIG51bGxwdHIpIFwKIAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5h
bWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5k
ZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRiNjM4NWE1NTNjMWY5NWRmNGQxOS4uOTdiODU2ZDVkMWYz
YjA1YjQxMzNhNTcxYWE1MGFlNjMzMmUzZjRmNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGNvZGUuaApAQCAtOTksNiArOTksNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVk
IGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQog
ICAgIG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKSBcCiAgICAgbWFjcm8oT3BDb25z
dHJ1Y3RWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BHZXRCeVZhbCkgXAorICAgIG1hY3JvKE9wRW51
bWVyYXRvckdldEJ5VmFsKSBcCiAgICAgbWFjcm8oT3BHZXREaXJlY3RQbmFtZSkgXAogICAgIG1h
Y3JvKE9wR2V0QnlJZCkgXAogICAgIG1hY3JvKE9wR2V0QnlJZFdpdGhUaGlzKSBcCkBAIC0xMzYs
NiArMTM3LDEwIEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNv
ZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BJbkJ5VmFs
KSBcCiAgICAgbWFjcm8oT3BQdXRCeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWxEaXJlY3Qp
IFwKKyAgICBtYWNybyhPcEVudW1lcmF0b3JOZXh0KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9y
R2V0QnlWYWwpIFwKKyAgICBtYWNybyhPcEVudW1lcmF0b3JJbkJ5VmFsKSBcCisgICAgbWFjcm8o
T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVf
V0lUSF9BUlJBWV9BTExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0Fy
cmF5KSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4IDczOTBkNTJjNGFlMWFhMWMzZTIyNmM5NTIyZjdi
NDQ2NzljOTZkZTMuLjY4NWNjNDA5MzdmYzExNWU3ODYwYjRmY2FlMzZkM2I3YzIyYmM3OTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCkBAIC0xNTAzLDExICsxNTAzLDExIEBAIHVuc2lnbmVkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0V2lkZUp1bXBJZk5vdEZ1bmN0aW9uSGFzT3duUHJvcGVydHkoUmVnaXN0
ZXJJRCoKICAgICByZXR1cm4gbV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCk7CiB9CiAKLXZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJbkxv
b3AoU3RydWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0LCB1bnNpZ25lZCBicmFu
Y2hPZmZzZXQsIExhYmVsJiBnZW5lcmljUGF0aCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJl
Y29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoRm9ySW5Db250ZXh0JiBjb250ZXh0LCB1bnNp
Z25lZCBicmFuY2hPZmZzZXQsIExhYmVsJiBnZW5lcmljUGF0aCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVChnZW5lcmljUGF0aC5pc0JvdW5kKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFnZW5lcmlj
UGF0aC5pc0ZvcndhcmQoKSk7Ci0gICAgc3RydWN0dXJlQ29udGV4dC5hZGRIYXNPd25Qcm9wZXJ0
eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0
LmFkZEhhc093blByb3BlcnR5SnVtcChicmFuY2hPZmZzZXQsIGdlbmVyaWNQYXRoLmxvY2F0aW9u
KCkpOwogfQogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpoYXNDb25zdGFudChjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCkgY29uc3QKQEAgLTI1ODEsMTIgKzI1ODEsOCBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluQnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBwcm9wZXJ0eQogICAgICAgICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9y
SW5Db250ZXh0KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQmIHN0cnVjdHVyZUNvbnRleHQgPSBjb250ZXh0LmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgIE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eTo6ZW1pdDxPcGNvZGVTaXplOjpX
aWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuZW51bWVy
YXRvcigpKTsKLSAgICAgICAgc3RydWN0dXJlQ29udGV4dC5hZGRJbkluc3QobV9sYXN0SW5zdHJ1
Y3Rpb24ub2Zmc2V0KCksIHByb3BlcnR5LT5pbmRleCgpKTsKKyAgICAgICAgT3BFbnVtZXJhdG9y
SW5CeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgY29udGV4
dC5tb2RlKCksIHByb3BlcnR5LCBjb250ZXh0LnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQuZW51
bWVyYXRvcigpKTsKKyAgICAgICAgY29udGV4dC5hZGRJbkluc3QobV9sYXN0SW5zdHJ1Y3Rpb24u
b2Zmc2V0KCksIHByb3BlcnR5LT5pbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGRzdDsKICAgICB9
CiAKQEAgLTI3MzQsMjQgKzI3MzAsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUgogICAgICAg
ICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgaWYgKGNvbnRleHQuaXNJbmRleGVkRm9ySW5Db250ZXh0KCkpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGluZGV4ZWRDb250ZXh0ID0gY29udGV4dC5hc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKTsKLSAgICAgICAgICAgIGtpbGwoZHN0KTsKLSAgICAgICAgICAgIGlmIChPcEdldEJ5VmFs
OjpjaGVja1dpdGhvdXRNZXRhZGF0YUlEPE9wY29kZVNpemU6Ok5hcnJvdz4odGhpcywgZHN0LCBi
YXNlLCBwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFs
bGVzdFNpemVSZXF1aXJlbWVudDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwgYmFzZSwg
aW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChPcEdldEJ5VmFs
OjpjaGVja1dpdGhvdXRNZXRhZGF0YUlEPE9wY29kZVNpemU6OldpZGUxNj4odGhpcywgZHN0LCBi
YXNlLCBwcm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFs
bGVzdFNpemVSZXF1aXJlbWVudDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwgYmFzZSwg
aW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwg
aW5kZXhlZENvbnRleHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBpbmRleGVkQ29udGV4dC5hZGRH
ZXRJbnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZHN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgY2Fubm90
IGRvIHRoZSBhYm92ZSBvcHRpbWl6YXRpb24gaGVyZSBzaW5jZSBPcEdldERpcmVjdFBuYW1lID0+
IE9wR2V0QnlWYWwgY29udmVyc2lvbiBpbnZvbHZlcyBkaWZmZXJlbnQgbWV0YWRhdGEgSUQgYWxs
b2NhdGlvbi4KLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0
ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29udGV4dCgpOwotICAgICAgICBPcEdldERpcmVj
dFBuYW1lOjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4odGhpcywga2lsbChkc3QpLCBiYXNlLCBw
cm9wZXJ0eSwgc3RydWN0dXJlQ29udGV4dC5pbmRleCgpLCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0KLSAgICAgICAgc3RydWN0dXJlQ29udGV4dC5hZGRHZXRJbnN0KG1fbGFzdElu
c3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgaGF2ZSBhIGJldHRlciBieXRlY29kZSByZXdyaXRlciB0aGF0IGNhbiByZXNp
emUgY2h1bmtzLgorICAgICAgICBPcEVudW1lcmF0b3JHZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXpl
OjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwgY29udGV4dC5tb2RlKCksIHByb3BlcnR5
LCBjb250ZXh0LnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQuZW51bWVyYXRvcigpKTsKKyAgICAg
ICAgY29udGV4dC5hZGRHZXRJbnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0
eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQogCkBAIC00NTgyLDYgKzQ1
NjMsMTcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNPd25TdHJ1Y3R1
cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2kKICAgICByZXR1cm4gZHN0OwogfQogCit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvck5leHQoUmVnaXN0ZXJJRCogcHJv
cGVydHlOYW1lLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJ
RCogYmFzZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3sKKyAgICBPcEVudW1lcmF0b3JOZXh0
OjplbWl0KHRoaXMsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgsIGJhc2UsIGVudW1lcmF0b3Ip
OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpCit7CisgICAgT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6OmVt
aXQodGhpcywgZHN0LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9y
KTsKKyAgICByZXR1cm4gZHN0OworfQorCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UpCiB7CiAgICAgT3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I6OmVtaXQodGhpcywgZHN0LCBiYXNl
KTsKQEAgLTQ2NDgsMjMgKzQ2NDAsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiAgICAgcmV0dXJu
IGRzdDsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3Bl
KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIpCi17
Ci0gICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQotICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQg
Ym9keUJ5dGVjb2RlU3RhcnRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9m
b3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5ldyBJbmRleGVkRm9ySW5Db250ZXh0
KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkp
OwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZShSZWdp
c3RlcklEKiBsb2NhbFJlZ2lzdGVyKQotewotICAgIGlmICghbG9jYWxSZWdpc3RlcikKLSAgICAg
ICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCA9IGluc3RydWN0
aW9ucygpLnNpemUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+YXNJbmRleGVk
Rm9ySW5Db250ZXh0KCkuZmluYWxpemUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwot
fQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0aW9u
TGV4aWNhbEVudmlyb25tZW50KGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAg
QVNTRVJUKG1fY29kZUJsb2NrLT5pc0Fycm93RnVuY3Rpb24oKSB8fCBtX2NvZGVCbG9jay0+aXNB
cnJvd0Z1bmN0aW9uQ29udGV4dCgpIHx8IGNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9y
S2luZDo6RXh0ZW5kcyB8fCBtX2NvZGVUeXBlID09IEV2YWxDb2RlIHx8IG1fY29kZUJsb2NrLT5w
YXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1vZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUp
OwpAQCAtNDc2OCwyMCArNDc0MywyMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0
VGhpc1RvQXJyb3dGdW5jdGlvbkNvbnRleHRTY29wZSgpCiAgICAgfQogfQogCi12b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoU3RydWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFy
aWFibGU+IGJhc2VWYXJpYWJsZSkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZVJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU9mZnNldFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIG1vZGVSZWdpc3Rlciwgc3RkOjpvcHRpb25h
bDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlKQogewogICAgIGlmICghbG9jYWxSZWdpc3RlcikKICAg
ICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0ID0gaW5z
dHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKGFkb3B0
UmVmKCpuZXcgU3RydWN0dXJlRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0
ZXIsIHByb3BlcnR5UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgYmFzZVZhcmlhYmxlLCBi
b2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVu
ZChhZG9wdFJlZigqbmV3IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVS
ZWdpc3RlciwgcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgZW51bWVyYXRvclJlZ2lzdGVyLCBtb2Rl
UmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpKSk7CiB9CiAK
LXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJ
RCogbG9jYWxSZWdpc3RlcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUo
UmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAg
ICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0
cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzU3Ry
dWN0dXJlRm9ySW5Db250ZXh0KCkuZmluYWxpemUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5m
aW5hbGl6ZSgqdGhpcywgbV9jb2RlQmxvY2suZ2V0KCksIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7
CiAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5yZW1vdmVMYXN0KCk7CiB9CiAKQEAgLTUzODQsMzQg
KzUzNTksNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayhSZWdp
c3RlcklEKiBzcmMpCiAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5l
d1RlbXBvcmFyeSgpLCBzcmMpLCBtX29wdGlvbmFsQ2hhaW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0
KCkpOwogfQogCi12b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWdu
ZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQotewotICAgIC8vIExleGljYWxseSBpbnZhbGlkYXRp
bmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9mIHdlYWsgc2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3Vy
cyBpZgotICAgIC8vIGVpdGhlciBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToK
LSAgICAvLwotICAgIC8vICgxKSBUaGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgaXMgcmUtYXNz
aWduZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBsb29wLgotICAgIC8vICgyKSBUaGUgbG9vcCBp
dGVyYXRpb24gdmFyaWFibGUgaXMgY2FwdHVyZWQgaW4gdGhlIGxleGljYWwgc2NvcGUgb2YgdGhl
IGZ1bmN0aW9uLgotICAgIC8vCi0gICAgLy8gVGhlc2UgdHdvIHNpdHVhdGlvbnMgb2NjdXIgc3Vm
ZmljaWVudGx5IHJhcmVseSB0aGF0IGl0J3Mgb2theSB0byB1c2UgdGhpcyBzdHlsZSBvZgotICAg
IC8vICJhbmFseXNpcyIgdG8gbWFrZSBpdGVyYXRpb24gZmFzdGVyLiBJZiB3ZSBkaWRuJ3Qgd2Fu
dCB0byBkbyB0aGlzLCB3ZSB3b3VsZCBlaXRoZXIgaGF2ZQotICAgIC8vIHRvIHBlcmZvcm0gc29t
ZSBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcyB0byBzZWUgaWYvd2hlbiB0aGUgbG9vcCBpdGVyYXRp
b24gdmFyaWFibGUgd2FzCi0gICAgLy8gcmVhc3NpZ25lZCwgb3Igd2UnZCBoYXZlIHRvIHJlc29y
dCB0byBydW50aW1lIGNoZWNrcyB0byBzZWUgaWYgdGhlIHZhcmlhYmxlIGhhZCBiZWVuCi0gICAg
Ly8gcmVhc3NpZ25lZCBmcm9tIGl0cyBvcmlnaW5hbCB2YWx1ZS4KLQotICAgIGZvciAodW5zaWdu
ZWQgb2Zmc2V0ID0gYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoKTsgaXNWYWxpZCgpICYmIG9mZnNl
dCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDspIHsKLSAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9
IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5hdChvZmZzZXQpOwotICAgICAgICBBU1NFUlQoIWlu
c3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsKLSAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNr
cG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07
KSB7Ci0gICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbi5wdHIoKSwgY2hlY2twb2ludCwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkgewotICAgICAgICAgICAgICAgIGlmIChsb2NhbCgpLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBv
cGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfQotICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAg
ICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBPbGRPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBPbGRPcFR5cGUsIHR5cGVuYW1lIE5ld09wVHlwZSwgdHlw
ZW5hbWUgVHVwbGVUeXBlPgogQUxXQVlTX0lOTElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5cGUmIGluc3RUdXBsZSkKIHsKICAgICB1bnNpZ25l
ZCBpbnN0SW5kZXggPSBzdGQ6OmdldDwwPihpbnN0VHVwbGUpOwpAQCAtNTQzMSwzNCArNTM3OSw1
MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFR1cGxlVHlwZSYgaW5zdFR1cGxlKQogICAgIC8vIDIuIGJhc2Ugc3RheXMgdGhlIHNh
bWUuCiAgICAgLy8gMy4gcHJvcGVydHkgZ2V0cyBzd2l0Y2hlZCB0byB0aGUgb3JpZ2luYWwgcHJv
cGVydHkuCiAKLSAgICBpZiBjb25zdGV4cHIgKHN0ZDo6aXNfc2FtZTxPbGRPcFR5cGUsIE9wR2V0
RGlyZWN0UG5hbWU+Ojp2YWx1ZSkgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEdl
dEJ5VmFsKSA8PSBzaXplb2YoT3BHZXREaXJlY3RQbmFtZSkpOwotICAgICAgICBPcEdldEJ5VmFs
OjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4oJmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5
dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKLSAgICB9
IGVsc2UgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEluU3RydWN0dXJl
UHJvcGVydHk+Ojp2YWx1ZSkgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEluQnlW
YWwpIDw9IHNpemVvZihPcEluU3RydWN0dXJlUHJvcGVydHkpKTsKLSAgICAgICAgT3BJbkJ5VmFs
OjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4oJmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5
dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBzdGF0aWNf
YXNzZXJ0KHNpemVvZihOZXdPcFR5cGUpIDw9IHNpemVvZihPbGRPcFR5cGUpKTsKKyAgICBOZXdP
cFR5cGU6OmVtaXQoJmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwg
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKIAogICAgIC8vIDQuIG5vcCBvdXQg
dGhlIHJlbWFpbmluZyBieXRlcwogICAgIHdoaWxlIChnZW5lcmF0b3IubV93cml0ZXIucG9zaXRp
b24oKSA8IGVuZCkKICAgICAgICAgT3BOb3A6OmVtaXQ8T3Bjb2RlU2l6ZTo6TmFycm93PigmZ2Vu
ZXJhdG9yKTsKIH0KIAotdm9pZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2Rl
QmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKK3ZvaWQgRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCiB7
Ci0gICAgQmFzZTo6ZmluYWxpemUoZ2VuZXJhdG9yLCBjb2RlQmxvY2ssIGJvZHlCeXRlY29kZUVu
ZE9mZnNldCk7Ci0gICAgaWYgKGlzVmFsaWQoKSkKKyAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0
aW5nIEZvckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1
cnMgaWYKKyAgICAvLyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6
CisgICAgLy8KKyAgICAvLyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFz
c2lnbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9vcC4KKyAgICAvLyAoMikgVGhlIGxvb3Ag
aXRlcmF0aW9uIHZhcmlhYmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRo
ZSBmdW5jdGlvbi4KKyAgICAvLworICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1
ZmZpY2llbnRseSByYXJlbHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKKyAg
ICAvLyAiYW5hbHlzaXMiIHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdh
bnQgdG8gZG8gdGhpcywgd2Ugd291bGQgZWl0aGVyIGhhdmUKKyAgICAvLyB0byBwZXJmb3JtIHNv
bWUgZmxvdy1zZW5zaXRpdmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0
aW9uIHZhcmlhYmxlIHdhcworICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNv
cnQgdG8gcnVudGltZSBjaGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgorICAg
IC8vIHJlYXNzaWduZWQgZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCisKKyAgICBib29sIGVzY2Fw
ZWQgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0KCk7ICFlc2NhcGVkICYmIG9mZnNldCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDspIHsK
KyAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5hdChv
ZmZzZXQpOworICAgICAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsKKyAg
ICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZD
aGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7CisgICAgICAgICAgICBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgY2hlY2twb2ludCwg
WyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAgICAgICAgICAgICAgIGlmIChsb2Nh
bCgpLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcGVyYW5kKQorICAgICAgICAgICAgICAgICAgICBl
c2NhcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIG9mZnNl
dCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOworICAgIH0KKworICAgIGlmICghZXNjYXBlZCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgT3Bjb2RlSUQgbGFzdE9wY29kZUlEID0gZ2VuZXJhdG9yLm1f
bGFzdE9wY29kZUlEOwogICAgIEluc3RydWN0aW9uU3RyZWFtOjpNdXRhYmxlUmVmIGxhc3RJbnN0
cnVjdGlvbiA9IGdlbmVyYXRvci5tX2xhc3RJbnN0cnVjdGlvbjsKIAogICAgIGZvciAoY29uc3Qg
YXV0byYgaW5zdFR1cGxlIDogbV9nZXRJbnN0cykKLSAgICAgICAgcmV3cml0ZU9wPE9wR2V0RGly
ZWN0UG5hbWU+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9wRW51
bWVyYXRvckdldEJ5VmFsLCBPcEdldEJ5VmFsPihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CiAKICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBsZSA6IG1faW5JbnN0cykKLSAgICAgICAgcmV3cml0
ZU9wPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOworICAgICAg
ICByZXdyaXRlT3A8T3BFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbkJ5VmFsPihnZW5lcmF0b3IsIGlu
c3RUdXBsZSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGhhc093blByb3BlcnR5VHVwbGUgOiBt
X2hhc093blByb3BlcnR5SnVtcEluc3RzKSB7CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KE9wSm1wKSA8PSBzaXplb2YoT3BKbmVxUHRyKSk7CkBAIC01NDg3LDIyICs1NDUzLDYgQEAgdm9p
ZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFVubGlua2VkQ29kZUIKICAgICB9CiB9CiAKLXZvaWQgSW5kZXhlZEZvckluQ29udGV4
dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQot
ewotICAgIEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVF
bmRPZmZzZXQpOwotICAgIGlmIChpc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgaW5zdFBhaXIgOiBtX2dldEluc3RzKSB7Ci0gICAgICAgIHVuc2lnbmVk
IGluc3RJbmRleCA9IGluc3RQYWlyLmZpcnN0OwotICAgICAgICBpbnQgcHJvcGVydHlSZWdJbmRl
eCA9IGluc3RQYWlyLnNlY29uZDsKLSAgICAgICAgZ2VuZXJhdG9yLm1fd3JpdGVyLnJlZihpbnN0
SW5kZXgpLT5jYXN0PE9wR2V0QnlWYWw+KCktPnNldFByb3BlcnR5KFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eVJlZ0luZGV4KSwgW10oKSB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgfSk7Ci0g
ICAgfQotfQotCiB2b2lkIFN0YXRpY1Byb3BlcnR5QW5hbHlzaXM6OnJlY29yZCgpCiB7CiAgICAg
YXV0byogaW5zdHJ1Y3Rpb24gPSBtX2luc3RydWN0aW9uUmVmLnB0cigpOwpAQCAtNTUyOCwxNyAr
NTQ3OCwxNCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9UaGlzKCkKICAgICBPcFRv
VGhpczo6ZW1pdCh0aGlzLCBraWxsKCZtX3RoaXNSZWdpc3RlciksIGVjbWFNb2RlKCkpOwogfQog
Ci1TdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5kU3RydWN0dXJl
Rm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KQorRm9ySW5Db250ZXh0KiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZmluZEZvckluQ29udGV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eSkKIHsKICAg
ICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNvbnRleHRTdGFjay5zaXplKCk7IGktLTsgKSB7CiAg
ICAgICAgIEZvckluQ29udGV4dCYgY29udGV4dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaV0uZ2V0
KCk7CiAgICAgICAgIGlmIChjb250ZXh0LmxvY2FsKCkgIT0gcHJvcGVydHkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBpZiAoIWNvbnRleHQuaXNTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIHJldHVybiAmY29udGV4dC5hc1N0
cnVjdHVyZUZvckluQ29udGV4dCgpOworICAgICAgICByZXR1cm4gJmNvbnRleHQ7CiAgICAgfQog
CiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggMmY1ZmY3MjMyNjQyNmIxMmU0
YTAzY2NjN2NmZGI2ODRkYWU1OTkxNC4uMzM1NDE4NTkyODgxOWIzMjcxMmFkNTE4YzU3OWZkMjdi
ZTFmYjIzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNjEsOCArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgIGNsYXNzIEpTSW1tdXRhYmxlQnV0dGVyZmx5OwogICAgIGNsYXNzIElkZW50aWZpZXI7
Ci0gICAgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dDsKLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ7CisgICAgY2xhc3MgRm9ySW5Db250ZXh0OwogCiAgICAgZW51bSBFeHBlY3RlZEZ1
bmN0aW9uIHsKICAgICAgICAgTm9FeHBlY3RlZEZ1bmN0aW9uLApAQCAtMjU1LDcyICsyNTQsMTkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRm9ySW5Db250ZXh0IDogcHVibGljIFJlZkNv
dW50ZWQ8Rm9ySW5Db250ZXh0PiB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
ICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGb3JJbkNvbnRleHQpOwotICAgIHB1YmxpYzoK
LSAgICAgICAgdmlydHVhbCB+Rm9ySW5Db250ZXh0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQotICAgICAgICB2b2lkIGlu
dmFsaWRhdGUoKSB7IG1faXNWYWxpZCA9IGZhbHNlOyB9Ci0KLSAgICAgICAgZW51bSBjbGFzcyBU
eXBlIDogdWludDhfdCB7Ci0gICAgICAgICAgICBJbmRleGVkRm9ySW4sCi0gICAgICAgICAgICBT
dHJ1Y3R1cmVGb3JJbgotICAgICAgICB9OwotCi0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBib29sIGlzSW5kZXhlZEZvckluQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpJbmRleGVkRm9ySW47IH0KLSAgICAgICAgYm9v
bCBpc1N0cnVjdHVyZUZvckluQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBl
OjpTdHJ1Y3R1cmVGb3JJbjsgfQotCi0gICAgICAgIEluZGV4ZWRGb3JJbkNvbnRleHQmIGFzSW5k
ZXhlZEZvckluQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0luZGV4
ZWRGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8
SW5kZXhlZEZvckluQ29udGV4dCo+KHRoaXMpOwotICAgICAgICB9Ci0KLSAgICAgICAgU3RydWN0
dXJlRm9ySW5Db250ZXh0JiBhc1N0cnVjdHVyZUZvckluQ29udGV4dCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChpc1N0cnVjdHVyZUZvckluQ29udGV4dCgpKTsKLSAgICAgICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqPih0aGlzKTsK
LSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBUeXBlIHR5cGUsIHVuc2lnbmVkIGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgOiBtX2xvY2FsUmVnaXN0ZXIobG9j
YWxSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV90eXBlKHR5cGUpCi0gICAgICAgICAgICAsIG1f
Ym9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAg
IHsgfQotCi0gICAgICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldDsgfQotCi0gICAgICAgIHZvaWQgZmlu
YWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIHVu
c2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJlZ2lzdGVyOwotICAgICAgICBib29sIG1faXNWYWxp
ZCB7IHRydWUgfTsKLSAgICAgICAgVHlwZSBtX3R5cGU7Ci0gICAgICAgIHVuc2lnbmVkIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7Ci0gICAgfTsKLQotICAgIGNsYXNzIFN0cnVjdHVyZUZvcklu
Q29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQgewotICAgICAgICB1c2luZyBCYXNlID0gRm9y
SW5Db250ZXh0OwogICAgIHB1YmxpYzoKICAgICAgICAgdXNpbmcgR2V0SW5zdCA9IHN0ZDo6dHVw
bGU8dW5zaWduZWQsIGludD47CiAgICAgICAgIHVzaW5nIEluSW5zdCA9IEdldEluc3Q7CiAgICAg
ICAgIHVzaW5nIEhhc093blByb3BlcnR5SnVtcEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCB1
bnNpZ25lZD47CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3Bl
cnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3JSZWdpc3Rlciwgc3RkOjpvcHRpb25h
bDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dCkKLSAgICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIFR5cGU6OlN0cnVj
dHVyZUZvckluLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgICwgbV9pbmRl
eFJlZ2lzdGVyKGluZGV4UmVnaXN0ZXIpCi0gICAgICAgICAgICAsIG1fcHJvcGVydHlSZWdpc3Rl
cihwcm9wZXJ0eVJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX2VudW1lcmF0b3JSZWdpc3Rlcihl
bnVtZXJhdG9yUmVnaXN0ZXIpCi0gICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJp
YWJsZSkKLSAgICAgICAgewotICAgICAgICB9CisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorICAgICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1faXNW
YWxpZCA9IGZhbHNlOyB9CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLSAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVy
dHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5UmVnaXN0ZXIuZ2V0KCk7IH0KLSAgICAgICAg
UmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvclJlZ2lz
dGVyLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4g
bV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlOYW1lLmdldCgpOyB9CisgICAgICAgIFJlZ2lz
dGVySUQqIHByb3BlcnR5T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU9mZnNldC5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKCkgY29uc3QgeyByZXR1cm4g
bV9lbnVtZXJhdG9yLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIG1vZGUoKSBjb25zdCB7
IHJldHVybiBtX21vZGUuZ2V0KCk7IH0KICAgICAgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxWYXJp
YWJsZT4mIGJhc2VWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZVZhcmlhYmxlOyB9CiAK
ICAgICAgICAgdm9pZCBhZGRHZXRJbnN0KHVuc2lnbmVkIGluc3RJbmRleCwgaW50IHByb3BlcnR5
UmVnSW5kZXgpCkBAIC0zMzgsMzcgKzI4NCwzNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHMuYXBwZW5kKEhhc093blByb3BlcnR5SnVtcElu
c3QgeyBicmFuY2hJbnN0SW5kZXgsIGdlbmVyaWNQYXRoVGFyZ2V0IH0pOwogICAgICAgICB9CiAK
KyAgICAgICAgRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlPZmZzZXQsIFJlZ2lzdGVySUQq
IGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIG1vZGUsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCisgICAgICAgICAg
ICA6IG1fbG9jYWxSZWdpc3Rlcihsb2NhbFJlZ2lzdGVyKQorICAgICAgICAgICAgLCBtX3Byb3Bl
cnR5TmFtZShwcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICAsIG1fcHJvcGVydHlPZmZzZXQocHJv
cGVydHlPZmZzZXQpCisgICAgICAgICAgICAsIG1fZW51bWVyYXRvcihlbnVtZXJhdG9yKQorICAg
ICAgICAgICAgLCBtX21vZGUobW9kZSkKKyAgICAgICAgICAgICwgbV9iYXNlVmFyaWFibGUoYmFz
ZVZhcmlhYmxlKQorICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KGJvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICB7IH0KKworICAgICAgICB1bnNpZ25lZCBib2R5
Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQ7IH0KKwogICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5s
aW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQp
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdp
c3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVydHlSZWdpc3RlcjsKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvclJlZ2lzdGVyOworICAgICAgICAv
LyBUT0RPOiAgRG9lcyB0aGlzIHJlYWxseSBuZWVkIHRvIGJlIGEgUmVmUHRyPworICAgICAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJlZ2lzdGVyOworICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gbV9wcm9wZXJ0eU5hbWU7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3Bl
cnR5T2Zmc2V0OworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9lbnVtZXJhdG9yOworICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9tb2RlOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFZh
cmlhYmxlPiBtX2Jhc2VWYXJpYWJsZTsKLSAgICAgICAgVmVjdG9yPEdldEluc3Q+IG1fZ2V0SW5z
dHM7CisgICAgICAgIGJvb2wgbV9pc1ZhbGlkIHsgdHJ1ZSB9OworICAgICAgICB1bnNpZ25lZCBt
X2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OwogICAgICAgICBWZWN0b3I8SW5JbnN0PiBtX2luSW5z
dHM7CisgICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOwogICAgICAgICBWZWN0b3I8
SGFzT3duUHJvcGVydHlKdW1wSW5zdD4gbV9oYXNPd25Qcm9wZXJ0eUp1bXBJbnN0czsKICAgICB9
OwogCi0gICAgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQg
ewotICAgICAgICB1c2luZyBCYXNlID0gRm9ySW5Db250ZXh0OwotICAgIHB1YmxpYzoKLSAgICAg
ICAgSW5kZXhlZEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3Rl
cklEKiBpbmRleFJlZ2lzdGVyLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAg
ICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIFR5cGU6OkluZGV4ZWRGb3JJ
biwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3Rl
cihpbmRleFJlZ2lzdGVyKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpc3Rl
cklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXhSZWdpc3Rlci5nZXQoKTsgfQotCi0g
ICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9j
a0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0gICAgICAgIHZv
aWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eUluZGV4KSB7IG1f
Z2V0SW5zdHMuYXBwZW5kKHsgaW5zdEluZGV4LCBwcm9wZXJ0eUluZGV4IH0pOyB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVyOwotICAg
ICAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCBpbnQ+PiBtX2dldEluc3RzOwotICAgIH07
Ci0KICAgICBzdHJ1Y3QgVHJ5RGF0YSB7CiAgICAgICAgIFJlZjxMYWJlbD4gdGFyZ2V0OwogICAg
ICAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlwZTsKQEAgLTM5OSwxMSArMzQzLDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZUdlbmVyYXRv
cik7CiAKICAgICAgICAgZnJpZW5kIGNsYXNzIEZpbmFsbHlDb250ZXh0OwotICAgICAgICBmcmll
bmQgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVj
dHVyZUZvckluQ29udGV4dDsKKyAgICAgICAgZnJpZW5kIGNsYXNzIEZvckluQ29udGV4dDsKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFN0cmljdE1vZGVTY29wZTsKIAotICAgICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+CisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPbGRPcFR5cGUsIHR5cGVuYW1lIE5ld09wVHlwZSwgdHlwZW5hbWUgVHVwbGVU
eXBlPgogICAgICAgICBmcmllbmQgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImLCBU
dXBsZVR5cGUmKTsKIAogICAgIHB1YmxpYzoKQEAgLTY4MSw3ICs2MjQsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGhvaXN0U2xvcHB5TW9kZUZ1bmN0aW9uSWZOZWNlc3Nhcnko
Y29uc3QgSWRlbnRpZmllciYgZnVuY3Rpb25OYW1lKTsKIAotICAgICAgICBTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQqIGZpbmRTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkp
OworICAgICAgICBGb3JJbkNvbnRleHQqIGZpbmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJv
cGVydHkpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBlbWl0VHlwZVByb2ZpbGVyRXhw
cmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4
dFBvc2l0aW9uJiBlbmREaXZvdCk7CkBAIC05MTcsNyArODYwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChSZWdpc3RlcklEKiBjb25k
LCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdm9pZCBlbWl0SnVtcElmTm90RnVuY3Rpb25BcHBs
eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAgdW5zaWduZWQgZW1p
dFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lzdGVySUQqIGNvbmQsIExh
YmVsJiB0YXJnZXQpOwotICAgICAgICB2b2lkIHJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5
SW5Gb3JJbkxvb3AoU3RydWN0dXJlRm9ySW5Db250ZXh0JiwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0
LCBMYWJlbCYgZ2VuZXJpY1BhdGgpOworICAgICAgICB2b2lkIHJlY29yZEhhc093blByb3BlcnR5
SW5Gb3JJbkxvb3AoRm9ySW5Db250ZXh0JiwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYg
Z2VuZXJpY1BhdGgpOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbk9wLCB0eXBlbmFt
ZSBKbXBPcD4KICAgICAgICAgYm9vbCBmdXNlQ29tcGFyZUFuZEp1bXAoUmVnaXN0ZXJJRCogY29u
ZCwgTGFiZWwmIHRhcmdldCwgYm9vbCBzd2FwT3BlcmFuZHMgPSBmYWxzZSk7CkBAIC05MzQsNiAr
ODc3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7CiAgICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEVudW1lcmFibGVMZW5n
dGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKKyAgICAgICAgdm9pZCBlbWl0
RW51bWVyYXRvck5leHQoUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBtb2Rl
LCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvcik7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdp
c3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVt
ZXJhdG9yKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51
bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxl
bmd0aCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJh
dG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3Ro
LCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVFbnVtZXJhdG9yKTsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdEVudW1lcmF0b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CkBAIC05NTcsNyArOTAyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NhbGxhYmxlKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dElzQ29uc3RydWN0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0SXNOdW1iZXIoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBz
cmMpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNOdWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNy
YywgZW1pdExvYWQobnVsbHB0ciwganNOdWxsKCkpKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXNOdWxsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0
VW5hcnlPcDxPcEVxTnVsbD4oZHN0LCBzcmMpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJ
c1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1p
dEVxdWFsaXR5T3A8T3BTdHJpY3RlcT4oZHN0LCBzcmMsIGVtaXRMb2FkKG51bGxwdHIsIGpzVW5k
ZWZpbmVkKCkpKTsgfQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNVbmRlZmluZWRPck51bGwo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXNFbXB0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CkBAIC0xMDU3LDEw
ICsxMDAyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcG9wT3B0aW9uYWxDaGFp
blRhcmdldChSZWdpc3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUpOwogICAgICAgICB2b2lkIGVt
aXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYyk7CiAKLSAgICAgICAgdm9pZCBwdXNoSW5k
ZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4KTsKLSAg
ICAgICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7Ci0gICAg
ICAgIHZvaWQgcHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lz
dGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogZW51bWVyYXRv
ciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZSk7Ci0gICAgICAgIHZvaWQgcG9wU3RydWN0
dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7CisgICAgICAgIHZvaWQgcHVzaEZvcklu
U2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXQsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQq
IG1vZGUsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOworICAgICAgICB2b2lkIHBvcEZv
ckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwogCiAgICAgICAgIExhYmVsU2NvcGUqIGJyZWFr
VGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTGFiZWxTY29wZSogY29udGludWVU
YXJnZXQoY29uc3QgSWRlbnRpZmllciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDlhY2E1MTRlNjU1M2JhYWU0NDgz
YWU0NGNhYjVlZGM5NjYxYzRmZjcuLmMyNmM1NDkxYTdiZDZjYzM2ZWNkNmUyNjBiNGJmNTczMWNi
ZDNmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9k
ZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAKQEAgLTIxMzEsMjQgKzIxMzEsMjQgQEAgUmVnaXN0ZXJJRCogSGFzT3du
UHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGcKICAgICBSRUxFQVNFX0FTU0VSVChtX2FyZ3MtPm1fbGlzdE5vZGUgJiYgbV9hcmdzLT5t
X2xpc3ROb2RlLT5tX2V4cHIgJiYgIW1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0KTsgIAogICAg
IEV4cHJlc3Npb25Ob2RlKiBhcmd1bWVudCA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByOwog
ICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50LT5pc1Jlc29sdmVOb2RlKCkpOwotICAgIFN0cnVj
dHVyZUZvckluQ29udGV4dCogc3RydWN0dXJlQ29udGV4dCA9IG51bGxwdHI7CisgICAgRm9ySW5D
b250ZXh0KiBjb250ZXh0ID0gbnVsbHB0cjsKICAgICBWYXJpYWJsZSBhcmd1bWVudFZhcmlhYmxl
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oYXJndW1lbnQp
LT5pZGVudGlmaWVyKCkpOwogICAgIGlmIChhcmd1bWVudFZhcmlhYmxlLmlzTG9jYWwoKSkgewog
ICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGFyZ3VtZW50VmFyaWFibGUubG9jYWwoKTsK
LSAgICAgICAgc3RydWN0dXJlQ29udGV4dCA9IGdlbmVyYXRvci5maW5kU3RydWN0dXJlRm9ySW5D
b250ZXh0KHByb3BlcnR5KTsKKyAgICAgICAgY29udGV4dCA9IGdlbmVyYXRvci5maW5kRm9ySW5D
b250ZXh0KHByb3BlcnR5KTsKICAgICB9CiAKICAgICBhdXRvIGNhblVzZUZhc3RIYXNPd25Qcm9w
ZXJ0eSA9IFsmXSB7Ci0gICAgICAgIGlmICghc3RydWN0dXJlQ29udGV4dCkKKyAgICAgICAgaWYg
KCFjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXN0cnVj
dHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpKQorICAgICAgICBpZiAoIWNvbnRleHQtPmJhc2VW
YXJpYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAobV9iYXNl
LT5pc1Jlc29sdmVOb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxl
KHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKSA9PSBzdHJ1
Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKS52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlk
ZW50aWZpZXIoKSkgPT0gY29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKICAgICAgICAg
aWYgKG1fYmFzZS0+aXNUaGlzTm9kZSgpKSB7CiAgICAgICAgICAgICAvLyBBZnRlciBnZW5lcmF0
b3IuZW5zdXJlVGhpcyAod2hpY2ggbXVzdCBiZSBpbnZva2VkIGluIHxiYXNlfCdzIG1hdGVyaWFs
aXphdGlvbiksIHdlIGNhbiBlbnN1cmUgdGhhdCB8dGhpc3wgaXMgaW4gbG9jYWwgdGhpcy1yZWdp
c3Rlci4KICAgICAgICAgICAgIEFTU0VSVChiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS50
aGlzUHJpdmF0ZU5hbWUoKSwgVGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCkgPT0gc3RydWN0dXJl
Q29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS50
aGlzUHJpdmF0ZU5hbWUoKSwgVGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCkgPT0gY29udGV4dC0+
YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfTsKQEAgLTIxNjAsNyArMjE2MCw3IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAg
ICAgICAgIFJlZjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKICAgICAgICAg
dW5zaWduZWQgYnJhbmNoSW5zbk9mZnNldCA9IGdlbmVyYXRvci5lbWl0V2lkZUp1bXBJZk5vdEZ1
bmN0aW9uSGFzT3duUHJvcGVydHkoZnVuY3Rpb24uZ2V0KCksIHJlYWxDYWxsLmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShyZXR1cm5WYWx1ZS5n
ZXQoKSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3VtZW50KSwgc3RydWN0dXJl
Q29udGV4dC0+ZW51bWVyYXRvcigpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGNvbnRleHQtPm1v
ZGUoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3VtZW50KSwgY29udGV4dC0+cHJvcGVydHlPZmZz
ZXQoKSwgY29udGV4dC0+ZW51bWVyYXRvcigpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
KGVuZC5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChyZWFsQ2FsbC5nZXQo
KSk7CkBAIC0yMTcyLDcgKzIxNzIsNyBAQCBSZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0
aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZwogCiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3Iu
cmVjb3JkSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCgqc3RydWN0dXJlQ29udGV4
dCwgYnJhbmNoSW5zbk9mZnNldCwgcmVhbENhbGwpOworICAgICAgICBnZW5lcmF0b3IucmVjb3Jk
SGFzT3duUHJvcGVydHlJbkZvckluTG9vcCgqY29udGV4dCwgYnJhbmNoSW5zbk9mZnNldCwgcmVh
bENhbGwpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwpAQCAtNDE4NCw4ICs0MTg0LDYgQEAgdm9p
ZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpCiAgICAgaWYgKGdlbmVyYXRvci5zaG91bGRCZUNvbmNlcm5lZFdpdGhD
b21wbGV0aW9uVmFsdWUoKSAmJiBtX3N0YXRlbWVudC0+aGFzRWFybHlCcmVha09yQ29udGludWUo
KSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNVbmRlZmluZWQoKSk7CiAKLSAg
ICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotCiAgICAgUmVnaXN0ZXJJ
RCogZm9yTG9vcFN5bWJvbFRhYmxlID0gbnVsbHB0cjsKICAgICBnZW5lcmF0b3IucHVzaExleGlj
YWxTY29wZSh0aGlzLCBCeXRlY29kZUdlbmVyYXRvcjo6U2NvcGVUeXBlOjpMZXRDb25zdFNjb3Bl
LCBCeXRlY29kZUdlbmVyYXRvcjo6VERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplLCBCeXRl
Y29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3RlZCwgJmZvckxvb3BTeW1ib2xU
YWJsZSk7CiAKQEAgLTQxOTMsMTIgKzQxOTEsMTAgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRl
Y29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Tm9kZShnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpLCBtX2xleHBy
KTsKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsZW5ndGg7Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGVudW1lcmF0b3I7CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwgbV9l
eHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB0aGlzLT50cnlHZXRCb3VuZExv
Y2FsKGdlbmVyYXRvcik7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGVudW1lcmF0b3JJbmRleDsK
KwogCiAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlOwogICAgIGlmICht
X2V4cHItPmlzUmVzb2x2ZU5vZGUoKSkKQEAgLTQyMDksMTM3ICs0MjA1LDQ2IEBAIHZvaWQgRm9y
SW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQogICAgICAgICBiYXNlVmFyaWFibGUgPSBnZW5lcmF0b3IudmFyaWFibGUoZ2Vu
ZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS50aGlzUHJpdmF0ZU5hbWUoKSwg
VGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCk7CiAgICAgfQogCi0gICAgLy8gUGF1c2UgYXQgdGhl
IGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBmb3IgZWFjaCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAgICBn
ZW5lcmF0b3IuZW1pdERlYnVnSG9vayhtX2xleHByKTsKLQogICAgIGludCBwcm9maWxlclN0YXJ0
T2Zmc2V0ID0gbV9zdGF0ZW1lbnQtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgaW50IHByb2ZpbGVyRW5k
T2Zmc2V0ID0gbV9zdGF0ZW1lbnQtPmVuZE9mZnNldCgpICsgKG1fc3RhdGVtZW50LT5pc0Jsb2Nr
KCkgPyAxIDogMCk7CiAKLSAgICBlbnVtZXJhdG9yID0gZ2VuZXJhdG9yLmVtaXRHZXRQcm9wZXJ0
eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpKTsKLQotICAg
IEJ5dGVjb2RlR2VuZXJhdG9yOjpQcmVzZXJ2ZWRURFpTdGFjayBwcmVzZXJ2ZWRURFpTdGFjazsK
LSAgICBnZW5lcmF0b3IucHJlc2VydmVURFpTdGFjayhwcmVzZXJ2ZWRURFpTdGFjayk7Ci0KLSAg
ICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AuCiAgICAgewotICAgICAgICBSZWY8TGFiZWxTY29w
ZT4gc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAg
ICAgICAgUmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAg
ICAgUmVmPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0KLSAgICAgICAg
bGVuZ3RoID0gZ2VuZXJhdG9yLmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKSwgZW51bWVyYXRvci5nZXQoKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBpID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1i
ZXIoMCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZW51bWVyYXRvciA9IGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1vZGUgPSBnZW5l
cmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcihzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbml0TW9kZSkpKTsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOwogICAgICAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMb29wSGludCgpOwotCi0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBn
ZW5lcmF0b3IuZW1pdEJpbmFyeU9wPE9wTGVzcz4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBp
LmdldCgpLCBsZW5ndGguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNl
KHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFz
RW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGkuZ2V0
KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwgKnNj
b3BlLT5jb250aW51ZVRhcmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFRvSW5kZXhT
dHJpbmcocHJvcGVydHlOYW1lLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgdGhpcy0+ZW1pdExv
b3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyU3RhcnRPZmZzZXQpOwotCi0gICAg
ICAgIGdlbmVyYXRvci5wdXNoSW5kZXhlZEZvckluU2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0KCkp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAg
IGdlbmVyYXRvci5wb3BJbmRleGVkRm9ySW5TY29wZShsb2NhbC5nZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwotCi0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlv
bih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEluYyhp
LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBh
dXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRp
b24uCi0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotCi0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJl
bChsb29wRW5kLmdldCgpKTsKLSAgICB9Ci0gICAgZ2VuZXJhdG9yLnJlc3RvcmVURFpTdGFjayhw
cmVzZXJ2ZWRURFpTdGFjayk7Ci0KLSAgICAvLyBTdHJ1Y3R1cmUgcHJvcGVydHkgbG9vcC4KLSAg
ICB7CiAgICAgICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNj
b3BlKExhYmVsU2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdl
bmVyYXRvci5uZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0
b3IubmV3TGFiZWwoKTsKIAotICAgICAgICBlbnVtZXJhdG9ySW5kZXggPSBnZW5lcmF0b3IuZW1p
dExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7Ci0gICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5TmFtZShw
cm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7Ci0KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgcHJvcGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVl
KHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFz
RW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJv
cGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0K
LSAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0
KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVy
U3RhcnRPZmZzZXQpOwotCi0gICAgICAgIGdlbmVyYXRvci5wdXNoU3RydWN0dXJlRm9ySW5TY29w
ZShsb2NhbC5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCks
IGVudW1lcmF0b3IuZ2V0KCksIGJhc2VWYXJpYWJsZSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKLSAgICAgICAgZ2VuZXJhdG9yLnBvcFN0cnVjdHVyZUZv
ckluU2NvcGUobG9jYWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNv
bnRyb2xGbG93KHByb2ZpbGVyRW5kT2Zmc2V0KTsKKyAgICAgICAgZW51bWVyYXRvciA9IGdlbmVy
YXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
YmFzZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChwcm9w
ZXJ0eU5hbWUuZ2V0KCksIExpbmtUaW1lQ29uc3RhbnQ6OmVtcHR5UHJvcGVydHlOYW1lRW51bWVy
YXRvcik7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihwcm9w
ZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShwcm9wZXJ0eU5hbWUuZ2V0KCksIHNjb3Bl
LT5icmVha1RhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKICAg
ICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlv
bih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEluYyhl
bnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9v
ayhtX2xleHByKTsgLy8gUGF1c2UgYXQgdGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBmb3IgZWFj
aCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGxvb3BTdGFy
dC5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdl
bmVyYXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gR2Vu
ZXJpYyBwcm9wZXJ0eSBsb29wLgotICAgIHsKLSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3Bl
ID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJl
ZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxM
YWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotCi0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0KLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0
eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7CiAK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICBn
ZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7Ci0KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJl
c3VsdCA9IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJv
cGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJlc3Vs
dC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2
ZSBhIHdheSB0byBzZWUgaWYgYW55b25lIGlzIGFjdHVhbGx5IHVzaW5nIHRoZSBwcm9wZXJ0eU5h
bWUgZm9yIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZ2V0X2J5X3ZhbC4gSWYgbm90LCB3ZSBjb3Vs
ZCBlbGltaW5hdGUgdGhlIHRvU3RyaW5nIGluIHRoaXMgb3Bjb2RlLgorICAgICAgICBnZW5lcmF0
b3IuZW1pdEVudW1lcmF0b3JOZXh0KHByb3BlcnR5TmFtZS5nZXQoKSwgbW9kZS5nZXQoKSwgaW5k
ZXguZ2V0KCksIGJhc2UuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCkpOwogCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwg
cHJvcGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShy
ZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIC8vIE5vdGUs
IGNob29zaW5nIHVuZGVmaW5lZCBvciBudWxsIGhlbHBzIHBsZWFzZSBERkcncyBBYnN0cmFjdCBJ
bnRlcnByZXRlciBhcyBpdCBkb2Vzbid0IGRpc3Rpbmd1aXNoIG51bGwgYW5kIHVuZGVmaW5lZCBh
cyB0eXBlcyAodmlhIFNwZWNPdGhlcikuCisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1
ZShnZW5lcmF0b3IuZW1pdElzVW5kZWZpbmVkT3JOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgcHJvcGVydHlOYW1lLmdldCgpKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogCiAgICAgICAg
IHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKIAog
ICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zm
c2V0KTsKIAorICAgICAgICBnZW5lcmF0b3IucHVzaEZvckluU2NvcGUobG9jYWwuZ2V0KCksIHBy
b3BlcnR5TmFtZS5nZXQoKSwgaW5kZXguZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIG1vZGUuZ2V0
KCksIGJhc2VWYXJpYWJsZSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fc3Rh
dGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEZvckluU2NvcGUobG9jYWwuZ2V0KCkpOwog
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
LSAgICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJh
dGlvbih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdElu
YyhlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0
b3JHZW5lcmljUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQo
KSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hv
b2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVh
Y2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3Rh
cnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9m
aWxlckVuZE9mZnNldCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcCgqc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFr
VGFyZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKICAgICB9CiAKLSAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLnBvcExleGljYWxTY29w
ZSh0aGlzKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVu
ZE9mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNGI1ZjBkNjIwMDllZTY5MGJkZGY0
MzMwMTAyMjhhZDBhNGFlNDY3NS4uMDY0MGMyYTA1ODZiZWJmMWVhZTAxZjkxYTA4OGM2YWRkMzM3
OGUyNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMjE1MSw3ICsyMTUxLDE0IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIHNldEZvck5v
ZGUobm9kZSwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkIGJlIGFibGUgdG8gdXNlIHRoZSBjb2RlIGJlbG93IHRvIGRldGVy
bWluZSB0aGUgZWZmZWN0cyBvZiB0aGUgbm9kZSB3aGVuIHByb3BlcnR5TmFtZSA9PSBpbmRleC4K
KyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICBjYXNl
IEF0b21pY3NBZGQ6CiAgICAgY2FzZSBBdG9taWNzQW5kOgpAQCAtMjE2MiwxMiArMjE2OSw5IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBBdG9taWNzU3RvcmU6CiAgICAgY2Fz
ZSBBdG9taWNzU3ViOgogICAgIGNhc2UgQXRvbWljc1hvcjogeworICAgICAgICAvLyBXZSBjb3Vs
ZCBkbyB0aGlzIGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgYnV0IGl0J3MgdW5saWtlbHkgdG8gYmUg
dXNlZnVsIGluIHByYWN0aWNlLgogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkg
ewogICAgICAgICAgICAgYXV0byBmb2xkR2V0QnlWYWxPbkNvbnN0YW50UHJvcGVydHkgPSBbJl0g
KEVkZ2UmIGFycmF5RWRnZSwgRWRnZSYgaW5kZXhFZGdlKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGNhbiBleHBhbmQgdGhpcyBmb3Igbm9uIHg4NiBlbnZpcm9ubWVudHMuCi0gICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NDY0MQotICAgICAgICAgICAgICAgIGlmICghaXNYODYoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1
ZSA9IGZvck5vZGUoYXJyYXlFZGdlKTsKIApAQCAtNDMwNCw2ICs0MzA4LDQ5IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgRW51bWVy
YXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzU2FuZUNoYWlu
KCkpCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSk7CisgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpICE9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFt
ZWRNb2RlIHx8IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpICE9IENlbGxV
c2UpCisgICAgICAgICAgICBjbG9iYmVyV29ybGQoKTsKKworICAgICAgICBzZXROb25DZWxsVHlw
ZUZvck5vZGUobm9kZSwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNO
dW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYm
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAwKS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNhc2UgRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5v
ZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIHNldFR5cGVGb3JOb2Rl
KG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blBy
b3BlcnR5OiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdoZW4gdGhlIHBy
b3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAgICAgIC8vIHZh
bHVlIGluZm9ybWF0aW9uLgorICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAppbmRleCAxMTExZjg5ZjlkN2I1Yjk3Nzc4YzE2YzhkNTQ2NDBiZWEzNzQ0MmIyLi5hMDI2
YWFkMTg5M2JmMjNjNTcxOTZmY2M2YzkxZmMyMDAwM2M0NTY3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKQEAgLTI4OSw2ICsyODksMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47
CiAgICAgfQogCisgICAgYm9vbCBpc1NhbmVDaGFpbigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNJbkJvdW5kc1NhbmVDaGFpbigpIHx8IGlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKTsK
KyAgICB9CisKICAgICBib29sIGlzT3V0T2ZCb3VuZHMoKSBjb25zdAogICAgIHsKICAgICAgICAg
cmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzIHx8IHNwZWN1bGF0aW9u
KCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5k
ZXggZGIzN2Y0ZGRkYmY4MGNkNjZlYjU3ODdkN2JhYTJiZjUzYWY4OTA3Ni4uOWRiZDBiNDdkOWRm
ZjRjZjYwMzhhZjUwMDE3OTM0OGJlMGFlYTI5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0z
OTAsNyArMzkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5tZXJn
ZUZsYWdzKGZsYWdzICYgfk5vZGVCeXRlY29kZU5lZWRzTmVnWmVybyk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
R2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNlc0FzVmFsdWUp
OwogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVyZ2VGbGFncyhO
b2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlciB8IE5vZGVC
eXRlY29kZVVzZXNBc0ludCB8IE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBhMjk2
YzRiODdjODU4ODY0ZmJkZWRkNzRlZjcyN2U1NGQ5NWZkNjk0Li4yMDI1MTNmZTczMTkxNzRmYTc3
YzYzNmExYzFiZDA4MDI3NGZhNWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtODQ4Niw2ICs4NDg2LDEzMiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfdG9faW5kZXhfc3RyaW5nKTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9uZXh0OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOworICAgICAgICAgICAgYXV0byYgbWV0
YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJy
YXk6OlJlYWQpOworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2Up
OworICAgICAgICAgICAgTm9kZSogaW5kZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAg
ICAgICAgICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7Cisg
ICAgICAgICAgICBOb2RlKiBtb2RlID0gZ2V0KGJ5dGVjb2RlLm1fbW9kZSk7CisKKyAgICAgICAg
ICAgIGF1dG8gc2Vlbk1vZGVzID0gbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGE7CisKKyAg
ICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9y
Y2VPU1JFeGl0KTsKKworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCht
b2RlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIHN0b3JhZ2UgZm9yIEluZGV4ZWRNb2RlIG9u
bHkuCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVkSW5kZXhBbmRNb2RlID0gYWRkVG9HcmFwaChO
b2RlOjpWYXJBcmcsIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNlZW5Nb2RlcykpOworCisgICAgICAgICAgICBOb2Rl
KiB1cGRhdGVkTW9kZSA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSwgdXBk
YXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9tb2RlLCB1cGRh
dGVkTW9kZSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRJbmRleCA9IGFkZFRvR3JhcGgo
RW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIHVwZGF0ZWRJbmRleEFuZE1vZGUpOworICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1faW5kZXgsIHVwZGF0ZWRJbmRleCk7CisKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSwgYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dFVw
ZGF0ZVByb3BlcnR5TmFtZSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9kZSwgZW51bWVyYXRvcikp
OworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX25leHQpOworICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6IHsKKyAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
dEJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5
TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQo
KTsKKworICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAg
ICAgICAgICAgTm9kZSogcHJvcGVydHlOYW1lID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1l
KTsKKyAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAg
ICAgICAgICAgTm9kZSogbW9kZSA9IGdldChieXRlY29kZS5tX21vZGUpOworICAgICAgICAgICAg
Tm9kZSogZW51bWVyYXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOworCisgICAgICAg
ICAgICBhdXRvIHNlZW5Nb2RlcyA9IE9wdGlvblNldDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok1vZGU+Ojpmcm9tUmF3KG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICAgICAg
ICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JF
eGl0KTsKKworICAgICAgICAgICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICAgICAgTm9kZSogYmFkTW9kZSA9IGFk
ZFRvR3JhcGgoQXJpdGhCaXRBbmQsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TmFtZWRNb2RlKSkpOworCisgICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgQXJpdGhCaXRB
bmQgY2Fubm90IGhhdmUgZWZmZWN0cyBzbyBpdCdzIG9rIHRvIGV4aXQgaGVyZS4KKyAgICAgICAg
ICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChFeGl0
T0spOworCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5m
byhtX2dyYXBoLmZyZWV6ZVN0cm9uZyhqc051bWJlcigwKSkpLCBiYWRNb2RlKTsKKworICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGluZGV4KTsgLy8gVXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4
ZWQgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRy
KTsgLy8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0QnlW
YWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisK
KyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHByb3BlcnR5TmFtZSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBGSVhNRTogQ2hlY2tpbmcgZm9yIGEgQmFkQ29uc3RhbnRWYWx1
ZSBjYXVzZXMgdXMgdG8gYWx3YXlzIHVzZSB0aGUgR2VuZXJpYyB2YXJpYW50IGlmIHdlIHN3aXRj
aGVkIGZyb20gSW5kZXhlZE1vZGUgLT4gSW5kZXhlZE1vZGUgKyBOYW1lZE1vZGUgZXZlbiB0aG91
Z2ggdGhhdCBtaWdodCBiZSBmaW5lLgorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMuY29udGFp
bnNBbnkoeyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAg
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBCYWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG1vZGVUZXN0ID0gYWRkVG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQo
anNOdW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJl
ZXplU3Ryb25nKGpzQm9vbGVhbihmYWxzZSkpKSwgbW9kZVRlc3QpOworCisgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
aW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5kZXhlZCBvcHRp
bWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBG
b3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobW9k
ZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51
bWVyYXRvckdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1
bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0
eU5hbWUpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2Up
OworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRj
aCBHZXRCeVZhbC4KKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZW51
bWVyYXRvcik7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9k
ZTo6VmFyQXJnLCBFbnVtZXJhdG9yR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkp
LCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfaW5fYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwg
QXJyYXk6OlJlYWQpOworCisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKKworICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBv
cF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHk6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Pigp
OworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworCisgICAgICAgICAgICBhZGRWYXJB
cmdDaGlsZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGdldChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQoYnl0ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE9wSW5mbyhh
cnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEp
KSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSk7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDog
ewogICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRJbnRlcm5hbEZpZWxkPigpOwogICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKEdldEludGVybmFsRmllbGQsIE9wSW5mbyhieXRlY29kZS5tX2luZGV4KSwgT3BJbmZv
KGdldFByZWRpY3Rpb24oKSksIGdldChieXRlY29kZS5tX2Jhc2UpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IGNjMGQwMTRkYTI5MzFmZjNlY2RjZTk0
MjljYzI2MjU2MWUyZjdmNzYuLjA2ZDE5ZDE3Mzk3MzAzZjc0MWJlNmIwMmJmMDEwNTdmNzIyNTY0
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCkBAIC0xNjQs
NyArMTY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2coIiAgIEZvdW5kIG11c3Qt
aGFuZGxlIGJsb2NrOiAiLCAqYmxvY2ssICJcbiIpOwogICAgICAgICAKICAgICAgICAgLy8gVGhp
cyBtZXJnZXMgc25hcHNob3Qgb2Ygc3RhY2sgdmFsdWVzIHdoaWxlIENGQSBwaGFzZSB3YW50IHRv
IGhhdmUgcHJvdmVuIHR5cGVzIGFuZCB2YWx1ZXMuIFRoaXMgaXMgc29tZXdoYXQgdHJpY2t5Lgot
ICAgICAgICAvLyBCdXQgdGhpcyBpcyBPSyBhcyBsb25nIGFzIERGRyBPU1IgZW50cnkgdmFsaWRh
dGVzIHRoZSBpbnB1dHMgd2l0aCAqcHJvdmVuKiBBYnN0cmFjVmFsdWUgdmFsdWVzLiBBbmQgaXQg
dHVybnMgb3V0IHRoYXQgdGhpcworICAgICAgICAvLyBCdXQgdGhpcyBpcyBPSyBhcyBsb25nIGFz
IERGRyBPU1IgZW50cnkgdmFsaWRhdGVzIHRoZSBpbnB1dHMgd2l0aCAqcHJvdmVuKiBBYnN0cmFj
dFZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMKICAgICAgICAgLy8gdHlw
ZSB3aWRlbmluZyBpcyBjcml0aWNhbCB0byBuYXZpZXItc3Rva2VzLiBXaXRob3V0IGl0LCBuYXZp
ZXItc3Rva2VzIGhhcyBtb3JlIHN0cmljdCBjb25zdHJhaW50IG9uIE9TUiBlbnRyeSBhbmQKICAg
ICAgICAgLy8gZmFpbHMgT1NSIGVudHJ5IHJlcGVhdGVkbHkuCiAgICAgICAgIGJvb2wgY2hhbmdl
ZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCmluZGV4IGM3MTY0YjMwZjQ2NGViMGQ0MzgyZTJjY2E0MmQ1Njk5NjRkMWJmNjcuLjc0M2Jj
ZDM1MzE0YTQzMzM2NGUzYTkwNGU4MjBkZjVlMDIzZTQzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTI5OSw2ICsyOTksMTAgQEAgQ2Fw
YWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX3NldF9wcml2YXRlX2JyYW5kOgogICAg
IGNhc2Ugb3BfY2hlY2tfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6
CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbDoKKyAgICBjYXNlIG9w
X2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eToKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVB
bmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX2NhbGxfZXZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOWQxMDA0ZmU1M2YzZDQ0N2RmMTAzZmFjYTBkMmUx
MGVjNGZmNWY0Ni4uNzdhNjhlOGU0MWE3NzkyZTNlNmI2ZTQ5M2E0MDVjNzVmMzg0Yzk2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTE0Nyw2ICsxNDcs
MTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVh
ZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgY2FzZSBDaGVja0FycmF5Ogog
ICAgICAgICBjYXNlIENoZWNrQXJyYXlPckVtcHR5OgogICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAg
ICBjYXNlIEdldFZlY3Rvckxlbmd0aDoKQEAgLTM0Myw2ICszNDcsOSBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29u
c3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKICAgICBjYXNlIFRvSW5k
ZXhTdHJpbmc6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6CiAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7CkBAIC0zNTAsNiArMzU3LDcyIEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiBy
ZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgIHJlYWQoSlNPYmplY3Rf
YnV0dGVyZmx5KTsKKyAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIGdyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICByZWFkKE5hbWVkUHJv
cGVydGllcyk7CisgICAgICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1l
dGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAg
ICAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAg
ICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlz
U2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5n
dGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEludDMyUHJvcGVydGllcyk7CisgICAg
ICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4
ZWRJbnQzMlByb3BlcnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hh
aW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91YmxlUHJvcGVydGllcyk7CisgICAgICAgICAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFp
bigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAg
ICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAg
ICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRD
b250aWd1b3VzUHJvcGVydGllcywgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CisgICAgICAgICAgICBpZiAobW9kZS5p
c0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5n
dGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CiAgICAgY2FzZSBIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKQEAg
LTcwNSw2ICs3NzgsOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
LCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgVG9Qcmlt
aXRpdmU6CiAgICAgY2FzZSBUb1Byb3BlcnR5S2V5OgogICAgIGNhc2UgSW5CeVZhbDoKKyAgICBj
YXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5
OgogICAgIGNhc2UgSW5CeUlkOgogICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CiAgICAgY2FzZSBI
YXNQcml2YXRlQnJhbmQ6CkBAIC05MDYsNiArOTgxLDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0
ZUZ1CiAgICAgICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsg
c3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgLy8g
RklYTUU6IFRoaXMgaXMgZmFyIHRvbyBjb25zZXJ2YXRpdmUgZm9yIHRoZSBjaGlsZDEoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UgY2FzZS4KKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogewor
ICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJh
eU1vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCA1M2Fi
ZmVhOTFkZjIyNGJkNDgyNTUwZGJlNTc4MmQ1OWNhZGQ5OGI1Li41MmE3MzE2NTY1ODYxMjUwNjU2
MGUzYmYzZjUxYjk1MTNmM2I5YTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCkBAIC0zOTUsNiArMzk1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSkKICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKICAgICBjYXNl
IEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAg
IGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHk6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgogICAgIGNhc2UgTWF0ZXJpYWxpemVO
ZXdPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld0ludGVybmFsRmllbGRPYmplY3Q6CiAg
ICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CkBAIC01MDQsMTAgKzUwOCwxNSBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICBjYXNlIEVudW1l
cmF0b3JHZXRCeVZhbDoKICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBB
cnJheTo6U3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBj
YXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5k
ZXggNDcyMDJkNmRiYWQ5MWM3NmY1OTc4ZGEyOGNhMWM0OTc3MTU1YTgxOS4uYWNlNGFmNTM0NTcy
ZjRiZTZhZTc1YTIwZWEzMDE2YjRjNmM3OGY4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0xMDI0LDYgKzEwMjQsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0
QnlWYWw6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNSkpOworICAgICAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAg
ICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgewogICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCkBAIC0xMDYyLDYgKzEwNjksMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTcy
CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKEFycmF5TW9kZShBcnJheTo6R2Vu
ZXJpYywgbm9kZS0+YXJyYXlNb2RlKCkuYWN0aW9uKCkpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKKworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAg
ICAgICAvLyBEb24ndCBmb3JjZSBPU1IgYmVjYXVzZSB3ZSBoYXZlIG9ubHkgc2VlbiBOYW1lZE1v
ZGUuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdFIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdh
eSB0byBkbyB0aGlzLi4uCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVy
YXRvckdldEJ5VmFsKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUobm9k
ZS0+YXJyYXlNb2RlKCkud2l0aFR5cGUoQXJyYXk6OkdlbmVyaWMpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMDk2LDcgKzExMTIsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3
aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KICAgICAgICAgICAgICAgICAgICAg
Ly8gb3V0LW9mLWJvdW5kcyBzbG93IHBhdGguIFdlIGNhbiBmaXggdGhhdCB3aXRoOgogICAgICAg
ICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ0NjY4Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2Rl
LnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRT
aXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCkBAIC0xMTExLDcgKzEx
MjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlN
b2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWlu
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAKKwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3Ro
ZXIpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhvbGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwg
c28gaWYgdGhlIHVzZXIgZG9lc24ndCBjYXJlCkBAIC0xMTIxLDcgKzExMzcsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlN
b2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4
aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3Vu
ZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE3OCw3ICsx
MTk0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0
IHNldCBhIG5vbi1KU1ZhbHVlIHJlc3VsdCBmb3IgRW51bWVyYXRvckdldEJ5VmFsIHNpbmNlIHdl
IGNvdWxkIHN0aWxsIGRvIGEgTmFtZWRNb2RlIHByb3BlcnR5IGFjY2Vzcy4gV2UgYWxzbyBkb24n
dCBoYXZlIGEgZ29vZCB3YXkgdG8KKyAgICAgICAgICAgIC8vIHByb3ZlIHRoZXJlJ3Mgbm8gc3Ry
dWN0dXJlIHByb3BlcnRpZXMgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgICAgIGlmIChub2RlLT5v
cCgpID09IEVudW1lcmF0b3JHZXRCeVZhbCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMo
KQpAQCAtMjM0NSw2ICsyMzY1LDU4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmaXhFZGdlPElu
dDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAg
ICAgICAgIEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAg
ICAgICAgRWRnZSYgaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAg
ICAgICAgRWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUt
PnN0b3JhZ2VDaGlsZEluZGV4KCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRv
ck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgewor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSktPnByZWRpY3Rpb24oKSkpOworCisgICAgICAgICAgICAgICAgZml4
RWRnZTxDZWxsVXNlPihiYXNlKTsKKyAgICAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9u
KGJhc2UsIGluZGV4LCBzdG9yYWdlRWRnZSk7CisKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5
TW9kZS5iZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHNl
dFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJy
YXk6OkluQm91bmRzID8gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91
bmRzU2FuZUNoYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUtPmVu
dW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2Rl
ICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUp
KQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93
bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZp
eEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4
dHJhY3RJbmRleDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihu
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3Vs
ZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMy
VXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6
IHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9u
IHRoZSBpbnN0cnVjdGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9i
YWxUeXBlU2V0LgogICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0
IGlzIGNvbnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVj
ayBmb3IKQEAgLTM2OTAsNiArMzc2Miw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZv
KGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0K
IAorICAgIHZvaWQgc2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAg
ICAgICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0
aW9uOworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVy
ZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdv
cmsgb24gYSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0
dXJuIHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBh
IGNoYW5nZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAg
ICAgICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3
ZSBhY3R1YWxseSBoYWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVh
ZCBmcm9tIGEgaG9sZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExp
a2VseSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxl
bnQgb2YKKyAgICAgICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4g
Rm9yIG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8v
IE5hTiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdh
dGlvbiwgYW5kIGp1c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0
aGF0IGNhc2UuIFRoaXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRz
IHRvIGhhdmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJj
ZSB0byBVbmRlZmluZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBX
ZSB3YW50IHRvCisgICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJu
IEludDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAg
ICAvLyBiYXNlZD8KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28g
aW1wbGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QK
KyAgICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRv
IHRoZSBob2xlIGNoZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRo
YXQgaGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAg
ICAgICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoK
KyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDQ2NjgKKworICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYm
IGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFw
aC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAg
ICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5k
c1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJl
IGVudGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAg
IC8vIHJldHVybmVkIGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQu
IFdlIHN0aWxsIGRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0
IHJlcXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBp
ZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJv
dW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0
aXZlSW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFy
cmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAg
ICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6Cisg
ICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090
aGVyKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0
aGUgdXNlciBkb2Vzbid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRp
ZmZlcmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAg
ICAgICAgICAgICAvLyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVj
dWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0
T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBO
ZWdhdGl2ZUluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24g
PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAg
ICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlv
bik7CisgICAgfQorCiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUs
IEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5
ZDQ5ZmU2MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUx
MWQxOTJkMTc1MmQ0NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUt
Pmhhc1B1dEJ5SWRTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0
QnlJZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5p
c0JyYW5jaCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRl
Z2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2Zjlj
MWQwZWY0MDMzMGMyMzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBm
M2E4OTIyMTUxZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsx
MzQ0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAg
ICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IGV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9w
KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXguCiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAg
c2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwog
ICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2Rl
LT5jaGlsZDEoKS5ub2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2
YTc4NmQzOTNmZDg3YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdj
ZDY0ZjBkNmY0NjQ2NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcApAQCAtMTExLDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVC
eVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNh
c2UgRmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRF
eHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAg
ICBicmVhazsKIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAg
ICAgY2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcw
N2E2ZDBhNDM4ZTVlZDgxLi42OTAzM2Y3OTkxYTM2N2JhNDU1MTkzNGRmODMxMTZhZGI0NDE3MTIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2lu
Y2x1ZGUgIkRlbGV0ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQu
aCIKICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc3Miw2ICsxNzczLDcgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIEdldEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQ
cm90b3R5cGVPZjoKICAgICAgICAgY2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1l
cmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsx
OTQzLDg0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwog
ICAgIH0KIAorICAgIGJvb2wgaGFzU3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2Fz
ZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAg
ICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAg
IGNhc2UgQXRvbWljc0FuZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgor
ICAgICAgICBjYXNlIEF0b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoK
KyAgICAgICAgY2FzZSBBdG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAg
ICAgICBjYXNlIEF0b21pY3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAg
Y2FzZSBBcnJheVB1c2g6CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0
QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBj
YXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgc3RvcmFnZUNoaWxkSW5kZXgoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1N0b3JhZ2VD
aGlsZCgpKTsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGNhc2UgU3RyaW5n
Q29kZVBvaW50QXQ6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBj
YXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgUHV0QnlW
YWxEaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBjYXNlIEF0b21pY3NBZGQ6Cisg
ICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hh
bmdlOgorICAgICAgICBjYXNlIEF0b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNz
TG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3Jl
OgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAg
ICAgICAgICAgIHJldHVybiAyICsgbnVtRXh0cmFBdG9taWNzQXJncyhvcCgpKTsKKyAgICAgICAg
Y2FzZSBBcnJheVB1c2g6CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBjYXNlIEFy
cmF5UG9wOgorICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJu
IDI7CisKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFz
RW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgICAgIHJldHVybiAyOworCisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgICAgICBy
ZXR1cm4gNDsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBB
cnJheUluZGV4T2YgYnV0IGl0IGRvZXMgbm9uLXRyaXZpYWwgdGhpbmdzIHRvIGRldGVybWluZSBz
dG9yYWdlIGVkZ2UuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBoYXNVaWRPcGVyYW5kKCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBvcCgpID09IENoZWNrSWRlbnQ7CkBAIC0yMjA1LDYgKzIyODUsMTAgQEAgcHVi
bGljOgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgogICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6
CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRh
dGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAg
ICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eToKICAgICAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5n
Q2hhckNvZGVBdDoKICAgICAgICAgY2FzZSBTdHJpbmdDb2RlUG9pbnRBdDoKQEAgLTMxNzQsNiAr
MzI1OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX29wSW5mby5hczxTZXRQcml2YXRl
QnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRh
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgRW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0
b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICByZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0
b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVh
bSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRiMTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0
MjE3YzUwYWQxLi41Y2U5YWYzZTQ1MDM0OGVjYWFiYWMxYjFjODk1YWVjM2UxZjc2OGJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC01MTUsNiArNTE1LDEzIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBt
YWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCiAgICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKSBcCisgICAg
bWFjcm8oRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSwgTm9k
ZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIE5v
ZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlO
YW1lLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yR2V0QnlWYWwsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KEVudW1lcmF0b3JJbkJ5VmFsLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwg
Tm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICAvKiBOb2RlcyBmb3IgSlNNYXAgYW5kIEpTU2V0ICovIFwKICAgICBtYWNybyhNYXBIYXNo
LCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhOb3JtYWxpemVNYXBLZXksIE5vZGVSZXN1
bHRKUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5k
ZXggNzA0MTMzMzVhMjJlYjMxNDU3MzA2YjVhZmMzNTdhMGQzMTI3YWU5Ny4uODliZGNiMWQ1MDQ5
MDU1Y2U2MmRlOGMzZDIwNzg5MmM1ZmIxMDI2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yNTA0LDYgKzI1MDQsMTA3IEBAIEpTQ19ERUZJTkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxP
YmplY3QqIGdsb2JhCiAgICAgcmV0dXJuIGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZt
LCBpbmRleCkuc3RyaW5nKCkpOwogfQogCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCB1aW50
MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3Bl
cmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6TW9kZSBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpNb2RlPihtb2RlTnVtYmVyKTsKKyAgICBpZiAoSlNWYWx1ZTo6ZGVjb2RlKGJhc2VW
YWx1ZSkuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAgICBBU1NFUlQobW9kZSA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluaXRNb2RlKTsKKyAgICAgICAgQVNTRVJUKCFpbmRleCk7
CisgICAgICAgIEFTU0VSVCghZW51bWVyYXRvci0+c2l6ZU9mUHJvcGVydHlOYW1lcygpKTsKKyAg
ICAgICAgbW9kZSA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgSlNPYmplY3QqIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZVZh
bHVlKS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworCisgICAgICAgIGNvbnN0ZXhwciBib29sIHNob3VsZEFsbG9jYXRlSW5k
ZXhlZE5hbWVTdHJpbmcgPSBmYWxzZTsKKyAgICAgICAgZW51bWVyYXRvci0+Y29tcHV0ZU5leHQo
Z2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9kZSwgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFt
ZVN0cmluZyk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
fQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlPihzdGF0aWNfY2FzdDx1aW50NjRfdD4obW9kZSkgPDwgMzIgfCBpbmRleCB8IEpT
VmFsdWU6Ok51bWJlclRhZyk7CisjZWxzZQorICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZSht
b2RlLCBpbmRleCk7CisjZW5kaWYKKyAgICBBU1NFUlQocmVzdWx0LmlzTnVtYmVyKCkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIHVpbnQzMl90IGluZGV4LCBp
bnQzMl90IG1vZGVOdW1iZXIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisKKyAgICBpZiAobW9kZU51
bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAg
IGlmIChpbmRleCA8IGVudW1lcmF0b3ItPmluZGV4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGlu
ZGV4KS5zdHJpbmcoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICB9CisKKyAgICBKU1N0cmluZyogcmVzdWx0ID0gZW51
bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworCisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNlLCB1aW50MzJfdCBpbmRl
eCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKSkKK3sKKyAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJF
X0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisKKyAgICBKU1N0cmluZyogc3RyaW5nID0gZW51bWVyYXRvci0+cHJvcGVydHlO
YW1lQXRJbmRleChpbmRleCk7CisgICAgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSA9IHN0cmlu
Zy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRp
b24oKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYmFzZS0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0
KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgUkVMRUFTRV9B
TkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNvZGUob2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUpKSk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25FbnVtZXJhdG9ySW5CeVZhbCwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3Bl
cnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVyKSkKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUo
YmFzZVZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGlm
IChtb2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgJiYg
YmFzZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihiYXNlLmdldE9iamVjdCgpLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KSkpOwor
CisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IGpzU2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZt
LCBKU1ZhbHVlOjpkZWNvZGUocHJvcGVydHlOYW1lVmFsdWUpKTsKKyAgICBSRUxFQVNFX0FORF9S
RVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpv
cEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUpKSkpOworfQorCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5LCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1Zh
bHVlIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgcHJvcGVydHlOYW1lVmFsdWUsIHVpbnQzMl90
IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2
bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBj
YWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKwor
ICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpOworICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSAmJiBiYXNlLmlzT2JqZWN0KCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGJhc2UuZ2V0T2JqZWN0KCktPmhh
c093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgpKSk7CisKKyAgICBKU1N0cmluZyogcHJv
cGVydHlOYW1lID0ganNTZWN1cmVDYXN0PEpTU3RyaW5nKj4odm0sIEpTVmFsdWU6OmRlY29kZShw
cm9wZXJ0eU5hbWVWYWx1ZSkpOworICAgIGF1dG8gaWRlbnRpZmllciA9IHByb3BlcnR5TmFtZS0+
dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNl
LCBpZGVudGlmaWVyKSkpKTsKK30KKwogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU0NlbGwqIHJlZ2V4cFB0ciwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZExhc3RJbmRl
eCkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAppbmRleCAzMTRlMWZlZGU1OTVkMGZiOGZhODM1ZWY3
MjA1ZTZiNjQ1YzMwNDZiLi5kMzZmMzUzYmMzNjEyYjk4ODJjYTFkMTgzODQ3M2RkMDkyODU5NDVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaApAQCAtMzYsNiAr
MzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIERhdGVJbnN0YW5jZTsKIGNsYXNzIEpTQmln
SW50Owogc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlOworY2xhc3MgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtMTEwLDYgKzExMSwxMiBAQCBK
U0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJlUHJvcGVydHksIEVu
Y29kZWRKU1ZhbHVlLCAoSlNHbG9iYQogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEVuY29k
ZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3Bl
cnR5RW51bWVyYXRvckNlbGwsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCopKTsK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgSlNDZWxs
KiwgKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgRW5jb2RlZEpTVmFs
dWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50MzJfdCwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90LCBpbnQzMl90LCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JJ
bkJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50MzJfdCkpOworSlNDX0RFQ0xBUkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
LCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQz
Ml90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiwgdWludDMyX3QsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopKTsKKwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4
LCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSkpOwog
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdBcnJheSwgY2hhciosIChKU0ds
b2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHZvaWQqLCBzaXplX3QpKTsKIEpTQ19ERUNMQVJFX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3RW1wdHlBcnJheSwgY2hhciosIChWTSosIFN0cnVjdHVy
ZSopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggYWE3YzYxZTYwYWY1MDdlYjkxN2UzMDZi
YWI4NTM3YzBlODllMmUwZC4uZDJhZWNjMDFhNWYyOTA0M2FlMjFkZmRmZGNjN2Y1MTA5OTg4YzI4
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTQ3MywxNCArNDczLDE1IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMCk7CiAgICAg
ICAgICAgICBpZiAoIWNoaWxkMS0+cHJlZGljdGlvbigpKQogICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCisKKwogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLmNo
aWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFy
cmF5TW9kZSgpLnJlZmluZSgKICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAogICAgICAg
ICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgIGNoaWxkMi0+
cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgIFNwZWNOb25lKTsKLSAgICAgICAgICAgIAor
CiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJv
dW5kcygpKQpAQCAtNTAxLDcgKzUwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0Z1bGxEb3VibGUpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZvckFyaXRobWV0aWMobm9kZS0+Z2V0SGVhcFBy
ZWRpY3Rpb24oKSkgJiYgbm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkKKyAgICAgICAgICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlv
bigpKSAmJiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCB8fCBub2RlLT5vcCgpID09IEVudW1lcmF0
b3JHZXRCeVZhbCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0
aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVuYWJsZUludDUy
KCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJ
bnQ1MkFueSk7CkBAIC04NjIsNiArODYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAg
IGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlQdXNoOgogICAgICAgICBjYXNlIFJl
Z0V4cEV4ZWM6CkBAIC0xMjA1LDEwICsxMjA3LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBz
ZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKIAorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXg6CiAgICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDog
ewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgICAgIGNhc2UgSW5CeVZh
bDoKICAgICAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CkBA
IC0xMjM5LDYgKzEyNDYsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
U3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgICAgICAvLyBUaGlz
IGNhbiBhY3R1YWxseSByZXR1cm4gYSBKUyBudWxsIGJ1dCB3ZSBicmFuY2ggb2YgdGhhdCBjYXNl
IGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrIHNvIHdlIGRvbid0IHdhbnQgdG8gbWVzcyB3aXRoCisg
ICAgICAgICAgICAvLyBmaXh1cCdzIGxvZ2ljLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihT
cGVjRnVsbE51bWJlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZhbHVlIHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVy
IGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3RyaW5nLgorICAgICAgICAgICAgc2V0UHJlZGljdGlv
bihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKICAgICAgICAgY2FzZSBQYXJzZUludDogewogICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRo
aXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHByb2R1Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAg
ICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0IHByb2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQg
b2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
U0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBjOTYzN2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdl
Mjk5OWQ0YzAzLi42NTY1MTEwNDE4ZGNhZTllNGZlZmZmYTk5NDYyMjcyM2I0MjgwNTQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAK
QEAgLTg2LDYgKzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGxvd2VyQm91bmRzQ2hlY2so
bV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSksIG1fZ3Jh
cGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNl
IEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAg
ICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCksIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIp
KTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJkMGI5YjQ2MGUy
YzUwLi5hMDUxZTc0YTcwNjIxMTU5YzgzYjk2MjkzYzgyODZmZTM1NGZkMmNmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMzcyLDYgKzM3Miw3
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIC8vIHRvIGNhcHR1cmUgInByb2Zp
bGluZyIgYXQgdGhlIHBvaW50IGluIGNvbnRyb2wgZmxvdyBoZXJlIHRoZSB1c2VyIHB1dCB0aGVt
LgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
ICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtNDk2LDYgKzQ5NywxMSBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGJvb2wgaWdubwogICAgICAgICByZXR1cm4gaXNTYWZlOwogICAgIH0KIAorICAgIGNhc2Ug
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgLy8gVGhlc2UgdGVjaG5pY2Fs
bHkgZG9uJ3QgaGF2ZSBlZmZlY3RzIGJ1dCB0aGV5J2xsIG9ubHkgZXZlciBmb2xsb3cgYSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSBzbyB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBm
YWxzZS4KKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJv
cGVydHlOYW1lOgogICAgIGNhc2UgVG9UaGlzOgogICAgIGNhc2UgQ3JlYXRlVGhpczoKICAgICBj
YXNlIENyZWF0ZVByb21pc2U6CkBAIC01OTUsNiArNjAxLDggQEAgYm9vbCBzYWZlVG9FeGVjdXRl
KEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29s
IGlnbm8KICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICBjYXNlIEluQnlWYWw6CiAgICAg
Y2FzZSBJbkJ5SWQ6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEhhc1ByaXZhdGVOYW1lOgogICAgIGNhc2Ug
SGFzUHJpdmF0ZUJyYW5kOgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDFiNTFmZWEzM2Fj
ZjY5ZjUzZTA5NGE0ZTUwYThiNzBiYTZhYWE3MjYuLmYzODQ4YTQzZjdhYjI4ZGRkYzJjNDdkNGQw
NjI0MGM0MGUwZmY3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitK
U1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQq
IGppdCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFy
eShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdv
cmQpCi0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIo
aml0LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFs
dWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0
LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6
IG1fcGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkK
KyNlbmRpZgogewotICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAg
IG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAg
ICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBt
X3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJU
ZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5
KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkK
QEAgLTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFy
Q29kZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9j
dXJyZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
U3RyaW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2Rl
LCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQ
UlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IElu
dmFsaWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkg
ewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVz
dWx0VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1
bHRUYWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQp
ID0gcHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRK
UyA6IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmls
dGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQog
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJp
bmc6Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkK
ICAgICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVy
U3RyaW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBE
YXRhRm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdH
UFIoKSk7CiAjZW5kaWYKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0
ICsyNjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5n
KE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hT
dHJ1Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVj
dFByb3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0
aEdlbmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVS
ZWdzKHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9i
YWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhH
ZW5lcmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisg
ICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAg
ICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3Ry
aW5nSW50LAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotI2Vsc2UKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMs
IG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlm
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3Vs
dChzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAg
IH0gZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwor
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50
Tm9kZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJD
b2RlKE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3Bl
cnR5UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5
TG9hZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0
eXBlLCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVk
QXJyYXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVk
QXJyYXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAg
ICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9v
bCBpc1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOwor
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlm
IChzaG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJU
ZW1wb3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVy
VGhhbk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1f
aml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBl
cnM6OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCBy
ZXN1bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IWlzVUludDMyKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNT
aWduZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0
eXBlKSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3Bl
Y3VsYXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAg
ICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSog
bm9kZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIo
KSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVk
QXJyYXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdz
LCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAg
ICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5v
ZGUsIFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3By
KCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsK
KyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQz
Mik7CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAg
ZW1pdFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0g
ICAgbG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRS
ZWcsIHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29s
IGNhblNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9k
ZSwgcmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlM
b2FkUmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94
KTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFu
ZCgKQEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9S
ZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2Rl
LCBUeXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1Zh
bHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4
KQogewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJh
eShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAor
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsK
KwogICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9
IHJlc3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VS
ZWcsIHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFy
cmF5VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAg
ICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09
IERhdGFGb3JtYXRKUykgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1
bHRSZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAt
MzcwMyw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
RmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3Rk
Ojp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3Jt
YXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJn
Mih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIs
MjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0
cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBH
UFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9y
bWF0SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCksIGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJl
Z3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZh
bE9iamVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFy
ZzFHUFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUs
IGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihE
YXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFH
UFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjpp
Z25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9s
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJ
bnQzMlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29u
c3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRK
Uyk7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLmdwcigpOwogICAgIAogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtODA3OSwyMiArODA4Miwy
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50
cyhOb2RlKiBub2RlKQogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5v
ZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFy
Z3VtZW50cyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAvLyBUT0RPOiBBcmUgYm90aCBvZiB0aGVzZSBuZWNlc3Nh
cnk/PwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoMih0aGlzKTsKICAgICAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3Jh
dGNoLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gyLmdwcigpOwogICAg
IAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOworCisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkg
PSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKICAgICAKICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNl
dE9mU3RvcmFnZSgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwpAQCAtMTM0ODIsNiArMTM0
ODcsMzEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4U3RyaW5nKE5vZGUq
IG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSog
bm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1v
ZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsK
KworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQUlJlZyBtb2RlR1BS
ID0gbW9kZS5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3By
KCk7CisKKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIFJldXNl
LCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwg
bm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoMCkpKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaW5jcmVtZW50TG9vcDsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZTsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShu
b2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8
c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsKKworICAgICAgICAgICAgbV9qaXQu
bW92ZShpbmRleEdQUiwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgbW9kZUdQUik7CisKKyAgICAgICAgICAgIGluY3JlbWVudExvb3AgPSBtX2ppdC5sYWJlbCgp
OworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoLmdwcigp
KTsKKworICAgICAgICAgICAgaW5pdE1vZGUubGluaygmbV9qaXQpOworICAgICAgICAgICAgZG9u
ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gu
Z3ByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSk7CisgICAgICAgICAgICByZXR1
cm4gc3RkOjptYWtlX3BhaXIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICB9KSk7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpLmxpbmtUbyhpbmNyZW1lbnRMb29wLCAm
bV9qaXQpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBtX2ppdC5vcjY0
KHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNlbHNlCisgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3Mo
KTsKKworICAgICAgICAvLyBIYXMgdGhlIHNhbWUgc3RydWN0dXJlIGFzIHRoZSBlbnVtZXJhdG9y
LgorICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLmdwcigpLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpLCByZXN1bHRSZWdzLmdwcigpKSk7CisKKyAgICAgICAg
bV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAg
ICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBt
X2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpIDw8IDMyKSwgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpLCByZXN1bHRSZWdzLnRh
Z0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9k
ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UucmVncygpOwor
CisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3Mo
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhB
bmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3Ms
IGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BSKTsKKyAgICBtX2ppdC5leGNlcHRpb25D
aGVjaygpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleChOb2RlKiBu
b2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVwZGF0ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVncyA9IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdz
KCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYWlyUmVncy5wYXlsb2FkR1BSKCk7CisKKyAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CisKKyAgICBtX2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoc3RkOjpudW1lcmljX2xp
bWl0czx1aW50MzJfdD46Om1heCgpKSwgcGF5bG9hZEdQUiwgcmVzdWx0R1BSKTsKKworICAgIHN0
cmljdEludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKE5vZGUqIG5vZGUpCit7CisgICAg
SlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpT
VmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJS
ZWcgcGFpckdQUiA9IGlzNjRCaXQoKSA/IHBhaXJSZWdzLmdwcigpIDogcGFpclJlZ3MudGFnR1BS
KCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBpZiBjb25zdGV4cHIgKGlzNjRCaXQoKSkKKyAgICAg
ICAgbV9qaXQucnNoaWZ0NjQocGFpckdQUiwgVHJ1c3RlZEltbTMyKDMyKSwgcmVzdWx0R1BSKTsK
KyAgICBlbHNlCisgICAgICAgIG1faml0Lm1vdmUocGFpckdQUiwgcmVzdWx0R1BSKTsKKyAgICBt
X2ppdC5hbmQzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJh
dGlvbk1vZGVNYXNrKSwgcmVzdWx0R1BSKTsKKworICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
TmV4dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBpbmRleE9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIo
KSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvck9wZXJhbmQodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOworCisgICAgR1BSUmVnIGluZGV4ID0gaW5kZXhPcGVyYW5kLmdwcigpOwor
ICAgIEdQUlJlZyBtb2RlID0gbW9kZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIGVudW1lcmF0
b3IgPSBlbnVtZXJhdG9yT3BlcmFuZC5ncHIoKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0R1BSKHRoaXMpOworICAgIEdQUlJlZyByZXN1
bHQgPSByZXN1bHRHUFIuZ3ByKCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgcmVzdWx0LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHQsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAgRWRn
ZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5l
cmF0ZSA9IFsmXSAoR1BSUmVnIGJhc2VDZWxsR1BSKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3Vs
dDsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgR1BSUmVnIGluZGV4
R1BSOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgYmFkU3RydWN0dXJlU2xvd1BhdGg7CisKKyAgICAgICAgY29tcGlsZUdldEJ5VmFs
KG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihE
YXRhRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7CisgICAgICAgICAgICBFZGdlIHN0b3JhZ2VF
ZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBpZiAoc3RvcmFnZUVkZ2UpCisgICAgICAgICAg
ICAgICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0b3JhZ2VFZGdlKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2Rl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDUpKTsKKworICAgICAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAg
ICAgICAgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgICAgIGVudW1lcmF0b3JHUFIg
PSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwor
ICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAg
ICAgICAgICBib29sIGhhdmVTdG9yYWdlID0gISFzdG9yYWdlRWRnZTsKKyAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdG9yYWdlVGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VH
UFI7CisgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdlKSB7CisgICAgICAgICAgICAgICAgc3Rv
cmFnZVRlbXBvcmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlzLCBSZXVzZSwgZW51bWVyYXRvcik7Cisg
ICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3JhZ2VUZW1wb3JhcnkuZ3ByKCk7CisgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIo
KTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vdEZhc3ROYW1lZENh
c2VzOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRoaXMg
Y29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGFuIG9iamVjdC4KKyAgICAgICAgICAgIG5vdEZh
c3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKTsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRo
YXQgdGhlIGJhc2UgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ugd29uJ3QgZ2VuZXJhdGUgTmFtZWRN
b2RlIHByb3BlcnRpZXMgZm9yIG5vbi1vYmplY3RzLgorICAgICAgICAgICAgICAgIC8vIFRPRE86
IHB1dCBBc3NlcnQgaGVyZT8KKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1
cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Uga25vdyB0aGVyZSdzIG9ubHkgb25l
IHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBlbWJlZCBpdCBoZXJlLgorICAgICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAg
ICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0
byByZXByZXNlbnQgSW5kZXhlZCtOYW1lZD8KKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCkgPT0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAz
KS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGJhZFN0cnVjdHVyZVNsb3dQYXRoID0gYmFk
U3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbm90
RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKGJhZFN0cnVjdHVyZSk7CisKKyAgICAgICAgICAgICAgICAv
LyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgICAgICAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSkpOworCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUNlbGxHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0
UmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgICAg
ICAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIoc2NyYXRjaEdQUik7CisgICAgICAgICAgICAg
ICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRjaEdQUiwgc2NyYXRjaEdQUik7CisgICAg
ICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CisgICAgICAgICAgICAgICAgaW50MzJfdCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRl
cmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgZG9uZUNhc2Vz
LmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBub3RG
YXN0TmFtZWRDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0UmVncywgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgfSkpOworCisgICAgICAg
IC8vIFdlIHJlbHkgb24gY29tcGlsZUdldEJ5VmFsIHRvIGNhbGwganNWYWx1ZVJlc3VsdCBmb3Ig
dXMuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGtpbmRhIGhhY2t5Li4uCisgICAgICAgIEFT
U0VSVChnZW5lcmF0aW9uSW5mbyhub2RlKS5qc1ZhbHVlUmVncygpID09IHJlc3VsdFJlZ3MgJiYg
Z2VuZXJhdGlvbkluZm8obm9kZSkucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlMpOwor
CisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93UGF0aC5pc1NldCgpKQorICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGJhZFN0cnVjdHVyZVNsb3dQYXRoLCB0
aGlzLCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VDZWxsR1BSLCBpbmRleEdQUiwgZW51
bWVyYXRvckdQUikpOworCisgICAgICAgIGRvbmVDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgfTsK
KworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAgICAgICAvLyBVc2Ug
bWFudWFsIG9wZXJhbmQgc3BlY3VsYXRpb24gc2luY2UgRml4dXAgbWF5IGhhdmUgcGlja2VkIGEg
VXNlS2luZCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gQ2VsbFVzZS4KKyAgICAgICAgc3BlY3VsYXRl
KG5vZGUsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZU9wZXJh
bmQodGhpcywgYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIGdl
bmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJh
c2VPcGVyYW5kLmdwcigpKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRo
RnVuY3Rpb25UeXBlPgordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNQ
cm9wZXJ0eShOb2RlKiBub2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9u
KQoreworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwor
ICAgIGF1dG8gZ2VuZXJhdGUgPSBbJl0gKGF1dG8gYmFzZVJlZ3MsIEdQUlJlZyBiYXNlQ2VsbEdQ
UikgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eU5hbWUodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAzKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcHJv
cGVydHlOYW1lUmVncyA9IHByb3BlcnR5TmFtZS5yZWdzKCk7CisgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKworICAg
ICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQucmVncygpLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KGJhc2VFZGdlKS5tX3R5cGUgJiB+U3BlY0NlbGwpCisgICAgICAgICAgICBvcGVyYXRpb25DYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdzKSk7CisKKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlz
IG5vdCBhIGNlbGwuCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0
R1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsK
KworICAgICAgICBvcGVyYXRpb25DYXNlcy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzbG93UGF0aEZ1bmN0aW9uLCByZXN1
bHQucmVncygpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5
TmFtZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBibGVzc2VkQm9v
bGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgIH07CisKKyAgICBpZiAoaXNDZWxsKGJh
c2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UuZ3ByKCksIGJhc2UuZ3ByKCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVk
Z2UpOworICAgICAgICBnZW5lcmF0ZShiYXNlLnJlZ3MoKSwgYmFzZS5ncHIoKSk7CisgICAgfQor
fQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckluQnlWYWwoTm9kZSog
bm9kZSkKK3sKKyAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG5vZGUsIG9wZXJhdGlv
bkVudW1lcmF0b3JJbkJ5VmFsKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVtZXJh
dG9ySGFzUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5KTsK
K30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5SWRGbHVzaChOb2RlKiBub2Rl
KQogewogICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsKQEAgLTE0OTM0
LDI4ICsxNTI0NiwyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdB
cnJheVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgICAgICBzaXplR1BS
LCBzdG9yYWdlR1BSKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0
aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2Rl
KiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24sIGNvbnN0IFNjb3Bl
ZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KQogewogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAK
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0g
aW5kZXguZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBH
UFJSZWcgaW5kZXhHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJ
bnZhbGlkR1BSUmVnOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
ICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgIHN3aXRjaCAobW9k
ZS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICBjYXNlIEFycmF5OjpDb250
aWd1b3VzOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZElu
ZGV4KCkpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3Vs
dEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJv
dW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCkBA
IC0xNDk4MywxMiArMTUyOTUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICBBU1NFUlQo
ISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNT
RVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgp
KSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEZQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2gu
ZnByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAorICAg
ICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogCiAgICAg
ICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE1MDEyLDEzICsxNTMyNiwxNSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNf
SklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAK
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhH
UFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0
b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3Vu
ZHMoKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG91dE9mQm91bmRzKTsKQEAgLTE1MDQ3LDE0ICsxNTM2MywxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUs
IFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgLy8gRklYTUU6
IE9wdGltaXplIFR5cGVkQXJyYXlzIGluIEhhc0luZGV4ZWRQcm9wZXJ0eSBJQwogICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAg
IHN0ZDo6dGllKGluZGV4R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CiAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0K
IAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMs
IHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBiYXNlR1BSLCBpbmRleEdQUikpOwotCi0gICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RGlyZWN0
UG5hbWUoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAppbmRleCA5OGM3NjE2YjhmZDJmYmY1YzRkZDhhNTc3MTUwOGFkMjY3OWY5OWQx
Li41YmI2ZGUxYjllZjZjNjRjNzQ0ZGE1Nzc1OWFlNDQ2Y2FhNTgxOGExIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC00Nyw2ICs0Nyw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdQUlRlbXBvcmFyeTsK
K2NsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFz
cyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMjQ2LDYgKzI0
Nyw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgR1BSUmVnIGFsbG9jYXRlKEdQUlJlZyBzcGVjaWZp
YykKICAgICB7CisgICAgICAgIGlmIChzcGVjaWZpYyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAg
ICAgICAgYWxsb2NhdGUoKTsKICNpZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFM
SURBVElPTikKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxvY2F0aW9uQXRPZmZzZXQobV9q
aXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKQEAgLTEzNDUsMTIgKzEzNDgsMTUgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3Jhcnks
IG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICB9CiAgICAgCisgICAgLy8gV2UgdXNlIGEgc2NvcGVk
TGFtYmRhIHRvIHBsYWNhdGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2YWxpZGF0aW9uLgorICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KTsKKwogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSopOwotICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
T25TdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdz
LCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAg
IHZvaWQgY29tcGlsZUZyb21DaGFyQ29kZShOb2RlKik7IAogCi0gICAgdm9pZCBjb21waWxlR2V0
QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
blNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7Cisg
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRQcml2YXRl
TmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJpdmF0ZU5hbWVCeUlkKE5vZGUqKTsK
QEAgLTE0MjQsMTIgKzE0MzAsMTIgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1
bXBGb3JUeXBlZEFycmF5SXNEZXRhY2hlZElmT3V0T2ZCb3VuZHMoTm9kZSosIEdQUlJlZyBiYXNl
R1BSLCBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyk7CiAgICAgdm9pZCBlbWl0VHlwZWRB
cnJheUJvdW5kc0NoZWNrKE5vZGUqLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIGluZGV4R1BSKTsK
ICAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChOb2RlKik7Ci0gICAgdm9p
ZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsK
KyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJh
eVR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9y
bWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5
LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9h
dFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVkQXJy
YXlUeXBlKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9k
ZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKik7
CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKE5vZGUqLCBjb25z
dCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZv
cm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcoTm9kZSos
IEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYg
Y2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aFRoaXMo
Tm9kZSopOwpAQCAtMTQ1OCw3ICsxNDY0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIEVk
Z2UgdmFsdWVVc2UpOwogICAgIHZvaWQgbG9hZEZyb21JbnRUeXBlZEFycmF5KEdQUlJlZyBzdG9y
YWdlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlU
eXBlKTsKLSAgICB2b2lkIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqLCBHUFJSZWcg
cmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUpOworICAgIHZvaWQg
c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Ms
IFR5cGVkQXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSwgYm9vbCBzaG91bGRCb3gpOwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uQ29t
bW9uKEdQUlJlZywgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgR1BSUmVnLCBHUFJSZWcsIEdQUlJlZywg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Jiwgc2l6ZV90LCBGdW5jdGlvbkV4ZWN1dGFibGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU2V0
RnVuY3Rpb25OYW1lKE5vZGUqKTsKQEAgLTE1MjgsNiArMTUzNCwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZVRvSW5kZXhTdHJpbmcoTm9kZSopOworCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0
RXh0cmFjdE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFj
dEluZGV4KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5vZGUq
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lk
IGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoTm9kZSosIFNsb3dQYXRoRnVuY3Rpb25UeXBl
KTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKik7CisgICAgdm9pZCBj
b21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqKTsKKwogICAgIHZvaWQgY29tcGls
ZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7CkBAIC0xNTY4LDcgKzE1ODUsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQ2FsbE51bWJlckNvbnN0cnVjdG9yKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5UYWlsKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoTm9kZSosIFNfSklUT3BlcmF0aW9uX0dDWik7CisgICAgdm9pZCBj
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1osIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KTsKICAg
ICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
Q2xlYXJDYXRjaExvY2FscyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHJvZmlsZVR5cGUoTm9k
ZSopOwpAQCAtMTkzNyw2ICsxOTU0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IEpTVmFsdWVSZWdzKGdwcigpKTsKICAgICB9CisgICAgSlNWYWx1ZVJlZ3MgcmVncygpIHsgcmV0
dXJuIGpzVmFsdWVSZWdzKCk7IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgYm9vbCBp
c0RvdWJsZSgpIHsgcmV0dXJuIG1faXNEb3VibGU7IH0KIApAQCAtMTk2NSw3ICsxOTgzLDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIo
KSk7CiAgICAgfQogCi0gICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCkKKyAgICBH
UFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoID0gUGF5bG9hZFdvcmQpCiAgICAgewogICAg
ICAgICByZXR1cm4ganNWYWx1ZVJlZ3MoKS5ncHIod2hpY2gpOwogICAgIH0KQEAgLTIwMDMsMjEg
KzIwMjEsMjAgQEAgcHJpdmF0ZToKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBTdG9yYWdlT3BlcmFuZCgpID0gZGVmYXVs
dDsKKwogICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVk
Z2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAg
ICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIEFT
U0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
IHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlz
RmlsbGVkKG5vZGUoKSkpCi0gICAgICAgICAgICBncHIoKTsKKyAgICAgICAgZW1wbGFjZShqaXQs
IGVkZ2UpOwogICAgIH0KICAgICAKICAgICB+U3RvcmFnZU9wZXJhbmQoKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBtX2pp
dC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkICE9
IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlk
KTsKICAgICB9CiAgICAgCiAgICAgRWRnZSBlZGdlKCkgY29uc3QKQEAgLTIwMzYsNiArMjA1Mywx
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3Rv
cmFnZShlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQorCisg
ICAgdm9pZCBlbXBsYWNlKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKKyAgICB7Cisg
ICAgICAgIG1faml0ID0gaml0OworICAgICAgICBtX2VkZ2UgPSBlZGdlOworICAgICAgICBBU1NF
UlQobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VSVChtX2pp
dCk7CisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2Uu
dXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5v
ZGUoKSkpCisgICAgICAgICAgICBncHIoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQog
ICAgIHsKQEAgLTIwNDMsOSArMjA3MSw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRl
OgotICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQg
eyBudWxscHRyIH07CiAgICAgRWRnZSBtX2VkZ2U7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlk
OworICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZCB7IEludmFsaWRHUFJSZWcgfTsKIH07CiAKIApA
QCAtMjEzNCwxMSArMjE2MiwxOSBAQCBjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB7CiBwdWJs
aWM6CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFy
eShTcGVjdWxhdGl2ZUpJVCopOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZl
SklUKiwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZpY1Bh
eWxvYWQsIEdQUlJlZyBzcGVjaWZpY1RhZyk7CisjZW5kaWYKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1c2VUYWcs
IFQmIG9wZXJhbmQsIFdoaWNoVmFsdWVXb3JkIHJlc3VsdFJlZ1dvcmQgPSBQYXlsb2FkV29yZCk7
CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgSlNW
YWx1ZU9wZXJhbmQmKTsKICAgICB+SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gISFyZWdzKCk7IH0KKworICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5JiBvcGVyYXRvcj0oSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmJikgPSBkZWZh
dWx0OworCiAgICAgSlNWYWx1ZVJlZ3MgcmVncygpOwogCiBwcml2YXRlOgpAQCAtMjE1MCw2ICsy
MTg2LDI2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1
ZVdvcmQpCisgICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQoreworfQorI2Vsc2UKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1w
b3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdoaWNoVmFs
dWVXb3JkIHJlc3VsdFdvcmQpCit7CisgICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQp
IHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJh
bmQpOworICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgICAgICBtX3Rh
Z0dQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKKyAgICB9Cit9CisjZW5k
aWYKKwogY2xhc3MgRlBSVGVtcG9yYXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCmluZGV4IDlkNDAzNjk2MTBkODllNDFlNTE2ZjZjNGE0MjVlNWZkNzEw
MmExYmUuLjY1YjMyNDE1NTQwNWUwNDVjOTI0ZWRiZmNlNTExZWVhNTg0ZjM1MWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cApAQCAtMTgxMiw2ICsxODEyLDMzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29u
dGlndW91c1B1dEJ5VmFsKE5vZGUqIG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZQogICAgIG5v
UmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7ICAgIAogfQogCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgp
LnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAg
Y2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworI2lmIENPTVBJTEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQorICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpT
VmFsdWVSZWdzKCksIDApOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsK
KworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9n
cmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9
PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBjZWxs
LiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJv
cGVydHlSZWdzID0gcHJvcGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6
aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGws
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0
eVJlZ3MpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VS
ZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJl
Z3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZp
eChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0
LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRl
ZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BSKCkp
KTsKKworICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBiYXNlUmVncywg
cHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKKworICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVj
U3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0g
dHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wp
KQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwor
CisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAg
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJh
c2VSZWdzLCBwcm9wZXJ0eVJlZ3MpOworCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwg
c2xvd1BhdGguZ2V0KCkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNs
b3dQYXRoKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJy
YXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3Vu
ZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKwor
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsK
KyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRJbnQzMiA6IERh
dGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIGlmIChm
b3JtYXQgPT0gRGF0YUZvcm1hdEludDMyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpOworCisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIEpTVmFs
dWVSZWdzKCksIDAsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0
UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAg
IHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5
bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgcmVzdWx0LnBheWxvYWRHUFIoKSk7CisgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7Cisg
ICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElm
Tm90RW1wdHkocmVzdWx0LnRhZ0dQUigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHQudGFnR1BSKCkpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHQucGF5bG9hZEdQ
UigpKTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAg
ICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLAorICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdC50YWdHUFIoKSkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJl
Zml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisK
KyAgICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVn
cyk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRS
ZWdzLnRhZ0dQUigpKSk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAg
ICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVy
YXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAg
ICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRE
b3VibGUpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAg
IGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKQorICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2hJZk5hTihyZXN1bHQuZnByKCkpKTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQg
PT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICAgICAgYm94RG91YmxlKHJlc3VsdC5mcHIo
KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZv
cm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlICYmICFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgRlBSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKKworICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdz
LCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0KSwgdGVtcFJlZyk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVn
cyk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZh
bE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0g
cHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0
T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVj
dG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJl
c3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJv
bUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50
YWdHUFIoKSkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Cisg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwor
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3Jt
YXRKUyk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5i
cmFuY2gzMigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOworCisgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdH
UFIoKSk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhvbGUgPSBtX2ppdC5icmFuY2hJZkVt
cHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9s
ZSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhD
YWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxP
YmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksCisgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0
cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpEaXJl
Y3RBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5v
ZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3Vt
ZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSwgcHJl
Zml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDogeworICAgICAgICBUeXBlZEFycmF5
VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAg
aWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgfSB9
Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIHsKICAgICBO
b2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CkBAIC0yMjMzLDcgKzI1NjIsMTIgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6
IHsKICAgICAgICAgLy8gUmVsaWVzIG9uIFN0cmluZ0NoYXJBdCBub2RlIGhhdmluZyBzYW1lIGJh
c2ljIGxheW91dCBhcyBHZXRCeVZhbAotICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhu
b2RlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21w
aWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPihbJl0gKERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgJiBE
YXRhRm9ybWF0SlMpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5y
ZWdzKCksIHByZWZlcnJlZEZvcm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC0yMjY1LDMyNiArMjU5OSwyNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBz
d2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgotICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2lmIENPTVBJTEVSX1FV
SVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQotICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNvdmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsK
LSNlbmRpZgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRl
ZDogewotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdFRhZyh0aGlzLCBSZXVzZSwgaW5kZXgpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGlu
ZGV4LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5n
cHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9h
ZC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgbm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDApKSk7Ci0KLSAgICAgICAgICAgIHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
LSAgICAgICAgICAgIGluZGV4LnVzZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0VGFn
R1BSKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRh
aW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5n
KG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBj
ZWxsLiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAg
ICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJvcGVydHkuanNWYWx1ZVJlZ3MoKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdz
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlSZWdzKTsKLSAg
ICAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShu
b2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLQotICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2Us
IHByb3BlcnR5LCBUYWdXb3JkKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXls
b2FkKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwgUGF5bG9hZFdvcmQpOwotCi0gICAgICAgICAgICBK
U1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIEpT
VmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9h
ZC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9y
aWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2pp
dC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVk
ZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkK
LSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChi
YXNlUmVncy50YWdHUFIoKSkpOwotCi0gICAgICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBn
ZW4oCi0gICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwg
Y29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJz
LAotICAgICAgICAgICAgICAgIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIElu
dmFsaWRHUFJSZWcpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAg
ICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwotCi0gICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1Bh
dGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlUmVncywgcHJvcGVydHlSZWdzKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQo
KSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7
Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
LSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWlu
KCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxvYWRPZmZzZXQpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAg
ICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRUYWcuZ3ByKCkp
OwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpV
bmRlZmluZWRUYWcpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAg
ICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFz
ZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2Fk
KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIo
KTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKLQotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0
VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9h
ZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQ
YXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOwotICAgICAgICAgICAgICAgIGRv
dWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAg
ICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVt
cFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRl
bXBSZWcpKTsKLSAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRUYWdSZWcsIHJl
c3VsdFBheWxvYWRSZWcpOwotCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywg
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6
IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAg
ICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAg
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5
U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAw
LCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAg
ICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBqc1ZhbHVlUmVzdWx0OworICAgICAgICBHUFJUZW1w
b3Jhcnkgb25lUmVnUmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN3aXRjaCAocHJlZmVy
cmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRJbnQzMjoKKyAgICAg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6CisgICAgICAgICAgICAgICAgb25lUmVnUmVzdWx0
LmVtcGxhY2UodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
OjpwYXlsb2FkT25seShvbmVSZWdSZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgZGVmYXVsdDog
eworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpT
KTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0LmVtcGxhY2UodGhpcyk7CisgICAgICAg
ICAgICAgICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MikpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcu
Z3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxv
YWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0g
bV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0g
bV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5
bG9hZFJlZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsK
LSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0g
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9h
ZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAgICAgICBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRp
cmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3Bl
ZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAg
ICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxMzMsMTEgKzQxNjYs
MTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkp
OworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5v
ZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIo
KSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBpbmRleCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVy
YXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluZGV4Lmdw
cigpLCByZXN1bHQuZ3ByKCkpOyB9KSk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0
RGlyZWN0UG5hbWU6IHsKQEAgLTQxNTcsNiArNDE5OCw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RNb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RJbmRleChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5l
eHRVcGRhdGVQcm9wZXJ0eU5hbWUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0
QnlWYWwobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRv
ckluQnlWYWw6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTog
eworICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CiAgICAgICAgIGNvbXBp
bGVQcm9maWxlVHlwZShub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAyZWE5NTE3N2I5YmY0
NTY4NzE5NWJhM2RjYWJhZmI0YWVkZTcwNmQ1Li42ZTFiMzJiMjFmNDIzYTVhYzEyOTlkNzg5YjQ1
MGRkNzI1YTRlMzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTIyNDUsNiArMjI0NSwzNzAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1h
dCk+JiBwcmVmaXgpCit7CisgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKKyAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoKKyAgICBjYXNlIEFycmF5
OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6Cisg
ICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUgdHlw
ZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKKyAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsK
KworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJl
c3VsdFJlZ3MuZ3ByKCkpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5
OgorICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6IHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkp
IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQo
KSA9PSBPYmplY3RVc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5
bWJvbChub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBi
YXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6
aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKKyAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHN0dWJJbmZvOworICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkRGR0pJVCkpIHsKKyAgICAgICAgICAgIHN0dWJJbmZvID0gR1BSVGVtcG9yYXJ5KHRoaXMpOwor
ICAgICAgICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAg
ICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworCisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJl
Z3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdP
U1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKCFtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpKTsKKworICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUo
U3BlY0ludDMyT25seSkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKworICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6REZHSklUKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNs
b3dQYXRoOworICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkp
IHsKKyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgICAg
ICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dQYXRo
ID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0
KCkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91
czogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9ybWF0SlMp
OworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxw
dHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyk7CisgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIG5vdEhvbGUu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dCwgbm9kZSwgZm9ybWF0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAg
IEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVz
dWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCksIHJlc3VsdFJlZyk7CisKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZC
b3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuYnJhbmNo
SWZOb3RFbXB0eShyZXN1bHRSZWcpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBw
cm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHRSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZykpOworICAgICAgICB9CisKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkRv
dWJsZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQu
ZnByKCk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZv
cm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2Fk
RnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3Vs
dFJlZykpOworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAg
ICAgICAgICAgICBib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYg
IXJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5v
ZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHJlc3VsdElzVW5ib3hlZCA9IG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHNTYW5lQ2hhaW4oKSAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhl
cik7CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAg
IEZQUlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgc3RkOjp0aWUocmVz
dWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChyZXN1bHRJc1VuYm94ZWQgPyBEYXRhRm9ybWF0RG91
YmxlIDogRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
KworICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJl
Zyk7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWlu
KCkpIHsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAg
ICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBO
YU47CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4p
LCB0ZW1wUmVnKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIXJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3Vs
dCh0ZW1wUmVnLCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgICAg
ICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAg
ICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJ
bmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAg
ICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncy5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRl
bXBSZWcpKTsKKyAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncy5ncHIo
KSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Cisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAg
ICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
ICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigp
OworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworCisgICAgICAgICAgICBtX2ppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUs
IEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSk7
CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJl
Zml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdz
LmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisK
KyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICBt
X2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aElmRW1wdHkocmVzdWx0UmVnKSk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWcs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25T
dHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGly
ZWN0QXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhu
b2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHBy
ZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJh
eToKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6Rmxv
YXQ2NEFycmF5OiB7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1v
ZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsK
QEAgLTI3MTIsNyArMzA3NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24g
U3RyaW5nQ2hhckF0IG5vZGUgaGF2aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0g
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAg
ICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlMgfHwgcHJlZmVycmVk
Rm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjc0NSwzNDUgKzMxMTQsMjAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6
IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBBcnJheTo6QW55VHlwZWRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0
OgotICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoKLSAgICAgICAgY2Fz
ZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICAgICAgY2FzZSBBcnJheTo6VW5w
cm9maWxlZDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFk
IGFycmF5IG1vZGUgdHlwZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVuZGVjaWRlZDogewotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOwotICAgICAgICAgICAgR1BS
UmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7Ci0KLSAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCks
IHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkJpZ1VpbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9
PSBPYmplY3RVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09
IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9y
T2JqZWN0V2l0aFN5bWJvbChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVy
dHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICAgICAgICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0
LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gc3R1YkluZm87Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgcHJvcGVydHkp
OwotCi0gICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOwotICAg
ICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Ci0gICAg
ICAgICAgICAgICAgc3R1YkluZm8uZW1wbGFjZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBzdHVi
SW5mb0dQUiA9IHN0dWJJbmZvLT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOwotCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICgh
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVj
Q2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZUdQUikpOwotCi0gICAgICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAot
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKLQotICAgICAgICAg
ICAgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5
cGUoU3BlY1N0cmluZykpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNTdHJpbmcgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aChtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChnZW4uc2xvd1BhdGhKdW1wKCkpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xv
d1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOwotICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aElDQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1
YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3Jp
Z2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikp
LCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4s
IHNsb3dQYXRoLmdldCgpKTsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1v
dmUoc2xvd1BhdGgpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdz
KCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFy
cmF5OjpDb250aWd1b3VzKTsKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0LmdwcigpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbm90SG9sZS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9s
ZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBub2RlLT5hcnJheU1v
ZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9y
bWF0SlMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCks
IHJlc3VsdFJlZyk7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5i
cmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxp
bmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5k
ZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7Ci0g
ICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIHJlc3Vs
dFJlZyA9IHJlc3VsdC5mcHIoKTsKLQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0K
LSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwg
cmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhM
b2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJl
c3VsdFJlZykpOwotICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBi
b29sIHJlc3VsdElzVW5ib3hlZCA9IG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5l
Q2hhaW4oKSAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcik7Ci0K
LSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
LSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jh
cnk+IHJlc3VsdDsKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSUmVnPiByZXN1bHRSZWc7
Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdElzVW5ib3hlZCkgewotICAgICAgICAgICAgICAgIHJl
c3VsdC5lbXBsYWNlKHRoaXMpOwotICAgICAgICAgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdC0+
Z3ByKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKLSAgICAgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwot
Ci0gICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVt
cFJlZyk7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1Nh
bmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdElzVW5ib3hlZCkgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBOYU4gPSBQTmFOOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91Ymxl
KFRydXN0ZWRJbW1QdHIoJk5hTiksIHRlbXBSZWcpOwotICAgICAgICAgICAgICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHRlbXBSZWcs
IG5vZGUpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOwotICAgICAgICAgICAg
ICAgICAgICBib3hEb3VibGUodGVtcFJlZywgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhO
ZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigwKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksICpyZXN1bHRSZWcp
OwotICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOwotICAgICAgICAgICAgICAgIGJveERvdWJsZSh0
ZW1wUmVnLCAqcmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICpyZXN1bHRSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
KnJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICBj
YXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVj
dG9yT2Zmc2V0KCkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdC5ncHIoKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBv
cmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbChub2RlLCBzY29wZWRMYW1iZGE8
c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRG
b3JtYXQpPihbJl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3dpdGNoIChwcmVmZXJyZWRGb3Jt
YXQpIHsKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
cHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0
YUZvcm1hdEludDMyKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBv
cmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsK
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJl
ZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdFJl
Zyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVz
dWx0UmVnKSk7Ci0gICAgCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
LCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlN0cmluZzoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAgY2Fz
ZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAg
ICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhD
bGFtcGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICBj
YXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5
OgotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6IHsKLSAgICAgICAgICAgIFR5cGVk
QXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwotICAg
ICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKLSAg
ICAgICAgfSB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKHJlc3VsdFJlZ3MsIHByZWZlcnJlZEZvcm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0zNTgwLDcgKzM2MjQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSBmYWxzZTsKLSAgICAgICAgc2V0SW50
VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0R1BSLCB0eXBlLCBjYW5TcGVjdWxhdGUp
OworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRCb3ggPSBmYWxzZTsKKyAgICAgICAgc2V0
SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgdHlw
ZSwgY2FuU3BlY3VsYXRlLCBzaG91bGRCb3gpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIApAQCAtNTI5MCwxMSArNTMzNSwxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOworCisgICAgICAgIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5LCBz
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKGluZGV4LmdwcigpLCByZXN1bHQuZ3ByKCkpOyB9KSk7CisgICAgICAgIHVu
Ymxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewotICAgICAg
ICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5k
ZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHks
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4g
c3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewpAQCAtNTMxNCw2ICs1MzY3LDQy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29t
cGlsZVRvSW5kZXhTdHJpbmcobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNh
c2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgY29t
cGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgY29t
cGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAg
ICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAgICBjb21waWxlRW51bWVy
YXRvckluQnlWYWwobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51
bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgUHJvZmls
ZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBiZWYx
ZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRkMDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVrZVN0
cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZs
eToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAg
ICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6
CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAgLTM1Miw2ICszNTMsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgICAg
IGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIEdl
dEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAg
ICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlW
YWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5kZXgg
MmUyZjA3ZGZjN2U4YzEzZGRiMGVkZDVhMmQwN2E1ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcyMzBl
MGUxYmQ0NDVmMzA2MjM0MzdmY2Q2MzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTExNCw2ICsxMTQsNyBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAg
ICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9k
ZVNldE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVTdHJp
bmc6Om9mZnNldE9mRmxhZ3MoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19sZW5ndGgsIEpT
Um9wZVN0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19m
aWJlcjAsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGExYTVmZDI0NGNmMjExMDMy
NjQxOTdhNzZhZTMwYzdmNjBmNzllNjQuLjZlNWQxMGQ0MzM3YzdhM2RhNjEyM2IzNTBlNjhlMjc5
ZjEwYjViNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAKQEAgLTI5OCw2ICsyOTgsMTMgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6CiAg
ICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0cmlu
ZzoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgIGNhc2Ug
RW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFj
dEluZGV4OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAg
Y2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAg
ICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEJvdHRvbVZhbHVlOgog
ICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCAx
YzJkZDk1NTU0YjJmNDVkZjk1MTRkYzg3MTQxY2UzZjJkMDYzZGRhLi5iNmMzZmMzYmYwOGFlM2Fj
NGZiODBmOWZlNDE1ZDM3NTIxOTlkZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMDIsNiArMTAyLDggQEAKICNpbmNsdWRlIDx3dGYv
UmVjdXJzYWJsZUxhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRVbm9yZGVyZWRTZXQuaD4KIAor
I2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgorCiAjdW5kZWYgUkVMRUFTRV9BU1NFUlQKICNkZWZp
bmUgUkVMRUFTRV9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKICAgICBpZiAoIShhc3NlcnRpb24p
KSB7IFwKQEAgLTE1NTgsNiArMTU2MCwyNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFRvSW5k
ZXhTdHJpbmc6CiAgICAgICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6
CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdElu
ZGV4OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2Rl
OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlO
YW1lOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1l
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6
CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9ySW5CeVZhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTAyMCw3ICs1MDQzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gd2UgZG9taW5hdGUgdGhlbS4KICAgICB9CiAgICAgCi0gICAgdm9pZCBj
b21waWxlR2V0QnlWYWwoKQorICAgIExWYWx1ZSBjb21waWxlR2V0QnlWYWxJbXBsKCkKICAgICB7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkpIHsKQEAgLTUwNDcsOCArNTA3MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGlu
IHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAgICAgICBlbnN1cmVT
dGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RDYXNlID0gbV9v
dXQubmV3QmxvY2soKTsKQEAgLTUwODAsOCArNTEwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFn
ZSBhbGl2ZS4KICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBB
cnJheTo6Q29udGlndW91cykKICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShi
YXNlKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewpAQCAtNTEwMCw4ICs1MTIx
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgbm9W
YWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91YmxlTm90
RXF1YWxPclVub3JkZXJlZChyZXN1bHQsIHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbV9ub2RlLT5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzU2FuZUNoYWluKCkgJiYgIShtX25vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2Vz
QXNPdGhlcik7CkBAIC01MTQxLDE4ICs1MTYyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAg
ICAgICAgICAgaWYgKHJlc3VsdElzVW5ib3hlZCkKLSAgICAgICAgICAgICAgICBzZXREb3VibGUo
bV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVz
dWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShEb3VibGUsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworCisgICAg
ICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsK
ICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogewogICAgICAgICAg
ICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEp
KTsKIAogICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCksIG1fbm9k
ZSwgbV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSk7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQ2NChK
U1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKQEAgLTUxNjksOCArNTE4OCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCks
IG51bGxwdHIsIGlzT3V0T2ZCb3VuZHMpOwogICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRlciBh
ZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLkRp
cmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSk7Ci0g
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzcykpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZDY0KGFk
ZHJlc3MpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5k
cyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01MTkyLDggKzUyMTAsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBz
bG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6
OlNjb3BlZEFyZ3VtZW50czogewpAQCAtNTI0Niw4ICs1MjYzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93UmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0
LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAK
ICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKQEAgLTUyNTYsMjQgKzUyNzIsMjEg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRh
aW5zKG1fbm9kZSkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3RyaW5nLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTdHJpbmcobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MCkpLCBsb3dTdHJpbmcobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RTeW1ib2wsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKSksIGxvd1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N5bWJvbChtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAg
ICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgICAgIEludDY0LCBv
cGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAg
ICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dK
U1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDApKSwgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MSkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9kZTsK
QEAgLTUzNzMsOCArNTM4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSk7CiAgICAg
ICAgICAgICB9KTsKIAotICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBwYXRjaHBvaW50OwogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgpAQCAtNTM5MCw4ICs1NDAyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwogICAgICAgICAgICAgICAg
IC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdl
IGFsaXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTQxNywx
MyArNTQyOCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBh
bGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
SW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOiB7
Ci0gICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0KCk7Ci0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKQEAgLTU0NDgs
OSArNTQ1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBsb2FkRnJvbUludFR5cGVkQXJyYXkocG9pbnRlciwgdHlwZSk7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMgc3RvcmFn
ZSBhbGl2ZS4KICAgICAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KHJlc3VsdCwg
dHlwZSwgY2FuU3BlY3VsYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKQEAgLTU0NjksOCAr
NTQ3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8g
V2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZl
LgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAg
ICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAg
LTU0ODAsOCArNTQ4NiwyNCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RV
c2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgogICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBjb21waWxlR2V0
QnlWYWxJbXBsKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBtX25vZGUtPmFycmF5
TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkgeworICAg
ICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKKyAgICAgICAgICAg
IHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KHJlc3VsdCwgdHlwZSwgY2FuU3BlY3VsYXRlKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQtPnR5
cGUoKSA9PSBEb3VibGUpCisgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtODU3MSw3ICs4NTkzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIGVt
cHR5UmVzdWx0LCBzbG93UmVzdWx0KSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZVN0
cmluZ0NoYXJBdCgpCisgICAgTFZhbHVlIGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKCkKICAgICB7
CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93U3RyaW5nKG1fZ3JhcGguY2hpbGQobV9ub2RlLCAw
KSk7CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGguY2hpbGQobV9ub2Rl
LCAxKSk7CkBAIC04Njc5LDcgKzg3MDEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2Vl
cCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMgc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKElu
dDY0LCByZXN1bHRzKSk7CisgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIHJlc3VsdHMp
OworICAgIH0KKworICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJBdCgpCisgICAgeworICAgICAg
ICBzZXRKU1ZhbHVlKGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKCkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCkKQEAgLTEyOTA2LDE3ICsxMjkzMywxNiBA
QCBwcml2YXRlOgogICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIpOwogICAgIH0KICAgICAK
LSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoU19KSVRPcGVyYXRpb25fR0NaIHNs
b3dQYXRoT3BlcmF0aW9uKQorICAgIExWYWx1ZSBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1w
bChMVmFsdWUgaW5kZXgsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbikKICAg
ICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwotICAgICAgICBMVmFsdWUgaW5k
ZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogICAgICAgICBB
cnJheU1vZGUgbW9kZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCk7CiAKICAgICAgICAgc3dpdGNoICht
X25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
ICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgTFZhbHVlIHN0
b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAg
ICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogCiAgICAgICAgICAgICBJbmRl
eGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8KICAg
ICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmlu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKQEAgLTEyOTUxLDExICsxMjk3NywxMCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIs
IGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBB
cnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2Uo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9y
YWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEluZGV4ZWRBYnN0
cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzOwogICAgICAg
ICAgICAgCkBAIC0xMjk4OSwxMiArMTMwMTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBjaGVja0hv
bGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2Uo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9y
YWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMzAyNiwxNyArMTMwNTAsMjEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNoZWNrSG9s
ZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OiB7Ci0g
ICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIHNsb3dQ
YXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCkpKTsK
LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82NCh2
bUNhbGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3Qp
LCBiYXNlLCBpbmRleCkpOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lk
IGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3Bl
cmF0aW9uKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgc2V0Qm9vbGVhbihjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5SW1wbChpbmRleCwgc2xvd1BhdGhPcGVyYXRpb24pKTsKKyAgICB9CisKICAg
ICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3Jp
Z2luLnNlbWFudGljKTsKQEAgLTEzMjE3LDYgKzEzMjQ1LDI0NyBAQCBwcml2YXRlOgogICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgc2V0
SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGluZGV4KSk7CiAgICAgfQorCisgICAgdm9pZCBjb21waWxlRW51bWVy
YXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFu
dGljKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0Nl
bGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKworICAgICAgICBpZiAobV9ub2Rl
LT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9u
b2RlLCBtX291dC5ub3RaZXJvMzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSkpOworCisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpbmNyZW1lbnQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY2hlY2tIYXNQcm9wZXJ0eSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwor
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5kZXggPSBtX291dC5hbmNob3Io
aW5kZXgpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5pdGlhbEluZGV4Rm9ySGFzUHJv
cGVydHkgPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmlzWmVybzMyKG1vZGUpLCB1bnN1cmUoY2hlY2tIYXNQcm9wZXJ0eSksIHVuc3VyZShpbmNy
ZW1lbnQpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5jcmVtZW50KTsKKyAgICAg
ICAgICAgIExWYWx1ZSBpbmRleFBoaSA9IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4KTsK
KyAgICAgICAgICAgIExWYWx1ZSBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYWRkKGluZGV4UGhp
LCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNyZW1lbnRl
ZEluZGV4UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgZmluYWxJbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKGlu
Y3JlbWVudGVkSW5kZXgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lmxlc3NUaGFu
KGluY3JlbWVudGVkSW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCkpLCB1bnN1cmUoY2hlY2tIYXNQcm9wZXJ0
eSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y2hlY2tIYXNQcm9wZXJ0eSk7CisgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHlJbmRleCA9IG1f
b3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4Rm9ySGFzUHJvcGVydHksIGluY3JlbWVudGVkSW5k
ZXhSZXN1bHQpOworICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShpbmRleFBoaSwg
bV9vdXQuYW5jaG9yKHByb3BlcnR5SW5kZXgpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGZpbmFsUHJvcGVydHlJbmRleCA9IG1fb3V0LmFuY2hvcihwcm9wZXJ0eUluZGV4KTsKKyAgICAg
ICAgICAgIExWYWx1ZSBoYXNQcm9wZXJ0eSA9IGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJbXBs
KHByb3BlcnR5SW5kZXgsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGhhc1Byb3BlcnR5LCB1bnN1cmUoY29udGludWF0aW9u
KSwgdW5zdXJlKGluY3JlbWVudCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIGZpbmFsSW5kZXggPSBtX291dC5waGkoSW50
MzIsIGZpbmFsSW5jcmVtZW50ZWRJbmRleCwgZmluYWxQcm9wZXJ0eUluZGV4KTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQuemVyb0V4dChmaW5hbEluZGV4LCBJbnQ2
NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIDw8IDMyKSkpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgRWRnZSYgYmFzZUVkZ2Ug
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAgIGlmIChtX25vZGUtPmVu
dW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2Rl
ICYmIGJhc2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICBMVmFsdWUg
YmFzZSA9IGxvd0NlbGwoYmFzZUVkZ2UpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hl
LCBub1ZhbHVlKCksIG1fbm9kZSwgbV9vdXQubm90RXF1YWwobV9vdXQubG9hZDMyKGJhc2UsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVh
cHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSkpOworCisgICAg
ICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5ub3RF
cXVhbChtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfbW9kZVNldCksIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluY3JlbWVudCA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5k
ZXggPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmlzWmVybzMyKG1vZGUpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGluY3JlbWVudCkp
OworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgaW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFuY2hvcihtX291dC5hZGQo
aW5kZXgsIG1fb3V0LmludDMyT25lKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4LCBpbmNyZW1lbnRl
ZEluZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQuemVyb0V4
dChpbmRleCwgSW50NjQpLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkg
PDwgMzIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBMVmFs
dWUgYmFzZSA9IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7Cisg
ICAgfQorCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKQorICAg
IHsKKyAgICAgICAgTFZhbHVlIGJveGVkUGFpciA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEo
KSk7CisKKyAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRvSW50MzIoYm94ZWRQYWlyKSk7Cisg
ICAgfQorCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpCisgICAg
eworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KTsKKworICAgICAgICBMVmFsdWUgaGlnaEJpdHMgPSBtX291dC5jYXN0VG9JbnQzMihtX291dC5s
U2hyKGJveGVkUGFpciwgbV9vdXQuY29uc3RJbnQzMigzMikpKTsKKyAgICAgICAgc2V0SW50MzIo
bV9vdXQuYml0QW5kKGhpZ2hCaXRzLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBtZXRob2Qgb2YgdmFsdWUgcmVjb3ZlcnkgZm9yIHRo
aXMgbm9kZSBzaW5jZSBpdCdzICJlZmZlY3QiIGZyZWUgYnV0IGFsd2F5cyBsaXZlIGluIGJ5dGVj
b2RlLgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKCkK
KyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQs
IG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcikpOworICAgIH0KKworICAgIHZv
aWQgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCisgICAgeworICAgICAgICBFZGdlIGJhc2VF
ZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICBFZGdlIHByb3Bl
cnR5TmFtZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSk7CisgICAgICAgIEVk
Z2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMik7CisgICAgICAg
IEVkZ2UgaW5kZXhFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpOworCisgICAg
ICAgIExWYWx1ZSBiYXNlID0gREZHOjppc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSA/IGxvd0Nl
bGwoYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikgOiBsb3dKU1ZhbHVlKGJhc2VF
ZGdlKTsKKworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IHN0b3JhZ2VFZGdlID8gbG93U3RvcmFn
ZShzdG9yYWdlRWRnZSkgOiBudWxscHRyOworICAgICAgICAvLyBXZSBoYXZlIHRvIG1hdGVyaWFs
aXplIHRoZSBwcm9wZXJ0eU5hbWUgaGVyZSBpbiBjYXNlIGl0IHJlcXVpcmVzIGJveGluZyBzaW5j
ZSB0aGUgSUMgcGF0aCB3b24ndCBkb21pbmF0ZSBzdWJzZXF1ZW50IHVzZXMgaW4gc3Vic2VxdWVu
dCBub2Rlcy4KKyAgICAgICAgLy8gSWYgaXQncyBhbiBJbnQzMiBhbmQgd2UgdXNlIGl0IGFzIHN1
Y2ggdGhpcyBib3hpbmcgd2lsbCBiZSBEQ0UnZCBieSBiMyBsYXRlciBhbnl3YXkuCisgICAgICAg
IGxvd0pTVmFsdWUocHJvcGVydHlOYW1lRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KworCisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKGluZGV4RWRnZSk7CisgICAgICAg
IExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsK
KyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCA1KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tTdHJ1Y3R1cmVCbG9jayA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrSW5saW5lT3JPdXRP
ZkxpbmVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlubGlu
ZUxvYWRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG91dE9m
TGluZUxvYWRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGdl
bmVyaWNJQ0Jsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUgaXNOb3ROYW1l
ZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpH
ZW5lcmljTW9kZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROYW1lZCwgdW5zdXJlKGdl
bmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNrU3RydWN0dXJlQmxvY2spKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgLy8gVE9ETyBjaGVj
ayBjZWxsPworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8gc3RydWN0
dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUub25seVN0
cnVjdHVyZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlKQorICAgICAgICAgICAgc3RydWN0dXJl
SUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKTsKKworICAgICAgICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVjdHVyZSA9
IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFw
cy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKKworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdDsKKyAgICAgICAgaWYg
KGluZGV4RWRnZS5ub2RlKCkgPT0gcHJvcGVydHlOYW1lRWRnZS5ub2RlKCkpIHsKKyAgICAgICAg
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBiYWRTdHJ1Y3R1
cmVTbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBtX291dC5icmFuY2go
aGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxv
Y2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oYmFkU3RydWN0dXJlU2xvd1BhdGgpOworICAgICAgICAgICAgYmFkU3RydWN0dXJlU2xvd1Bh
dGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9y
UmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwg
aW5kZXgsIGVudW1lcmF0b3IpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX291dC5i
cmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZM
aW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spOworICAgICAgICBMVmFsdWUgaW5saW5l
Q2FwYWNpdHkgPSBudWxscHRyOworICAgICAgICBib29sIGhhc05vT3V0T2ZMaW5lUHJvcGVydGll
cyA9IGZhbHNlOworICAgICAgICBpZiAoc3RydWN0dXJlKSB7CisgICAgICAgICAgICBoYXNOb091
dE9mTGluZVByb3BlcnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOworICAg
ICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpbmxpbmVDYXBhY2l0eSkK
KyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KTsKKyAg
ICAgICAgTFZhbHVlIGlzSW5saW5lID0gaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID8gbV9vdXQu
aW50MzJPbmUgOiBtX291dC5iZWxvdyhpbmRleCwgaW5saW5lQ2FwYWNpdHkpOworICAgICAgICBt
X291dC5icmFuY2goaXNJbmxpbmUsIHVuc3VyZShpbmxpbmVMb2FkQmxvY2spLCB1bnN1cmUob3V0
T2ZMaW5lTG9hZEJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5saW5lTG9hZEJs
b2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KAorICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3Bl
cnRpZXMuYXRBbnlOdW1iZXIoKSwKKyAgICAgICAgICAgICAgICBiYXNlLCBtX291dC56ZXJvRXh0
KGluZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3Jh
Z2UoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG91dE9mTGluZUxvYWRCbG9jayk7CisgICAgICAgIGlmICghc3RvcmFnZSkK
KyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKKworICAgICAgICBMVmFsdWUgcmVhbEluZGV4ID0gbV9vdXQuc2lnbkV4
dDMyVG82NCgKKyAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIGlubGluZUNh
cGFjaXR5KSkpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkxp
bmVSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQu
YmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBzdG9yYWdlLCByZWFs
SW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSkpKTsKKyAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGdlbmVyaWNJ
Q0Jsb2NrKTsKKyAgICAgICAgTFZhbHVlIGdlbmVyaWNSZXN1bHQgPSBjb21waWxlR2V0QnlWYWxJ
bXBsKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBtX25vZGUtPmFycmF5TW9kZSgp
LnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAgICAg
ICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgNCB8fCBpc1NpZ25lZCh0eXBlKSkKKyAgICAgICAg
ICAgICAgICBnZW5lcmljUmVzdWx0ID0gYm94SW50MzIoZ2VuZXJpY1Jlc3VsdCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IHN0cmljdEludDUyVG9K
U1ZhbHVlKGdlbmVyaWNSZXN1bHQpOworICAgICAgICB9IGVsc2UgaWYgKGdlbmVyaWNSZXN1bHQt
PnR5cGUoKSA9PSBEb3VibGUpCisgICAgICAgICAgICBnZW5lcmljUmVzdWx0ID0gYm94RG91Ymxl
KGdlbmVyaWNSZXN1bHQpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGdlbmVyaWNJQ1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcihnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJQ1Jlc3VsdCwgb3V0
T2ZMaW5lUmVzdWx0LCBpbmxpbmVSZXN1bHQpOworICAgICAgICBpZiAoYmFkU3RydWN0dXJlU2xv
d1BhdGhSZXN1bHQpCisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHJlc3VsdCwg
YmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cisg
ICAgdm9pZCBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KFNsb3dQYXRoRnVuY3Rpb25UeXBl
IHNsb3dQYXRoRnVuY3Rpb24pCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOworICAg
ICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAg
ICAgICBMVmFsdWUgYmFzZSA9IGJhc2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlID8gbG93Q2Vs
bChiYXNlRWRnZSkgOiBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAgICAgICAgTFZhbHVlIHByb3Bl
cnR5TmFtZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDIpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMykpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc05hbWVk
QmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxCbG9j
ayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG1hdGNoZXNTdHJ1Y3R1
cmVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJhdGlv
bkJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQudGVz
dE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6TmFtZWRNb2RlKSksIHVuc3VyZShpc05hbWVkQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxv
Y2spKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNOYW1lZEJsb2NrKTsKKworICAgICAgICBt
X291dC5icmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5cGUoYmFzZUVkZ2UpKSwgdW5zdXJlKGlz
Q2VsbEJsb2NrKSwgdW5zdXJlKG9wZXJhdGlvbkJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaXNDZWxsQmxvY2spOworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5s
b2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBt
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAg
ICAgICAgICAgdXN1YWxseShtYXRjaGVzU3RydWN0dXJlQmxvY2spLCByYXJlbHkob3BlcmF0aW9u
QmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhtYXRjaGVzU3RydWN0dXJlQmxvY2sp
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBuYW1lZFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhvcGVyYXRpb25CbG9jayk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG9wZXJhdGlvblJlc3VsdCA9IG1fb3V0LmFuY2hvcih1bmJveEJvb2xlYW4odm1DYWxsKElu
dDY0LCBzbG93UGF0aEZ1bmN0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBw
cm9wZXJ0eU5hbWUsIGluZGV4LCBtb2RlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIG5hbWVkUmVzdWx0LCBvcGVyYXRpb25SZXN1bHQp
KTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbCgpCisgICAgewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JJ
bkJ5VmFsKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHkoKQorICAgIHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShvcGVyYXRp
b25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpOworICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBp
bGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCiAgICAgewpAQCAtMTczNDQsNyArMTc2MTMsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRT
cGVjdWxhdGVJbnQzMigpICYmIGNhblNwZWN1bGF0ZSkgewogICAgICAgICAgICAgc3BlY3VsYXRl
KAogICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxl
c3NUaGFuKHJlc3VsdCwgbV9vdXQuaW50MzJaZXJvKSk7CkBAIC0yMDI4Myw2ICsyMDU1MiwyNyBA
QCBwcml2YXRlOgogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KIAorICAgIC8v
IFRoaXMgb25seSB3b3JrcyBmb3IgaW50cyByaWdodCBub3cuCisgICAgUGF0Y2hwb2ludFZhbHVl
KiBkYXRhTG9nRm9yRGVidWdnaW5nKGNvbnN0IGNoYXIqIHByZWZpeCwgTFZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBvaW50
KFZvaWQpOworICAgICAgICByZXN1bHQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7
CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKHZhbHVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJl
Z1QwKSk7CisgICAgICAgIFR5cGUgdmFsdWVUeXBlID0gdmFsdWUtPnR5cGUoKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICBqaXQucHJvYmVEZWJ1
ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlVHlwZSA9PSBJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwg
Y29udGV4dC5ncHI8aW50MzJfdD4oR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPEpT
VmFsdWU+KEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBBdmFpbGFiaWxpdHlNYXAmIGF2
YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWls
YWJpbGl0eTsgfQogICAgIAogICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgppbmRleCA3MzE3MTAwOTZjZjNlMjQ5
OGFlNDVkZGEyNmFhODJlNzljZDQ2YTRlLi42OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlm
NGY1MTliMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RT
TC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTM4
LDYgKzEzOCw3IEBAIG1vZHVsZSBEU0wKICNpbmNsdWRlICJHZXRCeVZhbEhpc3RvcnkuaCIKICNp
bmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
IgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29k
ZS5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlk
U3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
UmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5o
CmluZGV4IDQ0NDYzNWU5ODBkOTBhZjgzN2ViZDYzYjk2MmZhZWRlMmVjNTM1MDMuLmQ4NzljOTBi
ZTMxMTc4NjIzM2Y1MjZiMTgzZWRmMWNiM2M3YmIzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZyYW1l
Kik7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sq
KTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTU2NvcGUqKTsK
LSAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7Cisg
ICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU0NlbGwqKTsKICAgICAg
ICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEVuY29kZWRKU1ZhbHVlKTsKIAog
ICAgICAgICBpbnQzMl90IGkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaAppbmRleCBjNTZlZjVlNDU1NGNiMTAzYWJl
YmU3MmU2Mjk4ZjhjNDhhYWQ5ODYwLi41OTNlZjY2NjhkZTJlMDNhNjU5YjM5ZjMxYWY2MGY4OGMy
NzgzOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVn
aXN0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVySW5saW5lcy5oCkBAIC02Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIm
IFJlZ2lzdGVyOjpvcGVyYXRvcj0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgcmV0dXJuICp0
aGlzOwogfQogCi1BTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpT
T2JqZWN0KiBvYmplY3QpCitBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0
b3I9KEpTQ2VsbCogb2JqZWN0KQogewogICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZShvYmplY3QpKTsKICAgICByZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhYzhiNTEzN2Q4NTM1NDUwNmFlZWRjZWRiZDFj
NWJkNzcyNTc5YzAxLi40MTU5ZTdlNTA0OTY5MzdlZTFlNTZhZmI3YzIwYWU5Y2YyYTg5ZWU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTg4OSw3
ICs4ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAgICAg
QmVsb3csIEFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0aGF0
IGZpcnN0IGFuZCBsYXN0IGFyZSBpbmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUoR1BS
UmVnIGNlbGxHUFIsIEpTVHlwZVJhbmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAppbmRleCA0MmI4Y2FmNWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0Li40
ZjdmMjk1MTI4ZThjNWUwOTBlNmQyMTJhMjQxZDhiMzZiNWNiYjIwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCkBAIC0zMTEsNiArMzExLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgp
CiAgICAgICAgIERFRklORV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQogICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKKyAgICAgICAgREVGSU5F
X1NMT1dfT1AoZW51bWVyYXRvcl9uZXh0KQogICAgICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRl
eF9zdHJpbmcpCiAgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRz
KQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfc2NvcGVkX2FyZ3VtZW50cykKQEAgLTM2
NSw2ICszNjYsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAg
ICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9P
UChvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0
b3JfaGFzX293bl9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcml2YXRlX25h
bWUpCiAgICAgICAgIERFRklORV9PUChvcF9zZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAgREVG
SU5FX09QKG9wX2NoZWNrX3ByaXZhdGVfYnJhbmQpCkBAIC01NzgsNiArNTgyLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2dldF9ieV9pZF93aXRoX3RoaXMpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9n
ZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X3Zh
bCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9wcml2YXRlX25hbWUpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9zZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX09QKG9wX2NoZWNrX3ByaXZhdGVfYnJhbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAppbmRleCA0ODdhNWFjNWI4ZTVkOGE5ZDgwYjJjNmQzMDZlMDgxNTIxYjgyODE0Li4xNDI2MDQy
ODc1ZGY1N2EzZWNhNTBkM2M1YjQzMjU4NzBiODY5Njg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKQEAgLTY4NSw2ICs2ODUsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfdG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4KKyAgICAgICAgdm9pZCBnZW5lcmF0
ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYsIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKKworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5
cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgorICAgICAgICB2b2lkIGVtaXRfZW51bWVyYXRv
cl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgT3Bjb2RlVHlwZSYs
IFNsb3dQYXRoRnVuY3Rpb25UeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jf
aW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVt
ZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggMTVlMWQzNDU3OWI2ZDRjOGMxNzBkMjM1MGM2YzM2
NDQzZmZlYTQxNS4uZDU5NDU2MjI1ODg5MTVlNzg4Njk5NGQyNmIwOGM5NjcyM2Y3NGFjYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAg
LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisjaW5j
bHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKQEAg
LTg2LDEwICs4NywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29k
ZVR5cGU+Cit2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5
cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwpAQCAtMTM2LDYgKzEzNywxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogICAgIH0KIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xv
d0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpLCBpdGVyKTsKK30KKwog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihW
TSYgdm0pCiB7CkBAIC0zNTQwLDYgKzM1NDYsMTM2IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0
QnlWYWw+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHlOYW1lOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKKworICAgIGF1dG8g
cmVzdWx0R1BSID0gcmVnVDA7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworCisgICAgb3I4KHJlZ1Qy
LCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAg
Ly8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KKyAgICBKdW1wIGlzTm90
TmFtZWRNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6R2VuZXJpY01vZGUpKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7CisgICAgSnVtcCBzdHJ1Y3R1cmVN
aXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAv
LyBDb21wdXRlIHRoZSBvZmZzZXQuCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
cmVnVDEpOworICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICBKdW1w
IG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpKSwgcmVnVDApOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7
CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZXN1bHRH
UFIpOworCisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gT3RoZXJ3aXNl
IGl0J3Mgb3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgbmVnMzIocmVnVDEpOwor
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgaW50MzJfdCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShm
aXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5KSwgcmVzdWx0R1BSKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBz
dHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0Y2gp
LCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworCisgICAgaXNOb3ROYW1lZE1vZGUu
bGluayh0aGlzKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
KTsKKyAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworCisgICAgaXNOb3RJbmRleGVkLmxpbmso
dGhpcyk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwg
cHJvZmlsZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1Qx
KTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsK
KyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKKworICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOworCisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAg
Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2V0QnlWYWw+KCksIGl0ZXIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlw
ZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJh
dG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVy
YWxDYXNlKQoreworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOworICAgIG9yOChyZWdUMCwg
QWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworCisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93Q2FzZXMubGlu
ayh0aGlzKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBnZW5lcmFsQ2FzZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKwor
ICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
bWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKSwgc2xvd19wYXRoX2VudW1l
cmF0b3JfaW5fYnlfdmFsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNf
b3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpLCBzbG93
X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNThlNWQ1MmZlNWIwOGFl
MjllM2U1ZGRkZTNkNzQ2Nzk2N2YyMzAxOS4uMjU3Y2FlYTI3ODY4ODNiYmEwOGM3YTJjNGIyMzhk
NTA0NGU3Mjk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC0xNTA1LDYgKzE1MDUsMjUgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZh
bD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3Jf
aW5fYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNhMDAx
YTU2NTVlYTFiYjFkYjU5NTczY2Y2MDguLmY3MzI2ODhhZTMyZWNkZGI5NzRiYWJmZmIzNjcyZmZh
M2MxYmY1ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KQEAgLTE5OTgsNiArMTk5OCwxMCBAQCBzbG93UGF0aE9wKGdldF9i
eV92YWxfd2l0aF90aGlzKQogc2xvd1BhdGhPcChnZXRfZGlyZWN0X3BuYW1lKQogc2xvd1BhdGhP
cChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCiBzbG93UGF0aE9wKGdldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX25leHQpCitzbG93UGF0aE9wKGVudW1lcmF0b3Jf
Z2V0X2J5X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9pbl9ieV92YWwpCitzbG93UGF0aE9w
KGVudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKIHNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eSkKIHNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3Bw
CmluZGV4IDExMjk1NGJiOWI2ZTUwMTM2ODgzYjc0NTZjYjFlODMxOGZiNWE1MTEuLmU5OWNlMzc4
ZmY0OTFhOTQyZWFhYjI0ZjE3N2ZiOGVmNzUzZjM2MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtMTA4NCwxMSArMTA4NCwx
MzEgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcikKICAgICBSRVRVUk4ocHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmpl
Y3QsIGJhc2UpKTsKIH0KIAorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9l
bnVtZXJhdG9yX25leHQpCit7CisgICAgQkVHSU4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wRW51bWVyYXRvck5leHQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spOworICAgIFJlZ2lzdGVyJiBtb2RlUmVnaXN0ZXIgPSBHRVQoYnl0
ZWNvZGUubV9tb2RlKTsKKyAgICBSZWdpc3RlciYgaW5kZXhSZWdpc3RlciA9IEdFVChieXRlY29k
ZS5tX2luZGV4KTsKKyAgICBSZWdpc3RlciYgbmFtZVJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1f
cHJvcGVydHlOYW1lKTsKKworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6TW9kZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsK
KyAgICB1aW50MzJfdCBpbmRleCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMyKCk7
CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1
ZSgpKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFs
dWUoKTsKKyAgICBBU1NFUlQoIWJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKKyAgICBK
U09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIENI
RUNLX0VYQ0VQVElPTigpOworICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1
Y3R1cmVJRChiYXNlLT5zdHJ1Y3R1cmVJRCgpKTsKKworICAgIEpTU3RyaW5nKiBuYW1lID0gZW51
bWVyYXRvci0+Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9kZSk7Cisg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisKKyAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0
YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsKKyAgICBtb2RlUmVnaXN0ZXIgPSBqc051
bWJlcihzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKSk7CisgICAgaW5kZXhSZWdpc3RlciA9IGpz
TnVtYmVyKGluZGV4KTsKKyAgICBuYW1lUmVnaXN0ZXIgPSBuYW1lID8gbmFtZSA6IGpzTnVsbCgp
OworICAgIEVORCgpOworfQorCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKK3sKKyAgICBCRUdJTigpOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGlj
X2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2Rl
KS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRh
dGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
R0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNJbnQzMigpOworICAgIHN3aXRj
aCAobW9kZSkgeworICAgICAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGU6IHsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1
Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAgICAgICAgICAg
UkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oaW5kZXgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok5hbWVkTW9kZTogeworICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc0Nl
bGwoKSAmJiBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+
Y2FjaGVkU3RydWN0dXJlSUQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ2xsIG9ubHkgbWF0
Y2ggdGhlIHN0cnVjdHVyZSBJRCBpZiB0aGUgYmFzZSBpcyBhbiBvYmplY3QuCisgICAgICAgICAg
ICAgICAgQVNTRVJUKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eCgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldE9iamVj
dCgpLT5nZXREaXJlY3QoaW5kZXggPCBlbnVtZXJhdG9yLT5jYWNoZWRJbmxpbmVDYXBhY2l0eSgp
ID8gaW5kZXggOiBpbmRleCAtIGVudW1lcmF0b3ItPmNhY2hlZElubGluZUNhcGFjaXR5KCkgKyBm
aXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0
Y2gpOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsKKyAgICAgICAgICAgIGlm
IChiYXNlVmFsdWUuaXNDZWxsKCkgJiYgbW9kZSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok5hbWVkTW9kZSkKKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNl
cnZlU3RydWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAg
ICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0
eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmlu
Zy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAvLyBUT0RPIERvZXMg
dGhpcyBhY3R1YWxseSBldmVyIHRocm93PyBJc24ndCBzdHJpbmcgYmFja2VkIGJ5IGEgVVVJRD8K
KyAgICAgICAgICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgICAgICAgICAgUkVUVVJOX1BST0ZJ
TEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfTsKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X2VudW1lcmF0b3JfaW5fYnlfdmFsKQoreworICAgIEJFR0lOKCk7CisgICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19j
YXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSku
anNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRh
IHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworCisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUo
KSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAg
ICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFz
ZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAg
ICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CisKKyAgICAgICAgaWYgKG1vZGUgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVS
Tihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUu
bV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkpKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgp
KTsKKyAgICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2Jh
bE9iamVjdCwgYmFzZVZhbHVlLCBzdHJpbmcsICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSkpKTsK
K30KKworSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hh
c19vd25fcHJvcGVydHkpCit7CisgICAgQkVHSU4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19j
YXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSku
anNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRh
IHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdF
VChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2Ug
PSBiYXNlVmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVt
ZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVh
bih0cnVlKSk7CisKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzT3du
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFz
VUludDMyKCkpKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdF
VChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhD
RVBUSU9OKCk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9w
ZXJ0eShnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lKSkpOworfQorCiBKU0Nf
REVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydWN0dXJlX3Bu
YW1lKQogewogICAgIEJFR0lOKCk7CiAgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKKwogICAgIHVpbnQzMl90IGluZGV4
ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMkFzQW55SW50KCk7CiAK
ICAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKaW5kZXggZDhkMTUwMWZiMzViYWMy
Nzk0YzZkOTQxMDI3MWJiNjhmNGNjMDU3ZS4uOWQ2NDM4YzRmNDk1ZTE2ZDI2MmI4YTMyMWRhM2Yw
NDA1ZGI3YWY3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmgKQEAgLTI2NCw2ICsyNjQsMTAgQEAgSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7CiBKU0NfREVDTEFSRV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk7CiBK
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dlbmVyaWNf
cG5hbWUpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRv
cl9uZXh0KTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9l
bnVtZXJhdG9yX2luX2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cpOwogSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdW5yZWFjaGFibGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IGIxYjQxNmUyMDVm
OGMzZTc4NDYxYTIzMGEwMmNkM2E0NmI5NWQ3YzIuLjI0YmQ3NjYyNjhhZTUyY2NkZjNkNDM1YmIy
MTQ2Y2ZlZjk4MzE5NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKQEAgLTE0NjgsNiArMTQ2OCwxMCBAQCBjYXBpdGFsTmFtZSAjIyBD
b25zdHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBp
dGFsTmFtZQogICAgICAgICB9KTsKICNlbmRpZgogCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6ZW1wdHlQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0
KSB7CisgICAgICAgIGluaXQuc2V0KGluaXQudm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KCkpOworICAgIH0pOworCiAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZVByb2ZpbGVyc09uR2xvYmFs
T2JqZWN0KCkpIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiX19l
bmFibGVTYW1wbGluZ1Byb2ZpbGVyIiksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwg
U3RyaW5nKCksIGVuYWJsZVNhbXBsaW5nUHJvZmlsZXIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9u
dEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAppbmRleCAyMWM3MGEyN2I2OTFiZTA1Njkw
YTJmYWU3N2M2OTkxMmFlZWMxMTlkLi5jZjBhNGE1MTM0ZjgyZGVlOTlhYWIyNWI2NjM1OThlNTdk
Y2UyYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKQEAgLTQ5LDEzICs0OSwxOSBAQCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdAogCiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbmRl
eGVkTGVuZ3RoLCB1aW50MzJfdCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXcml0ZUJhcnJp
ZXI8SlNTdHJpbmc+KiBwcm9wZXJ0eU5hbWVzQnVmZmVyLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWVz
U2l6ZSkKICAgICA6IEpTQ2VsbCh2bSwgdm0ucHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVy
ZS5nZXQoKSkKLSAgICAsIG1fcHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVydHlOYW1lc0J1
ZmZlcikKICAgICAsIG1fY2FjaGVkU3RydWN0dXJlSUQoc3RydWN0dXJlID8gc3RydWN0dXJlLT5p
ZCgpIDogMCkKICAgICAsIG1faW5kZXhlZExlbmd0aChpbmRleGVkTGVuZ3RoKQogICAgICwgbV9l
bmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMpCiAgICAg
LCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KHByb3BlcnR5TmFtZXNTaXplKQogICAgICwgbV9j
YWNoZWRJbmxpbmVDYXBhY2l0eShzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkgOiAwKQorICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5hbWVzQnVm
ZmVyKQogeworICAgIGlmIChtX2luZGV4ZWRMZW5ndGgpCisgICAgICAgIG1fbW9kZVNldCB8PSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOworICAgIGlmIChtX2VuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok5hbWVkTW9kZTsKKyAgICBpZiAobV9lbmRHZW5lcmljUHJvcGVydHlJbmRleCAt
IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU7CiB9CiAKIHZvaWQgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxQcm9wZXJ0eU5hbWVB
cnJheURhdGE+JiYgaWRlbnRpZmllcnMpCkBAIC0xNDgsNCArMTU0LDcwIEBAIHZvaWQgZ2V0RW51
bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmpl
Y3QqIGJhc2UsIFByCiAgICAgfQogfQogCitKU1N0cmluZyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjb21wdXRlTmV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCog
YmFzZSwgdWludDMyX3QmIGluZGV4LCBNb2RlJiBtb2RlLCBib29sIHNob3VsZEFsbG9jYXRlSW5k
ZXhlZE5hbWVTdHJpbmcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVChpbmRl
eGVkTGVuZ3RoKCkgfHwgc2l6ZU9mUHJvcGVydHlOYW1lcygpKTsKKworICAgIGluZGV4Kys7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBJbml0TW9kZTogeworICAgICAgICBtb2RlID0g
SW5kZXhlZE1vZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgRkFMTFRIUk9VR0g7Cisg
ICAgfQorCisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOiB7
CisgICAgICAgIHdoaWxlIChpbmRleCA8IGluZGV4ZWRMZW5ndGgoKSAmJiAhYmFzZS0+aGFzRW51
bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgpKSB7CisgICAgICAgICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGluZGV4Kys7Cisg
ICAgICAgIH0KKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgICAgICBp
ZiAoaW5kZXggPCBpbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gc2hvdWxkQWxs
b2NhdGVJbmRleGVkTmFtZVN0cmluZyA/IGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZt
LCBpbmRleCkuc3RyaW5nKCkpIDogbnVsbHB0cjsKKworICAgICAgICBpZiAoIXNpemVPZlByb3Bl
cnR5TmFtZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG1vZGUg
PSBOYW1lZE1vZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgRkFMTFRIUk9VR0g7Cisg
ICAgfQorCisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZToKKyAg
ICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsKKyAgICAgICAg
SlNTdHJpbmcqIG5hbWUgPSBudWxscHRyOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICAgICAgaWYgKGluZGV4ID49IHNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsK
KyAgICAgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGlmIChpbmRleCA8IGVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSAmJiBiYXNlLT5zdHJ1
Y3R1cmVJRCgpID09IGNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZS0+
dmFsdWUoZ2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlv
bigpOworICAgICAgICAgICAgaWYgKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxP
YmplY3QsIGlkKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgbmFtZSA9IG51bGxwdHI7
CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgICAgIHNjb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CisKKyAgICAgICAgaWYgKGluZGV4ID49IGVuZFN0cnVjdHVyZVByb3BlcnR5
SW5kZXgoKSAmJiBpbmRleCA8IHNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgIG1v
ZGUgPSBHZW5lcmljTW9kZTsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaAppbmRleCAwMjAxMWQ0MWM3ZjY2ZGFkODgzYWU4ZDc3MGI1ZDNkMjg2Y2Q1MDg3
Li5hMDA5YmIyOTAxYjRhYTE3MGQ3MzhhNTk4NjBhMDlhMTU2ZDIwNDVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgotI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCkBAIC0zNyw2ICszNywxNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2VsbDsK
ICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3Ry
dWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCisgICAgZW51bSBNb2RlIDogdWlu
dDhfdCB7CisgICAgICAgIEluaXRNb2RlID0gMCwKKyAgICAgICAgSW5kZXhlZE1vZGUgPSAxIDw8
IDAsCisgICAgICAgIE5hbWVkTW9kZSA9IDEgPDwgMSwKKyAgICAgICAgR2VuZXJpY01vZGUgPSAx
IDw8IDIsCisgICAgICAgIC8vIFByb2ZpbGluZyBPbmx5CisgICAgICAgIEhhc1NlZW5OYW1lZE1v
ZGVTdHJ1Y3R1cmVNaXNtYXRjaCA9IDEgPDwgMywKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50OF90IGVudW1lcmF0aW9uTW9kZU1hc2sgPSAoR2VuZXJpY01vZGUgPDwgMSkgLSAx
OworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewpAQCAt
NzQsMTYgKzg1LDIwIEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCBlbmRHZW5lcmljUHJvcGVydHlJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7IH0KICAgICB1
aW50MzJfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW5s
aW5lQ2FwYWNpdHk7IH0KICAgICB1aW50MzJfdCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKTsgfQorICAgIHVpbnQzMl90IG1vZGVT
ZXQoKSBjb25zdCB7IHJldHVybiBtX21vZGVTZXQ7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IGluZGV4ZWRMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2luZGV4ZWRMZW5ndGgpOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3QgbW9kZVNldE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fbW9kZVNldCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IGNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1l
cyk7CiAgICAgfQogCisgICAgSlNTdHJpbmcqIGNvbXB1dGVOZXh0KEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqIGJhc2UsIHVpbnQzMl90JiBjdXJyZW50SW5kZXgsIE1vZGUmLCBib29sIHNob3Vs
ZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPSB0cnVlKTsKKwogICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CkBAIC05MiwxMyArMTA3LDE0IEBAIHByaXZhdGU6CiAgICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QsIHVpbnQz
Ml90LCBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KiwgdW5zaWduZWQpOwogICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mLCBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiYmKTsKIAotICAgIEF1
eGlsaWFyeUJhcnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1lczsK
LSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47CiAgICAg
U3RydWN0dXJlSUQgbV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICB1aW50MzJfdCBtX2luZGV4ZWRM
ZW5ndGg7CiAgICAgdWludDMyX3QgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4OwogICAgIHVp
bnQzMl90IG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7CiAgICAgdWludDMyX3QgbV9jYWNoZWRJ
bmxpbmVDYXBhY2l0eTsKKyAgICB1aW50MzJfdCBtX21vZGVTZXQgeyAwIH07CisgICAgQXV4aWxp
YXJ5QmFycmllcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9wZXJ0eU5hbWVzOworICAg
IFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVDaGFpbjsKIH07CiAKIHZv
aWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCos
IFByb3BlcnR5TmFtZUFycmF5JiwgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBz
dHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KTsKQEAgLTEzNCw3ICsxNTAsMTAgQEAgaW5saW5lIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2IKICAgICAgICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IDA7CiAgICAg
fQogCi0gICAgZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZt
LCBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBudW1i
ZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKKyAgICBpZiAo
IWluZGV4ZWRMZW5ndGggJiYgIXByb3BlcnR5TmFtZXMuc2l6ZSgpKQorICAgICAgICBlbnVtZXJh
dG9yID0gdm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCk7CisgICAgZWxzZQorICAgICAg
ICBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVj
dHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMsIGluZGV4ZWRMZW5ndGgsIG51bWJlclN0cnVj
dHVyZVByb3BlcnRpZXMsIFdURk1vdmUocHJvcGVydHlOYW1lcykpOwogICAgIGlmICghaW5kZXhl
ZExlbmd0aCAmJiBzdWNjZXNzZnVsbHlOb3JtYWxpemVkQ2hhaW4gJiYgc3RydWN0dXJlQWZ0ZXJH
ZXR0aW5nUHJvcGVydHlOYW1lcyA9PSBzdHJ1Y3R1cmUpIHsKICAgICAgICAgZW51bWVyYXRvci0+
c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZ2xv
YmFsT2JqZWN0LCBiYXNlKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNhY2hlUHJvcGVy
dHlOYW1lRW51bWVyYXRvcih2bSkpCkBAIC0xNDMsNCArMTYyLDYgQEAgaW5saW5lIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2IKICAgICByZXR1cm4gZW51bWVyYXRvcjsKIH0KIAordXNpbmcgRW51bWVyYXRvck1l
dGFkYXRhID0gc3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok1vZGU+OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzljY2FlYjNhOGU1ZDFjZGVlMmJmOWJhNTk1
ZWVhNTQxYzhiOTJlMS4uOWYyNzM1Yzk2ZWE1ZWMxYWQ4M2IyYzExMmI1Mzg1MjIyZjQyYzcyMCAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAyMS0wNy0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFw
cGxlLmNvbT4KKworICAgICAgICBmb3ItaW4gc2hvdWxkIG9ubHkgZW1pdCBvbmUgbG9vcCBpbiBi
eXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI3OTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBzdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanM6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAg
KiBzdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qczoKKyAgICAgICAgKiBzdHJl
c3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzOgorICAgICAgICAqIHN0cmVzcy9m
b3ItaW4tdGVzdHMuanM6CisgICAgICAgICogc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0
dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzOgorICAgICAgICAodGVzdDUpOgorCiAyMDIx
LTA3LTA4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gVXBkYXRlIEludGwuTG9jYWxlIHRlc3QgYWZ0ZXIgQXBwbGVJQ1UgdXBkYXRlCmRpZmYgLS1n
aXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcyBiL0pTVGVzdHMvc3RyZXNz
L2Zvci1pbi1hcnJheS1tb2RlLmpzCmluZGV4IDkwMDJiOTQwYWQ1OTZiNzU0ODFmMDI1NDBlNTBh
YzllOWNiYjUwODguLjNkMmRhNjM5ZDgxMGY4YWI5N2EzZTI2OWZhZTEwNzIxMGI1Y2U3NWMgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzCisrKyBiL0pTVGVz
dHMvc3RyZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzCkBAIC0yNiw4ICsyNiw5IEBACiB2YXIgZnVu
Y0FyZ0FuZEJvZHlTdHIgPQogIihhcnIpIHsiICsgIlxuIiArCiAiICAgIHZhciBzdW0gPSAwOyIg
KyAiXG4iICsKLSIgICAgZm9yICh2YXIgaSBpbiBhcnIpIiArICJcbiIgKworIiAgICBmb3IgKHZh
ciBpIGluIGFycikgeyIgKyAiXG4iICsKICIgICAgICAgIHN1bSArPSBhcnJbaV07IiArICJcbiIg
KworIiAgICB9ICIgKwogIiAgICByZXR1cm4gc3VtOyIgKyAiXG4iICsKICJ9IjsKIApAQCAtNzUs
NiArNzYsNyBAQCBmdW5jdGlvbiB0ZXN0KG5hbWUsIGRhdGEpIHsKIAogICAgICAgICBpZiAoKGFj
dHVhbCAhPSBleHBlY3RlZCkgJiYgKGFjdHVhbCAhPSBwcmV2aW91c1Jlc3VsdCkpIHsKICAgICAg
ICAgICAgIHByaW50KCJGQUlMOiAiICsgbmFtZSArICI6IGV4cGVjdGVkOiAiICsgZXhwZWN0ZWQg
KyAiLCBhY3R1YWw6ICIgKyBhY3R1YWwgKyAiLCBzdGFydGluZyBAIGxvb3AgaXRlcmF0aW9uICIg
KyBpKTsKKyAgICAgICAgICAgICR2bS5icmVha3BvaW50KCk7CiAgICAgICAgICAgICBwcmV2aW91
c1Jlc3VsdCA9IGFjdHVhbDsKICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgICAgICAg
ICBudW1iZXJPZkZhaWx1cmVzKys7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4t
YmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVh
c3NpZ25lZC1sYXRlci5qcwppbmRleCA4MzExNWI0OTczYzgzN2NhNmQzZmYwNmVhNmZmMTMxYzM0
NTExZTYyLi4wOWY4MWQ5NTY1M2JhYTE1MDZlNWRkYTA2MmZhMmUzNWYxNThiZjMxIDEwMDY0NAot
LS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMKQEAgLTE0LDUg
KzE0LDUgQEAgbm9JbmxpbmUoZm9vKTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
ewogICAgIHZhciByZXN1bHQgPSBmb28oezA6MCwgMToxLCBhOjIsIGI6M30pOwogICAgIGlmIChy
ZXN1bHQgIT0gNykKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9u
LmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCmlu
ZGV4IDVhZDM1NjZmZDBkMzYxMDI1YTFlNWYzMzY1ZDBiYWQzNzRkNTEyMDIuLmQxMTQ2OTMxYjE0
NzVkODhjNDczOTQ5ZWFkYTJkZGEwZmQzOTMwYTUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNz
L2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9m
b3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMKQEAgLTEyLDggKzEyLDkgQEAKICAgICB9
OwogICAgIG5vSW5saW5lKGZvbyk7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7Ci0gICAgICAgIGlmIChmb28oKSAhPT0gIjEyMzUiKQotICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJiYWQgcmVzdWx0Iik7CisgICAgICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICAg
ICAgaWYgKHJlc3VsdCAhPT0gIjEyMzUiKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJi
YWQgcmVzdWx0IGdvdDogIiArIHJlc3VsdCk7CiAgICAgfQogICAgIGZvbyhudWxsKTsKIH0pKCk7
CkBAIC0zNiw4ICszNyw5IEBACiAgICAgfTsKICAgICBub0lubGluZShmb28pOwogICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgICAgICBpZiAoZm9vKCkgIT09ICJ4eiIp
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGZvbygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAieHoiKQorICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKICAgICB9CiB9KSgp
OwogKGZ1bmN0aW9uKCkgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3Rz
LmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCmluZGV4IDJlNGQ2Yjg0MmEyNDJl
YjcxNTk4NjAwZWU1MjhhZTE0YjljODljZTQuLjY4OTYwOTgxODUxZWUzNDRlM2FhN2Y1MzIzMTUx
YjIyNTFmNjVkOTAgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwor
KysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMuanMKQEAgLTEwNSw2ICsxMDUsNyBAQCBm
dW5jdGlvbiBzaG91bGRUaHJvd1N5bnRheEVycm9yKHNjcmlwdCkgewogICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0Iik7CiAgICAgfQogfSkoKTsKKwogKGZ1bmN0aW9uKCkg
ewogICAgIHZhciBmb28gPSBmdW5jdGlvbihhLCBiKSB7CiAgICAgICAgIGZvciAodmFyIHAgaW4g
YikgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1
cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMgYi9KU1Rlc3RzL3N0cmVzcy9oYXMtb3duLXBy
b3BlcnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qcwppbmRleCA5OWM1OWFj
MTA1NjhjZThhNzkwODUyMjk4MjA2ZmRjN2UwZTBmODljLi5lMGFkZTA3MWEyZTRiOGQwMjc4ZDk1
Y2M5MzNlMjRmMThiYmVlMDU4IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9oYXMtb3duLXBy
b3BlcnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qcworKysgYi9KU1Rlc3Rz
L3N0cmVzcy9oYXMtb3duLXByb3BlcnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVz
cy5qcwpAQCAtMTMyLDcgKzEzMiwxMCBAQCBmdW5jdGlvbiB0ZXN0NSgpIHsKICAgICBvLl9fcHJv
dG9fXyA9IHA7CiAKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7ICsraSkgewotICAgICAg
ICBhc3NlcnQoY291bnQobykgPT09IDApOworICAgICAgICB2YXIgYyA9IGNvdW50KG8pOworICAg
ICAgICBpZiAoYykKKyAgICAgICAgICAgIHByaW50KGMpOworICAgICAgICBhc3NlcnQoYyA9PT0g
MCk7CiAgICAgfQogfQogdGVzdDUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434437</attachid>
            <date>2021-07-28 10:49:10 -0700</date>
            <delta_ts>2021-07-28 11:25:21 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728134909.patch</filename>
            <type>text/plain</type>
            <size>343297</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjkyOGQxOWRlMzIxY2Uw
NjhiNWFkOTIxZWIwNGFiNzIzZmEzZDVmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQzMDQs
NiArNDMwOCw0OSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAg
ICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgaWYg
KGFycmF5TW9kZS5pc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
OworICAgICAgICBlbHNlIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSB8fCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQorICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisK
KyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgp
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+ZW51bWVyYXRvck1ldGFkYXRh
KCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50
OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNh
c2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRv
ckhhc093blByb3BlcnR5OiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdo
ZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAg
ICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgorICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIG1ha2VIZWFwVG9w
Rm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAppbmRleCAxMTExZjg5ZjlkN2I1Yjk3Nzc4YzE2YzhkNTQ2NDBiZWEzNzQ0
MmIyLi5hMDI2YWFkMTg5M2JmMjNjNTcxOTZmY2M2YzkxZmMyMDAwM2M0NTY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKQEAgLTI4OSw2ICsyODksMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNT
YW5lQ2hhaW47CiAgICAgfQogCisgICAgYm9vbCBpc1NhbmVDaGFpbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNJbkJvdW5kc1NhbmVDaGFpbigpIHx8IGlzT3V0T2ZCb3VuZHNTYW5l
Q2hhaW4oKTsKKyAgICB9CisKICAgICBib29sIGlzT3V0T2ZCb3VuZHMoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzIHx8IHNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAKaW5kZXggZGIzN2Y0ZGRkYmY4MGNkNjZlYjU3ODdkN2JhYTJiZjUzYWY4OTA3Ni4uOWRi
ZDBiNDdkOWRmZjRjZjYwMzhhZjUwMDE3OTM0OGJlMGFlYTI5NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwCkBAIC0zOTAsNyArMzkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzICYgfk5vZGVCeXRlY29kZU5lZWRzTmVnWmVybyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAg
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNl
c0FzVmFsdWUpOwogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVy
Z2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhl
ciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCB8IE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApp
bmRleCBhMjk2YzRiODdjODU4ODY0ZmJkZWRkNzRlZjcyN2U1NGQ5NWZkNjk0Li4zNjllN2MyOTUw
NTViODBjNTI5MjE1Mzk5MWU0ODJlMjJjOTY4ZjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtODM4NywxMDMgKzgzODcsMTM2IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9oYXNfcHJpdmF0ZV9icmFuZCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDogewotICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmFi
bGVMZW5ndGgsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVy
ZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBo
KEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSks
Ci0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yPigpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldFBy
b3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5
PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksIGdldChieXRlY29kZS5tX3Byb3Bl
cnR5KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9uZXh0OiB7CisgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JOZXh0PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5
TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogaW5k
ZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAgICAgICAgICBOb2RlKiBlbnVtZXJhdG9y
ID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CisgICAgICAgICAgICBOb2RlKiBtb2RlID0g
Z2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAg
ICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVy
YXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19vd25fc3RydWN0dXJlX3By
b3BlcnR5KTsKLSAgICAgICAgfQorICAgICAgICAgICAgYXV0byBzZWVuTW9kZXMgPSBtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YTsKIAotICAgICAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKEluU3RydWN0dXJlUHJvcGVydHksCi0gICAgICAgICAgICAgICAg
Z2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJv
cGVydHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0g
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIXNlZW5Nb2RlcykKKyAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Ci0gICAgICAgICAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayku
bV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YmFzZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsKLSAgICAgICAgICAgIE5vZGUqIGhhc0l0ZXJhYmxl
UHJvcGVydHkgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSkpOwotICAgICAgICAgICAgbV9leGl0
T0sgPSBmYWxzZTsgLy8gSGFzSW5kZXhlZFByb3BlcnR5IG11c3QgYmUgdHJlYXRlZCBhcyBpZiBp
dCBjbG9iYmVycyBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0IGdlbmVy
aWMuCi0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGhhc0l0ZXJhYmxlUHJvcGVydHkp
OwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChtb2RlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0
b3IpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIHN0b3JhZ2UgZm9y
IEluZGV4ZWRNb2RlIG9ubHkuCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVkSW5kZXhBbmRNb2Rl
ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNlZW5Nb2RlcykpOworCisg
ICAgICAgICAgICBOb2RlKiB1cGRhdGVkTW9kZSA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRF
eHRyYWN0TW9kZSwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9tb2RlLCB1cGRhdGVkTW9kZSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRJbmRl
eCA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIHVwZGF0ZWRJbmRleEFu
ZE1vZGUpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1faW5kZXgsIHVwZGF0ZWRJbmRleCk7
CisKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSwgYWRkVG9HcmFwaChF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9k
ZSwgZW51bWVyYXRvcikpOworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9y
X25leHQpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dERpcmVjdFBuYW1lPigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOwotICAgICAgICAgICAgCisgICAgICAgIGNh
c2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICAg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9h
cnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7CisKICAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHBy
b3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJv
cGVydHlOYW1lID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIE5v
ZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogbW9k
ZSA9IGdldChieXRlY29kZS5tX21vZGUpOwogICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9
IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOwogCisgICAgICAgICAgICBhdXRvIHNlZW5Nb2Rl
cyA9IE9wdGlvblNldDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3KG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVz
KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKworICAgICAgICAg
ICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogYmFkTW9kZSA9IGFkZFRvR3JhcGgoQXJpdGhCaXRB
bmQsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpH
ZW5lcmljTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOworCisg
ICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgQXJpdGhCaXRBbmQgY2Fubm90IGhhdmUgZWZm
ZWN0cyBzbyBpdCdzIG9rIHRvIGV4aXQgaGVyZS4KKyAgICAgICAgICAgICAgICBtX2V4aXRPSyA9
IHRydWU7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOworCisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhqc051bWJlcigwKSkpLCBiYWRNb2RlKTsKKworICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsgLy8g
VXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQgb3B0aW1pemF0aW9ucy4K
KyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gRm9yIHByb3BlcnR5
IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1v
ZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGSVhNRTogQ2hlY2tpbmcgZm9yIGEgQmFkQ29uc3RhbnRWYWx1ZSBjYXVzZXMgdXMgdG8gYWx3
YXlzIHVzZSB0aGUgR2VuZXJpYyB2YXJpYW50IGlmIHdlIHN3aXRjaGVkIGZyb20gSW5kZXhlZE1v
ZGUgLT4gSW5kZXhlZE1vZGUgKyBOYW1lZE1vZGUgZXZlbiB0aG91Z2ggdGhhdCBtaWdodCBiZSBm
aW5lLgorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMuY29udGFpbnNBbnkoeyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhh
c1NlZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG1vZGVUZXN0ID0g
YWRkVG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzQm9vbGVh
bihmYWxzZSkpKSwgbW9kZVRlc3QpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5k
ZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFn
ZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRl
eCk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckdldEJ5VmFsLCBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwotICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQocHJvcGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJv
cGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGluZGV4KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOwogICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDAp
LCBPcEluZm8ocHJlZGljdGlvbikpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKIAotICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfZ2V0X2RpcmVjdF9wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9n
ZXRfcHJvcGVydHlfZW51bWVyYXRvcjogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7Ci0gICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9y
LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3IpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9pbl9ieV92YWw6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJh
eU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBB
cnJheTo6UmVhZCk7CiAKLSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLAotICAgICAgICAg
ICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5tX2luZGV4KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUpOwotICAgICAgICB9CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdl
dChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0
ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dv
cmQoKSksIE9wSW5mbyhtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKIAotICAgICAg
ICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZTogewotICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVy
YXRvciksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOworICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOwogICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKLSAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4o
KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3Ry
aW5nLCBnZXQoYnl0ZWNvZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3RvX2luZGV4X3N0cmluZyk7CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25f
cHJvcGVydHk6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpOworICAgICAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwg
QXJyYXk6OlJlYWQpOworCisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBP
cEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKSk7CisKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDogewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAppbmRleCBjYzBkMDE0ZGEyOTMxZmYzZWNkY2U5NDI5Y2My
NjI1NjFlMmY3Zjc2Li4wNmQxOWQxNzM5NzMwM2Y3NDFiZTZiMDJiZjAxMDU3ZjcyMjU2NDgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTY0LDcgKzE2
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkYXRhTG9nKCIgICBGb3VuZCBtdXN0LWhhbmRs
ZSBibG9jazogIiwgKmJsb2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgbWVy
Z2VzIHNuYXBzaG90IG9mIHN0YWNrIHZhbHVlcyB3aGlsZSBDRkEgcGhhc2Ugd2FudCB0byBoYXZl
IHByb3ZlbiB0eXBlcyBhbmQgdmFsdWVzLiBUaGlzIGlzIHNvbWV3aGF0IHRyaWNreS4KLSAgICAg
ICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlkYXRlcyB0
aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY1ZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5z
IG91dCB0aGF0IHRoaXMKKyAgICAgICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcg
T1NSIGVudHJ5IHZhbGlkYXRlcyB0aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY3RWYWx1
ZSB2YWx1ZXMuIEFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzCiAgICAgICAgIC8vIHR5cGUgd2lk
ZW5pbmcgaXMgY3JpdGljYWwgdG8gbmF2aWVyLXN0b2tlcy4gV2l0aG91dCBpdCwgbmF2aWVyLXN0
b2tlcyBoYXMgbW9yZSBzdHJpY3QgY29uc3RyYWludCBvbiBPU1IgZW50cnkgYW5kCiAgICAgICAg
IC8vIGZhaWxzIE9TUiBlbnRyeSByZXBlYXRlZGx5LgogICAgICAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApp
bmRleCBjNzE2NGIzMGY0NjRlYjBkNDM4MmUyY2NhNDJkNTY5OTY0ZDFiZjY3Li5hYzc4MmQ5OWI0
NTNjNTA4MjYxYTdmM2E4Nzk1NTg4MDBkMDA1Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0yNTQsMTcgKzI1NCw3IEBAIENhcGFiaWxp
dHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBvcF9oYXNfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNl
IG9wX2dldF9zY29wZToKICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAgIGNhc2Ugb3Bf
Z2V0X2VudW1lcmFibGVfbGVuZ3RoOgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhl
ZF9wcm9wZXJ0eToKLSAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0
eToKLSAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFz
X293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVy
dHk6Ci0gICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfZ2V0X3Byb3Bl
cnR5X2VudW1lcmF0b3I6Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToK
LSAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKLSAgICBjYXNlIG9wX3RvX2lu
ZGV4X3N0cmluZzoKICAgICBjYXNlIG9wX25ld19mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmNf
ZXhwOgogICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgpAQCAtMjk5LDYgKzI4OSwxMCBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3Bfc2V0X3ByaXZhdGVfYnJhbmQ6
CiAgICAgY2FzZSBvcF9jaGVja19wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfbmV4dDoKKyAgICBjYXNlIG9wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOgorICAgIGNh
c2Ugb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5OgogICAgICAgICByZXR1cm4gQ2FuQ29t
cGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA5ZDEwMDRmZTUzZjNkNDQ3ZGYxMDNmYWNh
MGQyZTEwZWM0ZmY1ZjQ2Li43N2E2OGU4ZTQxYTc3OTJlM2U2YjZlNDkzYTQwNWM3NWYzODRjOTZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTQ3LDYg
KzE0NywxMCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIENoZWNrQXJy
YXk6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheU9yRW1wdHk6CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6
CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAg
ICAgICAgIGNhc2UgR2V0VmVjdG9yTGVuZ3RoOgpAQCAtMzQzLDYgKzM0Nyw5IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFk
LCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgIGNhc2Ug
VG9JbmRleFN0cmluZzoKICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKICAg
ICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKQEAgLTM1MCw2ICszNTcsNzIgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0
b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNh
c2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgcmVhZChKU09i
amVjdF9idXR0ZXJmbHkpOworICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIHJlYWQoTmFt
ZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7
CisgICAgICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAg
ICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDog
eworICAgICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjogeworICAgICAgICAgICAgaWYgKG1v
ZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywg
SW5kZXhlZEludDMyUHJvcGVydGllcywgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1Nh
bmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhl
ZERvdWJsZVByb3BlcnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2Fu
ZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
OworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5k
ZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIGlmICht
b2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rv
ckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVy
dGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKICAgICBjYXNlIEhhc0VudW1l
cmFibGVJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkp
OwpAQCAtNzA1LDYgKzc3OCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBU
b1ByaW1pdGl2ZToKICAgICBjYXNlIFRvUHJvcGVydHlLZXk6CiAgICAgY2FzZSBJbkJ5VmFsOgor
ICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBj
YXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAgLTkwNiw2ICs5ODEsMTIgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0
IFdyaXRlRnUKICAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3Rh
cnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBmYXIgdG9vIGNvbnNlcnZhdGl2ZSBmb3IgdGhlIGNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBJbnQzMlVzZSBjYXNlLgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OiB7CisgICAgICAgIGNsb2JiZXJUb3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUt
PmFycmF5TW9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4
IDUzYWJmZWE5MWRmMjI0YmQ0ODI1NTBkYmU1NzgyZDU5Y2FkZDk4YjUuLjUyYTczMTY1NjU4NjEy
NTA2NTYwZTNiZjNmNTFiOTUxM2YzYjlhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAKQEAgLTM5NSw2ICszOTUsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgogICAg
IGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6
CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlh
bGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVj
dDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNTA4
LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
ID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNh
c2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1
dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li5hY2U0YWY1
MzQ1NzJmNGJlNmFlNzVhMjBlYTMwMTZiNGM2Yzc4Zjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0
b3JHZXRCeVZhbDogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAg
ICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEwNjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjExNzIKICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5
OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUoKS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOworCisKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAg
ICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9TUiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE5h
bWVkTW9kZS4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV0Ugc2hvdWxkIGhhdmUgYSBiZXR0
ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBF
bnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9k
ZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlwZShBcnJheTo6R2VuZXJpYykpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEwOTYsNyArMTExMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBo
b2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0aGUgZnVsbC1ibG93bgogICAgICAgICAgICAgICAg
ICAgICAvLyBvdXQtb2YtYm91bmRzIHNsb3cgcGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFz
RXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4KSkKQEAgLTExMTEs
NyArMTEyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChh
cnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5l
Q2hhaW47CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2Vz
QXNPdGhlcikgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJl
YWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0IGNhcmUKQEAgLTExMjEsNyArMTEzNyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBh
cnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGgu
aGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4KSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRP
ZkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTc4
LDcgKzExOTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNl
PihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
Y2FuJ3Qgc2V0IGEgbm9uLUpTVmFsdWUgcmVzdWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgc2lu
Y2Ugd2UgY291bGQgc3RpbGwgZG8gYSBOYW1lZE1vZGUgcHJvcGVydHkgYWNjZXNzLiBXZSBhbHNv
IGRvbid0IGhhdmUgYSBnb29kIHdheSB0bworICAgICAgICAgICAgLy8gcHJvdmUgdGhlcmUncyBu
byBzdHJ1Y3R1cmUgcHJvcGVydGllcyBhdCB0aGlzIHBvaW50LgorICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJv
dW5kcygpCkBAIC0yMzQ1LDYgKzIzNjUsNTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZpeEVk
Z2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICAgICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Cisg
ICAgICAgICAgICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Cisg
ICAgICAgICAgICBFZGdlJiBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
bm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5lbnVt
ZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKS0+cHJlZGljdGlvbigpKSk7CisKKyAgICAgICAgICAgICAg
ICBmaXhFZGdlPENlbGxVc2U+KGJhc2UpOworICAgICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24oYmFzZSwgaW5kZXgsIHN0b3JhZ2VFZGdlKTsKKworICAgICAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
YXJyYXlNb2RlLmJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc2V0U2FuZUNoYWluSWZQb3NzaWJsZShub2RlLCBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9
PSBBcnJheTo6SW5Cb3VuZHMgPyBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6T3V0
T2ZCb3VuZHNTYW5lQ2hhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9k
ZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1l
ZE1vZGUgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBCYWRD
YWNoZSkpCisgICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihiYXNlKTsKKworICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihpbmRleCk7CisgICAgICAgICAgICBmaXhFZGdl
PEtub3duSW50MzJVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6
IHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bklu
dDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJV
c2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihu
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJ
bkJ5VmFsOiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+
c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4o
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3du
SW50MzJVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICAgICAgZml4
RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBQcm9maWxl
VHlwZTogewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBpbnNlcnQgdHlwZSBjaGVja3MgYmFz
ZWQgb24gdGhlIGluc3RydWN0aW9uVHlwZVNldCBvZiB0aGUgVHlwZUxvY2F0aW9uLCBub3QgdGhl
IGdsb2JhbFR5cGVTZXQuCiAgICAgICAgICAgICAvLyBCZWNhdXNlIHRoZSBpbnN0cnVjdGlvblR5
cGVTZXQgaXMgY29udGFpbmVkIGluIGdsb2JhbFR5cGVTZXQsIGlmIHdlIHByb2R1Y2UgYSB0eXBl
IGNoZWNrIGZvcgpAQCAtMzY5MCw2ICszNzYyLDY3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAg
ICAgfQogCisgICAgdm9pZCBzZXRKU0FycmF5U2FuZUNoYWluSWZQb3NzaWJsZShOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgp
OworICAgICAgICBzdGQ6Om9wdGlvbmFsPEFycmF5OjpTcGVjdWxhdGlvbj4gc2FuZUNoYWluU3Bl
Y3VsYXRpb247CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNKU0FycmF5V2l0aE9yaWdpbmFsU3Ry
dWN0dXJlKCkpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIEluQm91bmRzU2FuZUNoYWluIHdp
bGwgd29yayBvbiBhIHBlci10eXBlIGJhc2lzLiBOb3RlIHRoYXQ6CisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gMSkgV2UgZG9uJ3Qgd2FudCBkb3VibGUgYXJyYXlzIHRvIHNvbWV0aW1l
cyByZXR1cm4gdW5kZWZpbmVkLCBzaW5jZQorICAgICAgICAgICAgLy8gdGhhdCB3b3VsZCByZXF1
aXJlIGEgY2hhbmdlIHRvIHRoZSByZXR1cm4gdHlwZSBhbmQgaXQgd291bGQgcGVzc2ltaXNlCisg
ICAgICAgICAgICAvLyB0aGluZ3MgYSBsb3QuIFNvLCB3ZSdkIG9ubHkgd2FudCB0byBkbyB0aGF0
IGlmIHdlIGFjdHVhbGx5IGhhZAorICAgICAgICAgICAgLy8gZXZpZGVuY2UgdGhhdCB3ZSBjb3Vs
ZCByZWFkIGZyb20gYSBob2xlLiBUaGF0J3MgcHJldHR5IGFubm95aW5nLgorICAgICAgICAgICAg
Ly8gTGlrZWx5IHRoZSBiZXN0IHdheSB0byBoYW5kbGUgdGhhdCBjYXNlIGlzIHdpdGggYW4gZXF1
aXZhbGVudCBvZgorICAgICAgICAgICAgLy8gSW5Cb3VuZHNTYW5lQ2hhaW4gZm9yIE91dE9mQm91
bmRzLiBGb3Igbm93IHdlIGp1c3QgZGV0ZWN0IHdoZW4gVW5kZWZpbmVkIGFuZAorICAgICAgICAg
ICAgLy8gTmFOIGFyZSBpbmRpc3Rpbmd1aXNoYWJsZSBhY2NvcmRpbmcgdG8gYmFja3dhcmRzIHBy
b3BhZ2F0aW9uLCBhbmQganVzdAorICAgICAgICAgICAgLy8gdXNlIEluQm91bmRzU2FuZUNoYWlu
IGluIHRoYXQgY2FzZS4gVGhpcyBoYXBwZW5zIHRvIGNhdGNoIGEgbG90IG9mIGNhc2VzLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDIpIFdlIGRvbid0IHdhbnQgaW50MzIgYXJyYXkg
bG9hZHMgdG8gaGF2ZSB0byBkbyBhIGhvbGUgY2hlY2sganVzdCB0bworICAgICAgICAgICAgLy8g
Y29lcmNlIHRvIFVuZGVmaW5lZCwgc2luY2UgdGhhdCB3b3VsZCBtZWFuIHR3aWNlIHRoZSBjaGVj
a3MuIFdlIHdhbnQgdG8KKyAgICAgICAgICAgIC8vIGJlIGFibGUgdG8gc2F5IHdlIGFsd2F5cyBy
ZXR1cm4gSW50MzIuIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBwcm9maWxpbmcKKyAgICAg
ICAgICAgIC8vIGJhc2VkPworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgaGFz
IHR3byBpbXBsaWNhdGlvbnMuIEZpcnN0LCB3ZSBoYXZlIHRvIGRvIG1vcmUgY2hlY2tzIHRoYW4g
d2UnZAorICAgICAgICAgICAgLy8gbGlrZS4gSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHdlIGhhdmUg
dG8gZG8gdGhlIGhvbGUgY2hlY2suIFNlY29uZCwKKyAgICAgICAgICAgIC8vIHNvbWUgYWNjZXNz
ZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0aGUgZnVsbC1ibG93bgor
ICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBzbG93IHBhdGguIFdlIGNhbiBmaXggdGhhdCB3
aXRoOgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NDY2OAorCisgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgICAgIGlmIChpczY0Qml0
KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFt
X2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkp
CisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6Ok91dE9m
Qm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGhhcHBlbnMg
dG8gYmUgZW50aXJlbHkgbmF0dXJhbC4gV2UgYWxyZWFkeSB3b3VsZCBoYXZlCisgICAgICAgICAg
ICAgICAgLy8gcmV0dXJuZWQgYW55IEpTVmFsdWUsIGFuZCBub3cgd2UnbGwgcmV0dXJuIFVuZGVm
aW5lZC4gV2Ugc3RpbGwgZG8KKyAgICAgICAgICAgICAgICAvLyB0aGUgY2hlY2sgYnV0IGl0IGRv
ZXNuJ3QgcmVxdWlyZSB0YWtpbmcgYW55IGtpbmQgb2Ygc2xvdyBwYXRoLgorICAgICAgICAgICAg
ICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91
dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
TmVnYXRpdmVJbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9u
ID0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykKKyAgICAgICAgICAg
ICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKKyAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNl
c0FzT3RoZXIpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykg
eworICAgICAgICAgICAgICAgICAgICAvLyBIb2xlcyBsb29rIGxpa2UgTmFOIGFscmVhZHksIHNv
IGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2FyZQorICAgICAgICAgICAgICAgICAgICAvLyBhYm91dCB0
aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFVuZGVmaW5lZCBhbmQgTmFOIHRoZW4gd2UgY2FuCisgICAg
ICAgICAgICAgICAgICAgIC8vIGRvIHRoaXMuCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFp
blNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5
OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50
aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxh
dGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzYW5lQ2hhaW5TcGVjdWxhdGlvbikK
KyAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwgKnNhbmVDaGFpblNwZWN1
bGF0aW9uKTsKKyAgICB9CisKICAgICB2b2lkIHNldFNhbmVDaGFpbklmUG9zc2libGUoTm9kZSog
bm9kZSwgQXJyYXk6OlNwZWN1bGF0aW9uIHNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmlu
ZGV4IDlkNDlmZTYzMjVjNWQ0ZWY0ZjgxMjRmZmUzNmZhMGNmYmRiZDYxYmYuLmRkM2NjZmRhOWU1
NDdiZTExZDE5MmQxNzUyZDQ2ZmQ2ZGI5YTYxYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCkBAIC0zODcsNiArMzg3LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+aW5CeVN0YXR1cygpKTsKICAgICBpZiAo
bm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2Rl
LT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChub2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEo
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+
ZW51bWVyYXRvck1ldGFkYXRhKCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiVDoiLCAqbm9kZS0+dGFyZ2V0QmxvY2soKSk7CiAgICAgaWYgKG5v
ZGUtPmlzQnJhbmNoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCmluZGV4IDZjYWUwN2U5
MDZmOWMxZDBlZjQwMzMwYzIzMzQ2YzVkNGMyM2Y5YzAuLjFiYWExYzhiY2Y1MTkzMTQwNDMwYTEx
ZmJjMGYzYTg5MjIxNTFlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCkBAIC0xMzQ0
LDYgKzEzNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6VW5kZWNpZGVkKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzgwLDYgKzEzODEsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAvLyBGSVhNRTogVGVhY2ggdGhpcyBhYm91dCBFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleC4KICAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOiB7CiAgICAgICAg
ICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBSZWxhdGlvbnNoaXA6Okxlc3NUaGFu
KSk7CiAgICAgICAgICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRl
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbV96ZXJvLCBSZWxhdGlvbnNoaXA6OkdyZWF0ZXJUaGFu
LCAtMSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKaW5kZXggMGE1
OTNlNTZhNzg2ZDM5M2ZkODdiNjU1N2QzNTJlM2YwZDQwNmFhNS4uZWM1YThmYjZlYWNlMjlkMzVl
ZDA1N2NkNjRmMGQ2ZjQ2NDY2NGQwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNYXlFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCkBAIC0xMTEsOCArMTExLDExIEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJTZXRQcml2YXRlQnJhbmRTdGF0dXM6CisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CiAg
ICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFt
ZToKICAgICBjYXNlIFN0ckNhdDoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDY5MTYyYmNmZjRmZDI3MzYyMDkz
MGM5NzA3YTZkMGE0MzhlNWVkODEuLjY5MDMzZjc5OTFhMzY3YmE0NTUxOTM0ZGY4MzExNmFkYjQ0
MTcxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01Miw2ICs1Miw3IEBA
CiAjaW5jbHVkZSAiRGVsZXRlQnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiR2V0QnlWYXJpYW50Lmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0
S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCkBAIC0xNzcyLDYgKzE3NzMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgR2V0QnlJZERpcmVjdEZsdXNoOgogICAgICAgICBjYXNl
IEdldFByb3RvdHlwZU9mOgogICAgICAgICBjYXNlIFRyeUdldEJ5SWQ6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNl
IEdldEJ5VmFsV2l0aFRoaXM6CiAgICAgICAgIGNhc2UgR2V0UHJpdmF0ZU5hbWU6CkBAIC0xOTQx
LDYgKzE5NDMsODQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8dm9pZCo+
KCk7CiAgICAgfQogCisgICAgYm9vbCBoYXNTdG9yYWdlQ2hpbGQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ29kZVBvaW50QXQ6
CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEdldEJ5VmFs
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgor
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGNhc2UgQXRvbWljc0FkZDoKKyAg
ICAgICAgY2FzZSBBdG9taWNzQW5kOgorICAgICAgICBjYXNlIEF0b21pY3NDb21wYXJlRXhjaGFu
Z2U6CisgICAgICAgIGNhc2UgQXRvbWljc0V4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NM
b2FkOgorICAgICAgICBjYXNlIEF0b21pY3NPcjoKKyAgICAgICAgY2FzZSBBdG9taWNzU3RvcmU6
CisgICAgICAgIGNhc2UgQXRvbWljc1N1YjoKKyAgICAgICAgY2FzZSBBdG9taWNzWG9yOgorICAg
ICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2Fz
ZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBBcnJheUluZGV4T2Y6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBzdG9yYWdlQ2hpbGRJbmRleCgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU3Rv
cmFnZUNoaWxkKCkpOworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICAgICAgY2FzZSBT
dHJpbmdDb2RlUG9pbnRBdDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgQXRvbWljc0Fk
ZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQW5kOgorICAgICAgICBjYXNlIEF0b21pY3NDb21wYXJl
RXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0V4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0
b21pY3NMb2FkOgorICAgICAgICBjYXNlIEF0b21pY3NPcjoKKyAgICAgICAgY2FzZSBBdG9taWNz
U3RvcmU6CisgICAgICAgIGNhc2UgQXRvbWljc1N1YjoKKyAgICAgICAgY2FzZSBBdG9taWNzWG9y
OgorICAgICAgICAgICAgcmV0dXJuIDIgKyBudW1FeHRyYUF0b21pY3NBcmdzKG9wKCkpOworICAg
ICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNh
c2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBy
ZXR1cm4gMjsKKworICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0dXJuIDI7CisK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
ICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3MgdG8gZGV0ZXJt
aW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiArMjI4NSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgpAQCAtMzE3
NCw2ICszMjU4LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFNldFBy
aXZhdGVCcmFuZFN0YXR1cyo+KCk7CiAgICAgfQogCisgICAgYm9vbCBoYXNFbnVtZXJhdG9yTWV0
YWRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNh
c2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVy
YXRvckhhc093blByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFbnVtZXJhdG9yTWV0YWRhdGEgZW51
bWVyYXRvck1ldGFkYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wSW5mbzIuYXM8RW51
bWVyYXRvck1ldGFkYXRhPigpOworICAgIH0KKwogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50
U3RyZWFtJiBvdXQpCiAgICAgewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IDVkNGIxN2ZiMzc2NTI4ODg5OGE5MzA4Y2Y2
NjU4MTQyMTdjNTBhZDEuLjVjZTlhZjNlNDUwMzQ4ZWNhYWJhYzFiMWM4OTVhZWMzZTFmNzY4YmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTUxNSw2ICs1MTUs
MTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAog
ICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwK
KyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgTm9kZVJlc3VsdEpT
IHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2Rl
LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRl
eCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JHZXRCeVZhbCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oRW51bWVyYXRvckluQnlWYWwsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhhc1ZhckFy
Z3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRW51bWVyYXRvckhhc093blByb3Bl
cnR5LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIC8qIE5vZGVzIGZvciBKU01hcCBhbmQgSlNTZXQgKi8gXAogICAgIG1hY3JvKE1h
cEhhc2gsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKE5vcm1hbGl6ZU1hcEtleSwgTm9k
ZVJlc3VsdEpTKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAppbmRleCA4ZDE1ZDZhYjM1MTZiNWViMDJiN2Y2M2Y0NDg2MTc5ZTliOGU4NDRkLi5mZWViYWJi
YTUwZTk1MGVkMjA5NTk5MzlhNzM3NzMyODY5YTg3NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI1MDUsNiArMjUwNSwxMDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIEpTQ2VsbCosIChKU0ds
b2JhbE9iamVjdCogZ2xvYmEKICAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZy
b20odm0sIGluZGV4KS5zdHJpbmcoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUs
IHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBK
SVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok1vZGU+KG1vZGVOdW1iZXIpOworICAgIGlmIChKU1ZhbHVlOjpkZWNvZGUo
YmFzZVZhbHVlKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEFTU0VSVChtb2RlID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5pdE1vZGUpOworICAgICAgICBBU1NFUlQoIWlu
ZGV4KTsKKyAgICAgICAgQVNTRVJUKCFlbnVtZXJhdG9yLT5zaXplT2ZQcm9wZXJ0eU5hbWVzKCkp
OworICAgICAgICBtb2RlID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBKU09iamVjdCogYmFzZSA9IEpTVmFsdWU6OmRlY29kZShi
YXNlVmFsdWUpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQWxsb2Nh
dGVJbmRleGVkTmFtZVN0cmluZyA9IGZhbHNlOworICAgICAgICBlbnVtZXJhdG9yLT5jb21wdXRl
TmV4dChnbG9iYWxPYmplY3QsIGJhc2UsIGluZGV4LCBtb2RlLCBzaG91bGRBbGxvY2F0ZUluZGV4
ZWROYW1lU3RyaW5nKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWUgcmVzdWx0ID0gYml0d2lz
ZV9jYXN0PEpTVmFsdWU+KHN0YXRpY19jYXN0PHVpbnQ2NF90Pihtb2RlKSA8PCAzMiB8IGluZGV4
IHwgSlNWYWx1ZTo6TnVtYmVyVGFnKTsKKyNlbHNlCisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Zh
bHVlKG1vZGUsIGluZGV4KTsKKyNlbmRpZgorICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIEVu
Y29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIGlmICht
b2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAg
ICAgICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+aW5kZXhlZExlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaW5kZXgpLnN0cmluZygpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiByZXN1bHQg
PSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgRW5jb2RlZEpTVmFs
dWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIGJhc2UsIHVpbnQzMl90
IGluZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBlbnVtZXJhdG9yLT5wcm9w
ZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0g
c3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBzY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlLT50b09iamVjdChnbG9iYWxP
YmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldChnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
cHJvcGVydHlOYW1lVmFsdWUsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSAmJiBiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGJhc2UuZ2V0T2JqZWN0KCktPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgp
KSk7CisKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0ganNTZWN1cmVDYXN0PEpTU3RyaW5n
Kj4odm0sIEpTVmFsdWU6OmRlY29kZShwcm9wZXJ0eU5hbWVWYWx1ZSkpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihDb21tb25TbG93UGF0
aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFtZSkpKSk7Cit9CisK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSwgdWlu
dDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3Qo
KS0+aGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5n
KiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlO
YW1lLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3Qs
IGJhc2UsIGlkZW50aWZpZXIpKSkpOworfQorCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQ2VsbCogcmVnZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFz
dEluZGV4KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCmluZGV4IDMxNGUxZmVkZTU5NWQwZmI4ZmE4
MzVlZjcyMDVlNmI2NDVjMzA0NmIuLmQzNmYzNTNiYzM2MTJiOTg4MmNhMWQxODM4NDczZGQwOTI4
NTk0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCkBAIC0z
Niw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRGF0ZUluc3RhbmNlOwogY2xhc3Mg
SlNCaWdJbnQ7CiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU7CitjbGFzcyBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC0xMTAsNiArMTExLDEy
IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBK
U0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQz
Ml90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dWludDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikp
OworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0
SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwg
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3Ry
dWN0dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3
ZTMwNmJhYjg1MzdjMGU4OWUyZTBkLi5kMmFlY2MwMWE1ZjI5MDQzYWUyMWRmZGZkY2M3ZjUxMDk5
ODhjMjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsK
ICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAg
ICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hp
bGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51
bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxl
SW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAg
ICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNh
c2UgUmVnRXhwRXhlYzoKQEAgLTEyMDUsMTAgKzEyMDcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKICAgICAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVu
Z3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFs
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBJ
bkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBIYXNQcml2YXRlTmFt
ZToKQEAgLTEyMzksNiArMTI0NiwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAgIC8v
IFRoaXMgY2FuIGFjdHVhbGx5IHJldHVybiBhIEpTIG51bGwgYnV0IHdlIGJyYW5jaCBvZiB0aGF0
IGNhc2UgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2sgc28gd2UgZG9uJ3Qgd2FudCB0byBtZXNzIHdp
dGgKKyAgICAgICAgICAgIC8vIGZpeHVwJ3MgbG9naWMuCisgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNGdWxsTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogeworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgdmFsdWUgcHJvZmlsZSB3aGV0aGVyIHdlJ3Zl
IGV2ZXIgYWN0dWFsbHkgc2VlbiBhIHN5bWJvbC9zdHJpbmcuCisgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKwogICAgICAgICBjYXNlIFBhcnNlSW50OiB7CiAgICAgICAgICAgICAvLyBXZSBleHBl
Y3QgdGhpcyBub2RlIHRvIGFsbW9zdCBhbHdheXMgcHJvZHVjZSBhbiBpbnQzMi4gSG93ZXZlciwK
ICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgaXQgcHJvZHVjZXMgTmFOIG9yIGludGVnZXJz
IG91dCBvZiBpbnQzMiByYW5nZS4gV2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCmluZGV4IGM5NjM3YTFkMTNmYWFmOWVjMDQ1NjU0ODEw
NWY1N2UyOTk5ZDRjMDMuLjY1NjUxMTA0MThkY2FlOWU0ZmVmZmZhOTk0NjIyNzIzYjQyODA1NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNl
LmNwcApAQCAtODYsNiArODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbG93ZXJCb3VuZHND
aGVjayhtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAxKSwg
bV9ncmFwaC5jaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAg
IGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAg
ICAgICAgICBsb3dlckJvdW5kc0NoZWNrKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSwg
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMikpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDBmOWJkZTZhMzE1ZGE3MTcyYTMwZjYxOWVlMmQwYjli
NDYwZTJjNTAuLmEwNTFlNzRhNzA2MjExNTljODNiOTYyOTNjODI4NmZlMzU0ZmQyY2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNzIsNiAr
MzcyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgLy8gdG8gY2FwdHVyZSAi
cHJvZmlsaW5nIiBhdCB0aGUgcG9pbnQgaW4gY29udHJvbCBmbG93IGhlcmUgdGhlIHVzZXIgcHV0
IHRoZW0uCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5
VmFsOgogICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CkBAIC00OTYsNiArNDk3LDExIEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIHJldHVybiBpc1NhZmU7CiAgICAgfQogCisgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAvLyBUaGVzZSB0ZWNo
bmljYWxseSBkb24ndCBoYXZlIGVmZmVjdHMgYnV0IHRoZXknbGwgb25seSBldmVyIGZvbGxvdyBh
IEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlIHNvIHdlIG1pZ2h0IGFzIHdlbGwgcmV0
dXJuIGZhbHNlLgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRh
dGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgog
ICAgIGNhc2UgQ3JlYXRlUHJvbWlzZToKQEAgLTU5NSw2ICs2MDEsOCBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgogICAgIGNhc2UgSW5CeVZhbDoK
ICAgICBjYXNlIEluQnlJZDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CiAgICAg
Y2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgY2FzZSBIYXNPd25Qcm9wZXJ0eToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMjkyY2Vm
NjFhMWVkMTUxOGE2MDg3MTM0MmQ2NDRlZDk3OGIxZTViOC4uMjkwZDM0MjVkNWE1MGM5N2E2NjMy
MzRmYWE2MGJiYjcyYWIyZjU1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE2MzUsMjUgKzE2MzUsMTUgQEAgSlNWYWx1ZVJlZ3NU
ZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQpCiB7CiB9
CiAKK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2
ZUpJVCogaml0LCBHUFJSZWcgc3BlY2lmaWNQYXlsb2FkKQogI2lmIFVTRShKU1ZBTFVFNjQpCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVt
cG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZh
bHVlV29yZCkKLSAgICA6IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCi17Ci19CisgICAgOiBt
X2dwcihqaXQsIHNwZWNpZmljUGF5bG9hZCkKICNlbHNlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklU
KiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCByZXN1bHRXb3JkKQor
ICAgIDogbV9wYXlsb2FkR1BSKGppdCwgc3BlY2lmaWNQYXlsb2FkKQorICAgICwgbV90YWdHUFIo
aml0KQorI2VuZGlmCiB7Ci0gICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQpIHsKLSAg
ICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOwot
ICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOwotICAgICAgICBtX3RhZ0dQUiA9
IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICB9CiB9Ci0jZW5kaWYKIAog
I2lmIFVTRShKU1ZBTFVFNjQpCiBKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1w
b3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIEpTVmFsdWVPcGVyYW5kJiBvcGVy
YW5kKQpAQCAtMjU5NSw3ICsyNTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dENoYXJDb2RlQXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdChzY3JhdGNoUmVn
LCBtX2N1cnJlbnROb2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpT
VmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVm
aXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLmNoaWxk
KG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC5jaGlsZChub2RlLCAxKSk7CkBAIC0yNjA0LDE3ICsyNTk0LDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZzsKLSAgICBHUFJSZWcgcmVzdWx0VGFnUmVn
ID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5k
cygpKSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZWFsUmVzdWx0VGFnKHRoaXMpOwotICAgICAg
ICByZXN1bHRUYWcuYWRvcHQocmVhbFJlc3VsdFRhZyk7Ci0gICAgICAgIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZv
cm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpID8gRGF0YUZv
cm1hdEpTIDogRGF0YUZvcm1hdENlbGwpOworICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCk7CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNh
biBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxh
cmdlCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaFJlZyk7CkBAIC0yNjUwLDggKzI2MzMs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBu
b2RlKQogICAgICAgICAgICAgYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRpb25TaW5nbGVDaGFy
YWN0ZXJTdHJpbmcsIHNjcmF0Y2hSZWcsICZ2bSwgc2NyYXRjaFJlZykpOwogCiAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICBBU1NFUlQoZm9ybWF0
ID09IERhdGFGb3JtYXRKUyk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFRhZ1JlZyk7CisgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdz
LnRhZ0dQUigpKTsKICNlbmRpZgogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTI2
NjksMzQgKzI2NTMsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
dHJpbmcoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRX
YXRjaFN0cnVjdHVyZVRyYW5zaXRpb24oc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlKTsKICAgICAg
ICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24o
b2JqZWN0UHJvdG90eXBlU3RydWN0dXJlKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihtYWtlVW5pcXVlPFNhbmVTdHJpbmdHZXRCeVZhbFNs
b3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgSlNW
YWx1ZVJlZ3Moc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0jZWxzZQogICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93
UGF0aEdlbmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFs
dWVSZWdzKHJlc3VsdFRhZ1JlZywgc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0jZW5k
aWYKKyAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJv
cGVydHlSZWcpKTsKICAgICAgICAgfSBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxTdHJpbmdJbnQsCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7Ci0jZWxzZQogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0j
ZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBqc1ZhbHVl
UmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwotI2Vsc2UKLSAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwotI2VuZGlm
Ci0gICAgfSBlbHNlCi0gICAgICAgIGNlbGxSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9k
ZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbV9jdXJyZW50Tm9kZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpCisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBtX2N1
cnJlbnROb2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9t
Q2hhckNvZGUoTm9kZSogbm9kZSkKQEAgLTMzNDksMTQgKzMzMjEsMzEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bG9hZEZyb21JbnRUeXBlZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVk
QXJyYXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlU
eXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50
VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywg
VHlwZWRBcnJheVR5cGUgdHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUsIGJvb2wgc2hvdWxkQm94KQog
ewotICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpIHsKKyAg
ICBib29sIGlzVUludDMyID0gZWxlbWVudFNpemUodHlwZSkgPT0gNCAmJiAhaXNTaWduZWQodHlw
ZSk7CisgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOworCisg
ICAgaWYgKHNob3VsZEJveCkgeworICAgICAgICBpZiAoaXNVSW50MzIpIHsKKyAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSBmcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgbV9qaXQuY29udmVydElu
dDMyVG9Eb3VibGUocmVzdWx0UmVnLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okdy
ZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UmVnLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICAg
ICAgbV9qaXQuYWRkRG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJkFzc2VtYmx5
SGVscGVyczo6dHdvVG9UaGUzMiksIGZyZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcG9zaXRp
dmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKGZyZXN1bHQuZnBy
KCksIHJlc3VsdFJlZ3MpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faml0LmJveElu
dDMyKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghaXNVSW50MzIpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpIDwgNCB8
fCBpc1NpZ25lZCh0eXBlKSk7CiAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFJlZywg
bm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGVsZW1lbnRT
aXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKKwogICAgIGlmIChub2RlLT5zaG91
bGRTcGVjdWxhdGVJbnQzMigpICYmIGNhblNwZWN1bGF0ZSkgewogICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSk7CiAg
ICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CkBAIC0zMzgwLDcgKzMz
NjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChO
b2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeQogICAgIGRvdWJsZVJlc3VsdChmcmVzdWx0
LmZwcigpLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwg
VHlwZWRBcnJheVR5cGUgdHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkK
IHsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogICAgIApAQCAtMzM5MiwxMyArMzM4MSwxNSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9k
ZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdAogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIERhdGFGb3JtYXQgZm9y
bWF0OworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1h
dEludDMyKTsKKyAgICBib29sIHNob3VsZEJveCA9IGZvcm1hdCA9PSBEYXRhRm9ybWF0SlM7CiAK
ICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVn
KTsKLSAgICBsb2FkRnJvbUludFR5cGVkQXJyYXkoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIHJl
c3VsdFJlZywgdHlwZSk7CisgICAgbG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgdHlwZSk7CiAgICAgY29uc3RleHBy
IGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3Vs
dChub2RlLCByZXN1bHRSZWcsIHR5cGUsIGNhblNwZWN1bGF0ZSk7CisgICAgc2V0SW50VHlwZWRB
cnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0UmVncywgdHlwZSwgY2FuU3BlY3VsYXRlLCBzaG91
bGRCb3gpOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklUOjpnZXRJbnRUeXBlZEFycmF5U3RvcmVP
cGVyYW5kKApAQCAtMzYzNiw3ICszNjI3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnQKICAg
ICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUq
IG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpCiB7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogICAgIApAQCAtMzY0OCw2ICsz
NjM5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlCiAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwogCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsK
KyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXREb3Vi
bGUpOworCiAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBGUFJSZWcgcmVzdWx0
UmVnID0gcmVzdWx0LmZwcigpOwogICAgIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2sobm9kZSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpOwpAQCAtMzY2NCw3ICszNjU5LDEzIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5
cGVkQXJyYXlUeXBlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogICAgIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIGlmIChmb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgIG1faml0LmJveERvdWJsZShyZXN1bHRSZWcs
IHJlc3VsdFJlZ3MpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSk7
CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIH0KIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUp
CkBAIC0zNzAzLDcgKzM3MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZQogICAgIG5vUmVz
dWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3RyaW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJk
YTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMzcxMSwxOSAr
MzcxMiwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RX
aXRoU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwog
ICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERh
dGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3RyaW5nKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdl
dEJ5VmFsT2JqZWN0U3RyaW5nLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSogbm9kZSkKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSog
bm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBhcmcxKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzIodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7CkBAIC0zNzMxLDEyICszNzMzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSogbm9kZSkKICAgICBHUFJSZWcg
YXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwog
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBz
dGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKwogICAgIHNwZWN1bGF0ZU9iamVj
dChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBhcmcxR1BSKTsKICAgICBzcGVjdWxhdGVT
eW1ib2wobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgYXJnMkdQUik7CiAKICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogCkBAIC04MDM4LDE3ICs4MDQxLDE3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChOb2RlKiBub2RlKQogICAgIHN0
cmljdEludDMyUmVzdWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2Rl
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
LSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgR1BSUmVn
IHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZv
cm1hdEpTKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
OwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtODA3
OSwyMiArODA4MiwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRp
cmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2NvcGVk
QXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAvLyBUT0RPOiBBcmUgYm90aCBvZiB0
aGVzZSBuZWNlc3Nhcnk/PwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gy
LmdwcigpOwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwor
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBz
dGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKICAgICAKICAgICBtX2ppdC5sb2Fk
UHRyKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1
bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwpAQCAt
MTM0ODIsNiArMTM0ODcsMzEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4
U3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKKworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQ
UlJlZyBtb2RlR1BSID0gbW9kZS5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVu
dW1lcmF0b3IuZ3ByKCk7CisKKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBKU1ZhbHVl
UmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMsIFJldXNlLCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBy
ZXN1bHQucmVncygpOworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFs
dWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
MCkpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaW5jcmVtZW50TG9vcDsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZTsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBz
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsKKworICAgICAg
ICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAgICAgICAgIGluY3JlbWVudExvb3AgPSBt
X2ppdC5sYWJlbCgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoLmdwcigpKTsKKworICAgICAgICAgICAgaW5pdE1vZGUubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHNjcmF0Y2guZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICB9KSk7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpLmxpbmtUbyhpbmNy
ZW1lbnRMb29wLCAmbV9qaXQpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAg
ICBtX2ppdC5vcjY0KHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNl
bHNlCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2Up
IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKKworICAgICAgICAvLyBIYXMgdGhlIHNhbWUgc3RydWN0dXJlIGFzIHRo
ZSBlbnVtZXJhdG9yLgorICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291
cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUs
IEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhH
UFIsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1v
ZGVHUFIpOworCisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICBpbml0TW9kZS5saW5r
KCZtX2ppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQub3I2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSA8PCAzMiksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyNlbHNlCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYK
KworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Cisg
ICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLnJlZ3MoKTsKKworICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBpbmRleEdQUiwgbW9kZUdQ
UiwgZW51bWVyYXRvckdQUik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoTm9kZSogbm9kZSkKK3sKKyAgICBKU1Zh
bHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1
ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5qc1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBw
YXlsb2FkR1BSID0gcGFpclJlZ3MucGF5bG9hZEdQUigpOworCisgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
bV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSksIHBheWxvYWRHUFIsIHJlc3VsdEdQUik7CisKKyAgICBzdHJpY3RJbnQzMlJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVy
YXRvck5leHRFeHRyYWN0TW9kZShOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVw
ZGF0ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVn
cyA9IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHBhaXJHUFIgPSBpczY0
Qml0KCkgPyBwYWlyUmVncy5ncHIoKSA6IHBhaXJSZWdzLnRhZ0dQUigpOworCisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgaWYgY29uc3RleHByIChpczY0Qml0KCkpCisgICAgICAgIG1faml0LnJzaGlmdDY0
KHBhaXJHUFIsIFRydXN0ZWRJbW0zMigzMiksIHJlc3VsdEdQUik7CisgICAgZWxzZQorICAgICAg
ICBtX2ppdC5tb3ZlKHBhaXJHUFIsIHJlc3VsdEdQUik7CisgICAgbV9qaXQuYW5kMzIoVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzayksIHJl
c3VsdEdQUik7CisKKyAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0
eU5hbWUoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5k
ZXhPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgbW9kZU9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3JPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKwor
ICAgIEdQUlJlZyBpbmRleCA9IGluZGV4T3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgbW9kZSA9
IG1vZGVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyBlbnVtZXJhdG9yID0gZW51bWVyYXRvck9w
ZXJhbmQuZ3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpTVmFsdWVSZWdzRmx1
c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSByZXN1bHQucmVncygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW51bWVyYXRvck5l
eHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAg
RWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBn
ZW5lcmF0ZSA9IFsmXSAoR1BSUmVnIGJhc2VDZWxsR1BSKSB7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdDsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlU2xvd1BhdGg7CisKKyAgICAgICAgY29tcGlsZUdldEJ5
VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0
PihEYXRhRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7CisgICAgICAgICAgICBFZGdlIHN0b3Jh
Z2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBpZiAoc3RvcmFnZUVkZ2UpCisgICAgICAg
ICAgICAgICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0b3JhZ2VFZGdlKTsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBt
b2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDUpKTsKKworICAgICAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAg
ICAgICAgICAgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgICAgIGVudW1lcmF0b3JH
UFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KTsKKworICAgICAgICAgICAgYm9vbCBoYXZlU3RvcmFnZSA9ICEhc3RvcmFnZUVkZ2U7CisgICAg
ICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZVRlbXBvcmFyeTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkgeworICAgICAgICAg
ICAgICAgIHN0b3JhZ2VUZW1wb3JhcnkgPSBHUFJUZW1wb3JhcnkodGhpcywgUmV1c2UsIGVudW1l
cmF0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBzdG9yYWdlVGVtcG9yYXJ5Lmdw
cigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub3RG
YXN0TmFtZWRDYXNlczsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBnZW5l
cmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlzIG5vdCBhbiBvYmplY3QuCisgICAgICAg
ICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBtb2RlR1BSLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01v
ZGUpKSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0
byBjaGVjayB0aGF0IHRoZSBiYXNlIGlzIGEgY2VsbCBoZXJlIHNpbmNlIHdlIHdvbid0IGdlbmVy
YXRlIE5hbWVkTW9kZSBwcm9wZXJ0aWVzIGZvciBub24tb2JqZWN0cy4KKyAgICAgICAgICAgICAg
ICAvLyBUT0RPOiBwdXQgQXNzZXJ0IGhlcmU/CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0
aGUgc3RydWN0dXJlCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGtub3cgdGhlcmUn
cyBvbmx5IG9uZSBzdHJ1Y3R1cmUgZm9yIGJhc2Ugd2UgY2FuIGp1c3QgZW1iZWQgaXQgaGVyZS4K
KyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUNlbGxHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworCisg
ICAgICAgICAgICAgICAgYXV0byBiYWRTdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2gzMigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgaGF2ZSBhIGJl
dHRlciB3YXkgdG8gcmVwcmVzZW50IEluZGV4ZWQrTmFtZWQ/CisgICAgICAgICAgICAgICAgaWYg
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkubm9kZSgpID09IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMykubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBiYWRTdHJ1Y3R1cmVTbG93
UGF0aCA9IGJhZFN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChiYWRTdHJ1Y3R1cmUpOworCisgICAgICAg
ICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgICAgICAgICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG91dE9mTGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsCisgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKworICAgICAgICAgICAgICAgIG1faml0LmxvYWRW
YWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VDZWxsR1BSLCBpbmRleEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSksIHJlc3VsdFJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKKyAgICAgICAgICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAg
ICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOworICAg
ICAgICAgICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIGlmICghaGF2ZVN0b3JhZ2UpCisgICAgICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUNlbGxHUFIsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgICAg
IGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAg
IGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbm90RmFzdE5hbWVkQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKHJlc3VsdFJlZ3MsIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0pKTsK
KworICAgICAgICAvLyBXZSByZWx5IG9uIGNvbXBpbGVHZXRCeVZhbCB0byBjYWxsIGpzVmFsdWVS
ZXN1bHQgZm9yIHVzLgorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBraW5kYSBoYWNreS4uLgor
ICAgICAgICBBU1NFUlQoZ2VuZXJhdGlvbkluZm8obm9kZSkuanNWYWx1ZVJlZ3MoKSA9PSByZXN1
bHRSZWdzICYmIGdlbmVyYXRpb25JbmZvKG5vZGUpLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZv
cm1hdEpTKTsKKworICAgICAgICBpZiAoYmFkU3RydWN0dXJlU2xvd1BhdGguaXNTZXQoKSkKKyAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChiYWRTdHJ1Y3R1cmVT
bG93UGF0aCwgdGhpcywgb3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWws
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlQ2VsbEdQUiwgaW5k
ZXhHUFIsIGVudW1lcmF0b3JHUFIpKTsKKworICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQp
OworICAgIH07CisKKyAgICBpZiAoaXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAg
ICAgLy8gVXNlIG1hbnVhbCBvcGVyYW5kIHNwZWN1bGF0aW9uIHNpbmNlIEZpeHVwIG1heSBoYXZl
IHBpY2tlZCBhIFVzZUtpbmQgbW9yZSByZXN0cmljdGl2ZSB0aGFuIENlbGxVc2UuCisgICAgICAg
IHNwZWN1bGF0ZShub2RlLCBiYXNlRWRnZSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2VPcGVyYW5kKHRoaXMsIGJhc2VFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
ICAgICAgICBnZW5lcmF0ZShiYXNlT3BlcmFuZC5ncHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZU9wZXJhbmQodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBn
ZW5lcmF0ZShiYXNlT3BlcmFuZC5ncHIoKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9ySGFzUHJvcGVydHkoTm9kZSogbm9kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xvd1Bh
dGhGdW5jdGlvbikKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChhdXRvIGJhc2VSZWdzLCBHUFJSZWcg
YmFzZUNlbGxHUFIpIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJh
dG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworCisgICAgICAgIEpTVmFs
dWVSZWdzIHByb3BlcnR5TmFtZVJlZ3MgPSBwcm9wZXJ0eU5hbWUucmVncygpOworICAgICAgICBH
UFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBt
b2RlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3By
KCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LnJlZ3MoKS5ncHIoKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3BlcmF0aW9uQ2FzZXM7CisKKyAgICAgICAgaWYgKG1fc3Rh
dGUuZm9yTm9kZShiYXNlRWRnZSkubV90eXBlICYgflNwZWNDZWxsKQorICAgICAgICAgICAgb3Bl
cmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncykpOworCisg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgZ2VuZXJhdGUgdGhpcyBjb2RlIGlmIHdlIGtu
b3cgYmFzZSBpcyBub3QgYSBjZWxsLgorICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBtb2RlR1BSLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBvcGVyYXRpb25DYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICBtb3ZlVHJ1
ZVRvKHJlc3VsdEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CisKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMubGluaygmbV9qaXQpOworCisgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oc2xvd1BhdGhGdW5j
dGlvbiwgcmVzdWx0LnJlZ3MoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdz
LCBwcm9wZXJ0eU5hbWVSZWdzLCBpbmRleEdQUiwgbW9kZUdQUik7CisgICAgICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAg
Ymxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICB9OworCisgICAgaWYg
KGlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBnZW5lcmF0ZShiYXNlLmdwcigpLCBi
YXNlLmdwcigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZS5yZWdzKCksIGJhc2UuZ3ByKCkp
OworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5
VmFsKE5vZGUqIG5vZGUpCit7CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2Rl
LCBvcGVyYXRpb25FbnVtZXJhdG9ySW5CeVZhbCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoTm9kZSogbm9kZSkKK3sKKyAgICBjb21w
aWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkRmx1c2go
Tm9kZSogbm9kZSkKIHsKICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gc3R1YkluZm87
CkBAIC0xNDkzNCwyOCArMTUyNDYsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFs
bG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAg
ICAgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93
UGF0aE9wZXJhdGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uLCBj
b25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4mIHByZWZpeCkK
IHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBp
bmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CisgICAgR1BSUmVnIGluZGV4R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgcmVz
dWx0R1BSID0gSW52YWxpZEdQUlJlZzsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICBz
d2l0Y2ggKG1vZGUudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwog
CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4
R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJv
dW5kcygpKQpAQCAtMTQ5ODMsMTIgKzE1Mjk1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNs
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAg
ICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Cisg
ICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNo
aWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAg
ICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIg
PSBzY3JhdGNoLmZwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3By
KCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsK
KwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KTsKIAogICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCkBAIC0xNTAxMiwxMyArMTUzMjYs
MTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2Rl
KiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBu
b2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6
dGllKGluZGV4R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQ
UiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICBpZiAobW9k
ZS5pc0luQm91bmRzKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CkBAIC0xNTA0NywxNCArMTUz
NjMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShO
b2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICBkZWZhdWx0OiB7CiAgICAgICAg
IC8vIEZJWE1FOiBPcHRpbWl6ZSBUeXBlZEFycmF5cyBpbiBIYXNJbmRleGVkUHJvcGVydHkgSUMK
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4
MworICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOwogICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICB9CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nh
c2VzLCB0aGlzLCBzbG93UGF0aE9wZXJhdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYmFzZUdQUiwgaW5kZXhHUFIpKTsKLQotICAgIHVuYmxlc3NlZEJvb2xlYW5S
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldERpcmVjdFBuYW1lKE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggOThjNzYxNmI4ZmQyZmJmNWM0ZGQ4YTU3NzE1MDhh
ZDI2NzlmOTlkMS4uNWJiNmRlMWI5ZWY2YzY0Yzc0NGRhNTc3NTlhZTQ0NmNhYTU4MThhMSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtNDcs
NiArNDcsNyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBHUFJU
ZW1wb3Jhcnk7CitjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeTsKIGNsYXNzIEpTVmFsdWVPcGVy
YW5kOwogY2xhc3MgU2xvd1BhdGhHZW5lcmF0b3I7CiBjbGFzcyBTcGVjdWxhdGl2ZUpJVDsKQEAg
LTI0Niw2ICsyNDcsOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIEdQUlJlZyBhbGxvY2F0ZShHUFJS
ZWcgc3BlY2lmaWMpCiAgICAgeworICAgICAgICBpZiAoc3BlY2lmaWMgPT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgIGFsbG9jYXRlKCk7CiAjaWYgRU5BQkxFKERGR19SRUdJU1RFUl9BTExP
Q0FUSU9OX1ZBTElEQVRJT04pCiAgICAgICAgIG1faml0LmFkZFJlZ2lzdGVyQWxsb2NhdGlvbkF0
T2Zmc2V0KG1faml0LmRlYnVnT2Zmc2V0KCkpOwogI2VuZGlmCkBAIC0xMzQ1LDEyICsxMzQ4LDE1
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRlbXBvcmFyeVJlZ2lzdGVyRm9yUHV0QnlWYWwo
dGVtcG9yYXJ5LCBub2RlLT5hcnJheU1vZGUoKSk7CiAgICAgfQogICAgIAorICAgIC8vIFdlIHVz
ZSBhIHNjb3BlZExhbWJkYSB0byBwbGFjYXRlIHJlZ2lzdGVyIGFsbG9jYXRpb24gdmFsaWRhdGlv
bi4KKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbChOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9y
bWF0KT4mIHByZWZpeCk7CisKICAgICB2b2lkIGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUqKTsK
LSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KTsKICAgICB2b2lkIGNvbXBpbGVGcm9tQ2hhckNvZGUoTm9kZSopOyAKIAotICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSopOwotICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSos
IGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihE
YXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogCiAgICAgdm9pZCBjb21waWxl
R2V0UHJpdmF0ZU5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldFByaXZhdGVOYW1lQnlJ
ZChOb2RlKik7CkBAIC0xNDI0LDEyICsxNDMwLDEyIEBAIHB1YmxpYzoKICAgICBKSVRDb21waWxl
cjo6SnVtcCBqdW1wRm9yVHlwZWRBcnJheUlzRGV0YWNoZWRJZk91dE9mQm91bmRzKE5vZGUqLCBH
UFJSZWcgYmFzZUdQUiwgSklUQ29tcGlsZXI6Okp1bXAgb3V0T2ZCb3VuZHMpOwogICAgIHZvaWQg
ZW1pdFR5cGVkQXJyYXlCb3VuZHNDaGVjayhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEdQUlJlZyBp
bmRleEdQUik7CiAgICAgdm9pZCBjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSop
OwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFy
cmF5VHlwZSk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSos
IFR5cGVkQXJyYXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVn
cywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKICAg
ICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJl
ZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7CisgICAgdm9pZCBj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUsIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUq
LCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3RyaW5nKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1i
b2woTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhO
b2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CisgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8
c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRG
b3JtYXQpPiYgcHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3Ry
aW5nKE5vZGUqLCBFZGdlJiBjaGlsZDEsIEVkZ2UmIGNoaWxkMiwgRWRnZSYgY2hpbGQzKTsKICAg
ICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKE5vZGUqLCBFZGdlJiBjaGls
ZDEsIEVkZ2UmIGNoaWxkMiwgRWRnZSYgY2hpbGQzKTsKICAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bFdpdGhUaGlzKE5vZGUqKTsKQEAgLTE0NTgsNyArMTQ2NCw3IEBAIHB1YmxpYzoKICNlbmRpZgog
ICAgICAgICBFZGdlIHZhbHVlVXNlKTsKICAgICB2b2lkIGxvYWRGcm9tSW50VHlwZWRBcnJheShH
UFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnLCBHUFJSZWcgcmVzdWx0UmVnLCBU
eXBlZEFycmF5VHlwZSk7Ci0gICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2Rl
KiwgR1BSUmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlKTsK
KyAgICB2b2lkIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqLCBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzLCBUeXBlZEFycmF5VHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUsIGJvb2wgc2hvdWxk
Qm94KTsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2xhc3NUeXBlPiB2b2lkIGNvbXBpbGVOZXdG
dW5jdGlvbkNvbW1vbihHUFJSZWcsIFJlZ2lzdGVyZWRTdHJ1Y3R1cmUsIEdQUlJlZywgR1BSUmVn
LCBHUFJSZWcsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYsIHNpemVfdCwgRnVuY3Rpb25FeGVj
dXRhYmxlKik7CiAgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb24oTm9kZSopOwogICAgIHZvaWQg
Y29tcGlsZVNldEZ1bmN0aW9uTmFtZShOb2RlKik7CkBAIC0xNTI4LDYgKzE1MzQsMTcgQEAgcHVi
bGljOgogICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKE5vZGUqKTsKKworICAgIHZvaWQgY29tcGlsZUVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleChOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRV
cGRhdGVQcm9wZXJ0eU5hbWUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JHZXRC
eVZhbChOb2RlKik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+
CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5vZGUqLCBTbG93UGF0aEZ1
bmN0aW9uVHlwZSk7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckluQnlWYWwoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShOb2RlKik7CisKICAgICB2
b2lkIGNvbXBpbGVQdXRCeUlkRmx1c2goTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5SWQo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5SWREaXJlY3QoTm9kZSopOwpAQCAtMTU2OCw3
ICsxNTg1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUNhbGxOdW1iZXJDb25zdHJ1Y3Rv
cihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbChOb2RlKik7Ci0gICAgdm9p
ZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1opOwor
ICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiwgU19KSVRPcGVyYXRpb25f
R0NaLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4mIHBy
ZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUNsZWFyQ2F0Y2hMb2NhbHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVByb2Zp
bGVUeXBlKE5vZGUqKTsKQEAgLTE5MzcsNiArMTk1NCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlUmVncyhncHIoKSk7CiAgICAgfQorICAgIEpTVmFsdWVSZWdzIHJl
Z3MoKSB7IHJldHVybiBqc1ZhbHVlUmVncygpOyB9CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgIGJvb2wgaXNEb3VibGUoKSB7IHJldHVybiBtX2lzRG91YmxlOyB9CiAKQEAgLTE5NjUsNyAr
MTk4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzKHRhZ0dQUigpLCBw
YXlsb2FkR1BSKCkpOwogICAgIH0KIAotICAgIEdQUlJlZyBncHIoV2hpY2hWYWx1ZVdvcmQgd2hp
Y2gpCisgICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCA9IFBheWxvYWRXb3JkKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGpzVmFsdWVSZWdzKCkuZ3ByKHdoaWNoKTsKICAgICB9CkBA
IC0yMDAzLDIxICsyMDIxLDIwIEBAIHByaXZhdGU6CiBjbGFzcyBTdG9yYWdlT3BlcmFuZCB7CiAg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CisgICAgU3RvcmFnZU9wZXJhbmQo
KSA9IGRlZmF1bHQ7CisKICAgICBleHBsaWNpdCBTdG9yYWdlT3BlcmFuZChTcGVjdWxhdGl2ZUpJ
VCogaml0LCBFZGdlIGVkZ2UpCiAgICAgICAgIDogbV9qaXQoaml0KQogICAgICAgICAsIG1fZWRn
ZShlZGdlKQogICAgICAgICAsIG1fZ3ByT3JJbnZhbGlkKEludmFsaWRHUFJSZWcpCiAgICAgewot
ICAgICAgICBBU1NFUlQobV9qaXQpOwotICAgICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgPT0g
VW50eXBlZFVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpOwotICAgICAgICBp
ZiAoaml0LT5pc0ZpbGxlZChub2RlKCkpKQotICAgICAgICAgICAgZ3ByKCk7CisgICAgICAgIGVt
cGxhY2Uoaml0LCBlZGdlKTsKICAgICB9CiAgICAgCiAgICAgflN0b3JhZ2VPcGVyYW5kKCkKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKTsKLSAg
ICAgICAgbV9qaXQtPnVubG9jayhtX2dwck9ySW52YWxpZCk7CisgICAgICAgIGlmIChtX2dwck9y
SW52YWxpZCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9qaXQtPnVubG9jayhtX2dw
ck9ySW52YWxpZCk7CiAgICAgfQogICAgIAogICAgIEVkZ2UgZWRnZSgpIGNvbnN0CkBAIC0yMDM2
LDYgKzIwNTMsMTcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9ncHJPckludmFsaWQgPSBtX2pp
dC0+ZmlsbFN0b3JhZ2UoZWRnZSgpKTsKICAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOwog
ICAgIH0KKworICAgIHZvaWQgZW1wbGFjZShTcGVjdWxhdGl2ZUpJVCogaml0LCBFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBtX2ppdCA9IGppdDsKKyAgICAgICAgbV9lZGdlID0gZWRnZTsKKyAg
ICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkID09IEludmFsaWRHUFJSZWcpOworICAgICAgICBB
U1NFUlQobV9qaXQpOworICAgICAgICBBU1NFUlQoZWRnZS51c2VLaW5kKCkgPT0gVW50eXBlZFVz
ZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkNlbGxVc2UpOworICAgICAgICBpZiAoaml0LT5p
c0ZpbGxlZChub2RlKCkpKQorICAgICAgICAgICAgZ3ByKCk7CisgICAgfQogICAgIAogICAgIHZv
aWQgdXNlKCkKICAgICB7CkBAIC0yMDQzLDkgKzIwNzEsOSBAQCBwdWJsaWM6CiAgICAgfQogICAg
IAogcHJpdmF0ZToKLSAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7CisgICAgU3BlY3VsYXRpdmVK
SVQqIG1faml0IHsgbnVsbHB0ciB9OwogICAgIEVkZ2UgbV9lZGdlOwotICAgIEdQUlJlZyBtX2dw
ck9ySW52YWxpZDsKKyAgICBHUFJSZWcgbV9ncHJPckludmFsaWQgeyBJbnZhbGlkR1BSUmVnIH07
CiB9OwogCiAKQEAgLTIxMzQsMTEgKzIxNjIsMTkgQEAgY2xhc3MgSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkgewogcHVibGljOgogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KCk7CiAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqKTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZpY1BheWxvYWQpOworI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBHUFJSZWcg
c3BlY2lmaWNQYXlsb2FkLCBHUFJSZWcgc3BlY2lmaWNUYWcpOworI2VuZGlmCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCos
IFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCByZXN1bHRSZWdXb3JkID0gUGF5
bG9hZFdvcmQpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1
c2VUYWcsIEpTVmFsdWVPcGVyYW5kJik7CiAgICAgfkpTVmFsdWVSZWdzVGVtcG9yYXJ5KCk7CiAg
ICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuICEhcmVncygpOyB9CisK
KyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSYgb3BlcmF0b3I9KEpTVmFsdWVSZWdzVGVtcG9yYXJ5
JiYpID0gZGVmYXVsdDsKKwogICAgIEpTVmFsdWVSZWdzIHJlZ3MoKTsKIAogcHJpdmF0ZToKQEAg
LTIxNTAsNiArMjE4NiwyNiBAQCBwcml2YXRlOgogI2VuZGlmCiB9OwogCisjaWYgVVNFKEpTVkFM
VUU2NCkKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1
ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQs
IFdoaWNoVmFsdWVXb3JkKQorICAgIDogbV9ncHIoaml0LCBSZXVzZSwgb3BlcmFuZCkKK3sKK30K
KyNlbHNlCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFs
dWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5k
LCBXaGljaFZhbHVlV29yZCByZXN1bHRXb3JkKQoreworICAgIGlmIChyZXN1bHRXb3JkID09IFBh
eWxvYWRXb3JkKSB7CisgICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJl
dXNlLCBvcGVyYW5kKTsKKyAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKKyAg
ICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7CisgICAg
fQorfQorI2VuZGlmCisKIGNsYXNzIEZQUlRlbXBvcmFyeSB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAppbmRleCA5ZDQwMzY5NjEwZDg5ZTQxZTUxNmY2YzRh
NDI1ZTVmZDcxMDJhMWJlLi5mYmNkYjc2NmY5MjM1MDAyYmU5MTllOWEyYTA5YzMzMWI2YWQ3MGZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKQEAgLTE4MTIsNiArMTgxMiwzMzUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUNvbnRpZ3VvdXNQdXRCeVZhbChOb2RlKiBub2RlLCBCYXNlT3BlcmFuZFR5cGUmIGJh
c2UKICAgICBub1Jlc3VsdChub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOyAgICAK
IH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZGUqIG5vZGUsIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCit7CisgICAgc3dpdGNoIChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFCTEVf
Q09ERSkKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSW5hZGVxdWF0ZUNv
dmVyYWdlLCBKU1ZhbHVlUmVncygpLCAwKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworCisgICAgICAg
IEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHBy
ZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDApKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKKyAgICAg
ICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RV
c2UpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgeworICAgICAg
ICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUsIHBy
ZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsgLy8gU2F2ZSBhIHJlZ2lzdGVyLCBzcGVj
dWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCisgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAg
ICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7CisKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRS
ZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0
QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQ
UiwgcHJvcGVydHlSZWdzKTsKKyAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworCisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworICAgICAgICBKU1ZhbHVl
UmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cHJvcGVydHlSZWdzID0gcHJvcGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9y
ZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmZv
ck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdz
LnRhZ0dQUigpKSk7CisKKyAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAg
ICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2Fs
bFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAg
YmFzZVJlZ3MsIHByb3BlcnR5UmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7CisKKyAg
ICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5p
c1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c1N0cmluZyA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBp
ZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShT
cGVjU3ltYm9sKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9s
ID0gdHJ1ZTsKKworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CisKKyAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisg
ICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBu
dWxscHRyLCBiYXNlUmVncywgcHJvcGVydHlSZWdzKTsKKworICAgICAgICBtX2ppdC5hZGRHZXRC
eVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
V1RGTW92ZShzbG93UGF0aCkpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAg
ICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZvcm1h
dCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJl
Zml4KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9ybWF0
SW50MzIgOiBEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAg
ICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRJbnQzMikgeworICAgICAgICAgICAgICAgIEFT
U0VSVCghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKTsKKworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgICAgIE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCAwLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MigKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIHN0cmljdEludDMyUmVz
dWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9y
bWF0SlMpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKKyAgICAg
ICAgICAgICAgICByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQz
MigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2Fu
ZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0g
bV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgICAgIG5vdEhvbGUu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0LnRhZ0dQUigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRp
ZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkVmFsdWUo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKworICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAor
ICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6
IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
ICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJl
Z3MsIGZvcm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhM
b2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5m
cHIoKSkpOworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAg
ICAgICAgICAgICBib3hEb3VibGUocmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUg
JiYgIXJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisK
KyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBS
UmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChE
YXRhRm9ybWF0SlMpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAg
ICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAg
ICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzKTsKKworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisK
KyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6
OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwor
CisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdz
LCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRz
KTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAg
ICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAg
ICBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJp
bmc6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0
QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OiB7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1v
ZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsK
QEAgLTIyMzMsNyArMjU2MiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24g
U3RyaW5nQ2hhckF0IG5vZGUgaGF2aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0g
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAg
ICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsK
KyAgICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIyNjUsMzI2ICsyNTk5
LDI3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jaWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxF
X0NPREUpCi0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1
YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwotI2VuZGlmCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBp
bmRleCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLQot
ICAgICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7
Ci0KLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsK
LSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
LCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdp
dGhTeW1ib2wobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJp
Z2h0LgotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3Mg
PSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MpOwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRSZWdzLCBub2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOwotCi0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0g
ICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFRhZ1dvcmQpOwotICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgUmV1c2UsIHByb3BlcnR5
LCBQYXlsb2FkV29yZCk7Ci0KLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFz
ZS5qc1ZhbHVlUmVncygpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0g
cHJvcGVydHkuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKLQotICAgICAgICAgICAg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICAg
ICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJh
dGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+
c2l6ZSgpKTsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51
c2VkUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdzLnRhZ0dQUigpKSk7Ci0KLSAg
ICAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAgICAgYmFzZVJl
Z3MsIHByb3BlcnR5UmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7Ci0KLSAgICAgICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTdHJpbmcpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzU3RyaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAg
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKLQotICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgobV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93
UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIs
IGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2pp
dC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKLSAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRSZWdzLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0g
ICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpJbnQzMikgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUt
PmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAg
ICAgICAgICAgT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0
eVZhbHVlVGFnKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHRQYXlsb2FkLmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQo
cmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigK
LSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGFnLmdw
cigpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxvYWRP
ZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRQYXlsb2FkLmdwcigpKTsKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5i
cmFuY2hJZk5vdEVtcHR5KHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZy5n
cHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZXN1bHRQYXlsb2FkLmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZt
X2ppdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNW
YWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1w
dHkocmVzdWx0VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkganNWYWx1ZVJlc3VsdDsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IG9uZVJlZ1Jlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2gg
KHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0
UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZ1JlZykpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3Vs
dFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
ICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJl
c3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHQu
ZnByKCkpKTsKLSAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2Rl
KTsKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgY2FzZSBE
YXRhRm9ybWF0Q2VsbDoKKyAgICAgICAgICAgICAgICBvbmVSZWdSZXN1bHQgPSBHUFJUZW1wb3Jh
cnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShvbmVSZWdSZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9h
ZCh0aGlzKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAg
IEZQUlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJl
Zyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBS
ZWcpKTsKLSAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRUYWdSZWcsIHJlc3Vs
dFBheWxvYWRSZWcpOwotCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAg
ICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQg
PT0gRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0ID0gSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IHJlc3Vs
dC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9h
ZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQu
Z3ByKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0gICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6
dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0gbV9q
aXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9h
ZFJlZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJl
ZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAgICAgICBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Z1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5
OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFy
Z3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiB7Ci0g
ICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
bm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAg
ICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxMzMsMTEgKzQxNjgsMTkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpOwor
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
UmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BS
UmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwg
cmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0VudW1l
cmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBp
bmRleCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRp
b25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxH
UFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluZGV4Lmdwcigp
LCByZXN1bHQuZ3ByKCkpOyB9KSk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RGly
ZWN0UG5hbWU6IHsKQEAgLTQxNTcsNiArNDIwMCw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5k
ZXhBbmRNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5k
TW9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJ
bmRleChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRV
cGRhdGVQcm9wZXJ0eU5hbWUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgRW51bWVyYXRvckdldEJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlW
YWwobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvcklu
QnlWYWw6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKICAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CiAgICAgICAgIGNvbXBpbGVQ
cm9maWxlVHlwZShub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCBiNWUxY2MzZTQyZDJmYjRj
OWQ0ZjEzMTA3ZTk4ZWZlMGIyMDVlNWM3Li42MmZlMjIzZWFhOTBjNDhiYTMyNDJmNDhkNGFlNDk5
ODJhNDA3Yjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKQEAgLTIyNDYsNiArMjI0NiwzNzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+
JiBwcmVmaXgpCit7CisgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAg
ICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoK
KyAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoKKyAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAg
ICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUgdHlwZSIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKKyAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKwor
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRS
ZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAgICAgICAg
ICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3Vs
dFJlZ3MuZ3ByKCkpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5Ogor
ICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
IHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsK
KyAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9
PSBPYmplY3RVc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJv
bChub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Cisg
ICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdu
b3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHN0dWJJbmZvOworICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRG
R0pJVCkpIHsKKyAgICAgICAgICAgIHN0dWJJbmZvID0gR1BSVGVtcG9yYXJ5KHRoaXMpOworICAg
ICAgICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAg
ICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworCisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmln
aW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgIFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmZv
ck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIp
KTsKKworICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2pp
dC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNj
ZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICBn
ZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgIGVsc2UgaWYg
KG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3Bl
Y0ludDMyT25seSkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMy
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKworICAgICAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6REZHSklUKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQ
YXRoOworICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsK
KyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCisgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09w
ZXJhdGlvbigpKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgICAgICBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJhc2VHUFIs
IHByb3BlcnR5R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dQYXRoID0g
c2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmln
aW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkp
OworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKKyAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czog
eworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9ybWF0SlMpOwor
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyk7CisgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIG5vdEhvbGUubGlu
aygmbV9qaXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdz
KCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1wdHkocmVz
dWx0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdCwg
bm9kZSwgZm9ybWF0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQ
UlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0
UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCks
IHJlc3VsdFJlZyk7CisKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuYnJhbmNoSWZO
b3RFbXB0eShyZXN1bHRSZWcpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3Mo
KSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9w
ZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIG1f
aml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hJZkVtcHR5KHJlc3VsdFJlZykpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAg
ICAgICByZXN1bHRSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZykpOworICAgICAgICB9CisKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Zywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnBy
KCk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBE
YXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1h
dCkgPSBwcmVmaXgoRGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRSZWcpOworICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91
bmRzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJv
bUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdFJl
ZykpOworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAg
ICAgICAgICBib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYgIXJl
c3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHJlc3VsdElzVW5ib3hlZCA9IG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNT
YW5lQ2hhaW4oKSAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcik7
CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwor
CisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEZQ
UlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0
UmVncywgZm9ybWF0KSA9IHByZWZpeChyZXN1bHRJc1VuYm94ZWQgPyBEYXRhRm9ybWF0RG91Ymxl
IDogRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKwor
ICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7
CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkp
IHsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVn
YXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47
CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4pLCB0
ZW1wUmVnKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQoIXJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdCh0
ZW1wUmVnLCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgICAgICAg
ICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgICAg
IGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGlu
aygmbV9qaXQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRl
eCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAg
ICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncy5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBS
ZWcpKTsKKyAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigpKTsK
KyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25H
ZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncy5ncHIoKSwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAgICB9
CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAg
ICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigpOwor
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworCisgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCBy
ZXN1bHRHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpT
VmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSk7CisK
KyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4
KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLmdw
cigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICBtX2pp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkpLCByZXN1bHRSZWcpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
RW1wdHkocmVzdWx0UmVnKSk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWcsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJp
bmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0
QXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2Rl
LCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVu
dHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHByZWZp
eCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICBjYXNl
IEFycmF5OjpJbnQxNkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgY2Fz
ZSBBcnJheTo6VWludDhBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToK
KyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJh
eToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OiB7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUo
KS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
bm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKQEAg
LTI3MTMsNyArMzA3NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24gU3Ry
aW5nQ2hhckF0IG5vZGUgaGF2aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0gICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHNj
b3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0
IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAg
ICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlMgfHwgcHJlZmVycmVkRm9y
bWF0ID09IERhdGFGb3JtYXRDZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApAQCAtMjc0NiwzNDUgKzMxMTUsMjEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsK
LSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6QW55VHlwZWRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0Ogot
ICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoKLSAgICAgICAgY2FzZSBB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9m
aWxlZDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIGFy
cmF5IG1vZGUgdHlwZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlVuZGVjaWRlZDogewotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGlu
ZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOwotICAgICAgICAgICAgR1BSUmVn
IGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7Ci0KLSAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJl
c3VsdEdQUik7Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNl
Q2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkJpZ1VpbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAg
ICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBP
YmplY3RVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5
bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN5bWJvbChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHku
Z3ByKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICAgICAgICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0Lmdw
cigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwot
ICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6Om9w
dGlvbmFsPEdQUlRlbXBvcmFyeT4gc3R1YkluZm87Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwot
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgcHJvcGVydHkpOwot
Ci0gICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAg
ICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Ci0gICAgICAg
ICAgICAgICAgc3R1YkluZm8uZW1wbGFjZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBzdHViSW5m
b0dQUiA9IHN0dWJJbmZvLT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOwotCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2Rl
LT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0g
bV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElm
TmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVnaXN0
ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICghbV9z
dGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2Vs
bCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENl
bGwoYmFzZUdQUikpOwotCi0gICAgICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9y
aWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAotICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQ
UiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKLQotICAgICAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUo
U3BlY1N0cmluZykpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KS5pc1R5cGUoU3BlY1N5bWJvbCkpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNTeW1ib2wgPSB0cnVlOwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aChtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0
YUlDKEpJVFR5cGU6OkRGR0pJVCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1Bh
dGhHZW5lcmF0b3I+IHNsb3dQYXRoOwotICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJ
QyhKSVRUeXBlOjpERkdKSVQpKSB7Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0
aElDQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1Yklu
Zm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3Ry
dWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uR2V0QnlW
YWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2lu
KSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAot
ICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBn
ZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNs
b3dQYXRoLmdldCgpKTsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUo
c2xvd1BhdGgpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlmIChu
b2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICAgICAgICAgIG1faml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewotICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5
OjpDb250aWd1b3VzKTsKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90
SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbm90SG9sZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwg
SlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9ybWF0
SlMpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBp
bGVHZXRCeVZhbChub2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0
YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
ICAgICAgICAgc3dpdGNoIChwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIGNhc2UgRGF0
YUZvcm1hdERvdWJsZToKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOwotCi0gICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCByZXN1bHRSZWcpOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBkb25lID0g
bV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIHNsb3dD
YXNlcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdh
dGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigwKSkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0UmVnKTsKLSAgICAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJl
ZykpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJv
cGVydHlSZWcpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotCi0gICAgICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIEZQUlJl
ZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIHJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUo
KS5pc0luQm91bmRzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJ
Zk5hTihyZXN1bHRSZWcpKTsKLSAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVn
LCBub2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzU2FuZUNoYWluKCkgJiYgIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3Ro
ZXIpOwotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwot
ICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BS
VGVtcG9yYXJ5PiByZXN1bHQ7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEdQUlJlZz4gcmVz
dWx0UmVnOwotICAgICAgICAgICAgaWYgKCFyZXN1bHRJc1VuYm94ZWQpIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQuZW1wbGFjZSh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXN1bHRSZWcgPSBy
ZXN1bHQtPmdwcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7Ci0gICAgICAgICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCksIHRlbXBSZWcpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZC
b3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRJc1VuYm94ZWQp
IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRp
YyBjb25zdCBkb3VibGUgTmFOID0gUE5hTjsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9h
ZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4pLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdCh0
ZW1wUmVnLCBub2RlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAg
ICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAg
ICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCAqcmVz
dWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoKnJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgICAgICBib3hE
b3VibGUodGVtcFJlZywgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAg
ICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGRlZmF1
bHQ6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3Jt
YXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50MzIpOworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVn
IGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOwotICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0UmVn
KTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1
bHRSZWcpKTsKLSAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJh
eTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgot
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgotICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICBjYXNl
IEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAg
ICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENs
YW1wZWRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheTogewotICAgICAgICAgICAgVHlwZWRB
cnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAg
ICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAg
ICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKQEAgLTM1ODEsNyArMzYyNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IGZhbHNlOwotICAgICAgICBzZXRJbnRU
eXBlZEFycmF5TG9hZFJlc3VsdChub2RlLCByZXN1bHRHUFIsIHR5cGUsIGNhblNwZWN1bGF0ZSk7
CisgICAgICAgIGNvbnN0ZXhwciBib29sIHNob3VsZEJveCA9IGZhbHNlOworICAgICAgICBzZXRJ
bnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCB0eXBl
LCBjYW5TcGVjdWxhdGUsIHNob3VsZEJveCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC01MjkxLDExICs1MzM3LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5kZXhlZFBy
b3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHksIHNj
b3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAgdW5i
bGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAg
IGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRl
eCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOworCisgICAgICAgIGNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwg
c2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBz
dGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1
bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CkBAIC01MzE1LDYgKzUzNjksNDIg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21w
aWxlVG9JbmRleFN0cmluZyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxlRW51
bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZTogeworICAgICAgICBjb21w
aWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBjb21w
aWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAg
ICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJh
dG9ySW5CeVZhbChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVt
ZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBQcm9maWxl
VHlwZTogewogICAgICAgICBjb21waWxlUHJvZmlsZVR5cGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lz
dGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAKaW5kZXggMTE3NmQzZTdhZjI4MzMyYjAzMDc0MWI0ZDljNDBmMGJlZjFk
MDM4Yi4uNWY1MWYyMjUxMDRmOWJhNTIyNjk4ZGQwMzY3NWJkZDViZTI3NWZhYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwCkBAIC0yNzMsNiArMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNl
IFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBOdWtlU3Ry
dWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5
OgorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICAgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoK
ICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtMzUyLDYgKzM1Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0
QnV0dGVyZmx5OgorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAg
ICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bERpcmVjdDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAppbmRleCAy
ZTJmMDdkZmM3ZThjMTNkZGIwZWRkNWEyZDA3YTVkODcyZTE3OTA4Li45ZWQ4NzEzM2Y3NzIzMGUw
ZTFiZDQ0NWYzMDYyMzQzN2ZjZDYzNDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApAQCAtMTE0LDYgKzExNCw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkgXAogICAg
IG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3JfbW9kZVNldCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2Rl
U2V0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmxhZ3MsIEpTUm9wZVN0cmlu
Zzo6b2Zmc2V0T2ZGbGFncygpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2xlbmd0aCwgSlNS
b3BlU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2Zp
YmVyMCwgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVyMCgpKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggYTFhNWZkMjQ0Y2YyMTEwMzI2
NDE5N2E3NmFlMzBjN2Y2MGY3OWU2NC4uNmU1ZDEwZDQzMzdjN2EzZGE2MTIzYjM1MGU2OGUyNzlm
MTBiNWI2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcApAQCAtMjk4LDYgKzI5OCwxMyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKICAg
ICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5n
OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
SW5kZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBj
YXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
IGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgQm90dG9tVmFsdWU6CiAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDZm
ZTI5ZDk5ZmE0NDE0OWMxNDZiMjFhYjQxMDRjNDA4MDM2OWYzNzEuLjlmYzJjNmZmNzRlMDA0NTI5
NWI0MzA5NmY5MzVmMDY0N2ExZWRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTEwMiw2ICsxMDIsOCBAQAogI2luY2x1ZGUgPHd0Zi9S
ZWN1cnNhYmxlTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3JkZXJlZFNldC5oPgogCisj
aW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisKICN1bmRlZiBSRUxFQVNFX0FTU0VSVAogI2RlZmlu
ZSBSRUxFQVNFX0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAogICAgIGlmICghKGFzc2VydGlvbikp
IHsgXApAQCAtMTU1OCw2ICsxNTYwLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVG9JbmRl
eFN0cmluZzoKICAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToK
KyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6
CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5h
bWU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
KyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICAgICAgY29tcGls
ZUVudW1lcmF0b3JJbkJ5VmFsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckhh
c093blByb3BlcnR5KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVja1N0
cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVk
aWF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MDIwLDcgKzUwNDMsNyBAQCBwcml2YXRl
OgogICAgICAgICAvLyB3ZSBkb21pbmF0ZSB0aGVtLgogICAgIH0KICAgICAKLSAgICB2b2lkIGNv
bXBpbGVHZXRCeVZhbCgpCisgICAgTFZhbHVlIGNvbXBpbGVHZXRCeVZhbEltcGwoKQogICAgIHsK
ICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA0Nyw4ICs1MDcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4g
c3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAgICAgICAgICAgICAgICAgIGVuc3VyZVN0
aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsK
LSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBtX291
dC5uZXdCbG9jaygpOwpAQCAtNTA4MCw4ICs1MTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdl
IGFsaXZlLgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFy
cmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJh
c2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQs
IHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
X291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CkBAIC01MTAwLDggKzUxMjEs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1Zh
bHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RF
cXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBtX25vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZC
b3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNB
c090aGVyKTsKQEAgLTUxNDEsMTggKzUxNjIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAg
ICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKQotICAgICAgICAgICAgICAgIHNldERvdWJsZSht
X291dC5waGkoRG91YmxlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1
bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisKKyAgICAg
ICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CiAgICAgICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkp
OwogCiAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9ub2Rl
LCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICBz
ZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogewpAQCAtNTE2OSw4ICs1MTg4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwg
bnVsbHB0ciwgaXNPdXRPZkJvdW5kcyk7CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFk
ZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuRGly
ZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAg
ICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRk
cmVzcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRz
ID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUxOTIsOCArNTIxMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNs
b3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
U2NvcGVkQXJndW1lbnRzOiB7CkBAIC01MjQ2LDggKzUyNjMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQs
IG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgpAQCAtNTI1NiwyNCArNTI3MiwyMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFp
bnMobV9ub2RlKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25H
ZXRCeVZhbE9iamVjdFN5bWJvbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAg
ICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG9w
ZXJhdGlvbkdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAg
ICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAx
KSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwpA
QCAtNTM3Myw4ICs1Mzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgICAgIH0pOwogCi0gICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CkBAIC01MzkwLDggKzU0MDIsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFs
dWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2Ug
YWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01NDE3LDEz
ICs1NDI4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFs
aXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJ
bnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7
CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsK
LSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaW5nQ2hhckF0SW1wbCgpOwogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpAQCAtNTQ0OCw5
ICs1NDU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvYWRGcm9tSW50VHlwZWRBcnJheShwb2ludGVyLCB0eXBlKTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdl
IGFsaXZlLgogICAgICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsK
LSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0LCB0
eXBlLCBjYW5TcGVjdWxhdGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwpAQCAtNTQ2OSw4ICs1
NDc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUu
CiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAg
ICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAt
NTQ4MCw4ICs1NDg2LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVz
aW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGNvbXBpbGVHZXRC
eVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAg
ICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOworICAgICAgICAgICAg
c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlw
ZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBAIC04NTcxLDcgKzg1OTMsNyBAQCBwcml2
YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgZW1w
dHlSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlU3Ry
aW5nQ2hhckF0KCkKKyAgICBMVmFsdWUgY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKQogICAgIHsK
ICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dTdHJpbmcobV9ncmFwaC5jaGlsZChtX25vZGUsIDAp
KTsKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC5jaGlsZChtX25vZGUs
IDEpKTsKQEAgLTg2NzksNyArODcwMSwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVw
IGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50
NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgcmVzdWx0cyk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICB7CisgICAgICAg
IHNldEpTVmFsdWUoY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKSk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQpAQCAtMTI5MDYsMTcgKzEyOTMzLDE2IEBA
IHByaXZhdGU6CiAgICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xv
d1BhdGhPcGVyYXRpb24pCisgICAgTFZhbHVlIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJbXBs
KExWYWx1ZSBpbmRleCwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQogICAg
IHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dD
ZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRl
eCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CiAgICAgICAgIEFy
cmF5TW9kZSBtb2RlID0gbV9ub2RlLT5hcnJheU1vZGUoKTsKIAogICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgog
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3Rv
cmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAg
ICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIEluZGV4
ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtb2RlLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwogICAg
ICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5k
ZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwpAQCAtMTI5NTEsMTEgKzEyOTc3LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0
Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwg
Y2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFy
cmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0b3Jh
Z2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSW5kZXhlZEFic3Ry
YWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXM7CiAgICAgICAg
ICAgICAKQEAgLTEyOTg5LDEyICsxMzAxNCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNoZWNrSG9s
ZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0b3Jh
Z2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBt
X291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
bV9vdXQubmV3QmxvY2soKTsKQEAgLTEzMDI2LDE3ICsxMzA1MCwyMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xl
UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAg
ICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1Bh
dGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSkpOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubm90WmVybzY0KHZt
Q2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCks
IGJhc2UsIGluZGV4KSk7CiAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQg
Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVy
YXRpb24pCisgICAgeworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBzZXRCb29sZWFuKGNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHlJbXBsKGluZGV4LCBzbG93UGF0aE9wZXJhdGlvbikpOworICAgIH0KKwogICAg
IHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpCiAgICAgewogICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmln
aW4uc2VtYW50aWMpOwpAQCAtMTMyMTcsNiArMTMyNDUsMjQ3IEBAIHByaXZhdGU6CiAgICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwgaW5kZXgpKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2Vs
bChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworCisgICAgICAgIGlmIChtX25vZGUt
PmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25v
ZGUsIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSk7CisKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGluY3JlbWVudCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBjaGVja0hhc1Byb3BlcnR5ID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihp
bmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5kZXhGb3JIYXNQcm9w
ZXJ0eSA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9v
dXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGluY3Jl
bWVudCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAg
ICAgICAgTFZhbHVlIGluZGV4UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgpOwor
ICAgICAgICAgICAgTFZhbHVlIGluY3JlbWVudGVkSW5kZXggPSBtX291dC5hZGQoaW5kZXhQaGks
IG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3JlbWVudGVk
SW5kZXhSZXN1bHQgPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBmaW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291dC5hbmNob3IoaW5j
cmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubGVzc1RoYW4o
aW5jcmVtZW50ZWRJbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
aGVja0hhc1Byb3BlcnR5KTsKKyAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUluZGV4ID0gbV9v
dXQucGhpKEludDMyLCBpbml0aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSwgaW5jcmVtZW50ZWRJbmRl
eFJlc3VsdCk7CisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4UGhpLCBt
X291dC5hbmNob3IocHJvcGVydHlJbmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
ZmluYWxQcm9wZXJ0eUluZGV4ID0gbV9vdXQuYW5jaG9yKHByb3BlcnR5SW5kZXgpOworICAgICAg
ICAgICAgTFZhbHVlIGhhc1Byb3BlcnR5ID0gY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwo
cHJvcGVydHlJbmRleCwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBtX291dC5icmFuY2goaGFzUHJvcGVydHksIHVuc3VyZShjb250aW51YXRpb24p
LCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgZmluYWxJbmRleCA9IG1fb3V0LnBoaShJbnQz
MiwgZmluYWxJbmNyZW1lbnRlZEluZGV4LCBmaW5hbFByb3BlcnR5SW5kZXgpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGZpbmFsSW5kZXgsIEludDY0
KSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50
NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgPDwgMzIpKSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBFZGdlJiBiYXNlRWRnZSA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+ZW51
bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUg
JiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSBi
YXNlID0gbG93Q2VsbChiYXNlRWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUs
IG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwgbV9o
ZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFw
cy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdEVx
dWFsKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcl9tb2RlU2V0KSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok5hbWVkTW9kZSkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRl
eCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
aXNaZXJvMzIobW9kZSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7
CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChp
bmRleCwgbV9vdXQuaW50MzJPbmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgIGluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVk
SW5kZXgpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0
KGluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3Rh
dGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSA8
PCAzMikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1
ZSBiYXNlID0gbG93SlNWYWx1ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxs
KEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCgpCisgICAg
eworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KTsKKworICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihib3hlZFBhaXIpKTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKCkKKyAgICB7
CisgICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
OworCisgICAgICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LmxT
aHIoYm94ZWRQYWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQzMiht
X291dC5iaXRBbmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNvdmVyeSBmb3IgdGhp
cyBub2RlIHNpbmNlIGl0J3MgImVmZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxpdmUgaW4gYnl0ZWNv
ZGUuCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKQor
ICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwg
b3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7CisgICAgfQorCisgICAgdm9p
ZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIEVkZ2UgYmFzZUVk
Z2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAgIEVkZ2UgcHJvcGVy
dHlOYW1lRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKTsKKyAgICAgICAgRWRn
ZSBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKKyAgICAgICAg
RWRnZSBpbmRleEVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMyk7CisKKyAgICAg
ICAgTFZhbHVlIGJhc2UgPSBERkc6OmlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpID8gbG93Q2Vs
bChiYXNlRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSA6IGxvd0pTVmFsdWUoYmFzZUVk
Z2UpOworCisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gc3RvcmFnZUVkZ2UgPyBsb3dTdG9yYWdl
KHN0b3JhZ2VFZGdlKSA6IG51bGxwdHI7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gbWF0ZXJpYWxp
emUgdGhlIHByb3BlcnR5TmFtZSBoZXJlIGluIGNhc2UgaXQgcmVxdWlyZXMgYm94aW5nIHNpbmNl
IHRoZSBJQyBwYXRoIHdvbid0IGRvbWluYXRlIHN1YnNlcXVlbnQgdXNlcyBpbiBzdWJzZXF1ZW50
IG5vZGVzLgorICAgICAgICAvLyBJZiBpdCdzIGFuIEludDMyIGFuZCB3ZSB1c2UgaXQgYXMgc3Vj
aCB0aGlzIGJveGluZyB3aWxsIGJlIERDRSdkIGJ5IGIzIGxhdGVyIGFueXdheS4KKyAgICAgICAg
bG93SlNWYWx1ZShwcm9wZXJ0eU5hbWVFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwor
CisKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIoaW5kZXhFZGdlKTsKKyAgICAgICAg
TFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNCkpOwor
ICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDUpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjaGVja1N0cnVjdHVyZUJsb2NrID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJbmxpbmVPck91dE9m
TGluZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5l
TG9hZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZM
aW5lTG9hZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZ2Vu
ZXJpY0lDQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIExWYWx1ZSBpc05vdE5hbWVk
ID0gbV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okdl
bmVyaWNNb2RlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE5hbWVkLCB1bnN1cmUoZ2Vu
ZXJpY0lDQmxvY2spLCB1bnN1cmUoY2hlY2tTdHJ1Y3R1cmVCbG9jaykpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNoZWNrU3RydWN0dXJlQmxvY2spOworICAgICAgICAvLyBUT0RPIGNoZWNr
IGNlbGw/CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRDsKKyAgICAgICAgYXV0byBzdHJ1Y3R1
cmUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2Uubm9kZSgpKS5tX3N0cnVjdHVyZS5vbmx5U3Ry
dWN0dXJlKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpCisgICAgICAgICAgICBzdHJ1Y3R1cmVJ
RCA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxf
c3RydWN0dXJlSUQpOworCisgICAgICAgIExWYWx1ZSBoYXNFbnVtZXJhdG9yU3RydWN0dXJlID0g
bV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBz
LkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpOworCisgICAgICAg
IFZhbHVlRnJvbUJsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0OworICAgICAgICBpZiAo
aW5kZXhFZGdlLm5vZGUoKSA9PSBwcm9wZXJ0eU5hbWVFZGdlLm5vZGUoKSkgeworICAgICAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJhZFN0cnVjdHVy
ZVNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaCho
YXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9j
ayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhiYWRTdHJ1Y3R1cmVTbG93UGF0aCk7CisgICAgICAgICAgICBiYWRTdHJ1Y3R1cmVTbG93UGF0
aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVudW1lcmF0b3JS
ZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBp
bmRleCwgZW51bWVyYXRvcikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5lT3JPdXRPZkxp
bmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBpbmxpbmVD
YXBhY2l0eSA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVz
ID0gZmFsc2U7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGhhc05vT3V0
T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAg
ICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5KQor
ICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9o
ZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOworICAg
ICAgICBMVmFsdWUgaXNJbmxpbmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291dC5p
bnQzMk9uZSA6IG1fb3V0LmJlbG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChpc0lubGluZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayksIHVuc3VyZShvdXRP
ZkxpbmVMb2FkQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkQmxv
Y2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmxpbmVSZXN1bHQgPSBtX291dC5hbmNob3Io
CisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVy
dGllcy5hdEFueU51bWJlcigpLAorICAgICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQo
aW5kZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9hZEJsb2NrKTsKKyAgICAgICAgaWYgKCFzdG9yYWdlKQor
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVj
dF9idXR0ZXJmbHkpOworCisgICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBtX291dC5zaWduRXh0
MzJUbzY0KAorICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgaW5saW5lQ2Fw
YWNpdHkpKSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAq
IHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGlu
ZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5i
YXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJ
bmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZ2VuZXJpY0lD
QmxvY2spOworICAgICAgICBMVmFsdWUgZ2VuZXJpY1Jlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbElt
cGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCku
dHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAg
ICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKQorICAgICAgICAg
ICAgICAgIGdlbmVyaWNSZXN1bHQgPSBib3hJbnQzMihnZW5lcmljUmVzdWx0KTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnZW5lcmljUmVzdWx0ID0gc3RyaWN0SW50NTJUb0pT
VmFsdWUoZ2VuZXJpY1Jlc3VsdCk7CisgICAgICAgIH0gZWxzZSBpZiAoZ2VuZXJpY1Jlc3VsdC0+
dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBib3hEb3VibGUo
Z2VuZXJpY1Jlc3VsdCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShJbnQ2NCwgZ2VuZXJpY0lDUmVzdWx0LCBvdXRP
ZkxpbmVSZXN1bHQsIGlubGluZVJlc3VsdCk7CisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93
UGF0aFJlc3VsdCkKKyAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocmVzdWx0LCBi
YWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdCk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAg
ICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5cGUg
c2xvd1BhdGhGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAg
ICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAg
ICAgIExWYWx1ZSBiYXNlID0gYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UgPyBsb3dDZWxs
KGJhc2VFZGdlKSA6IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBMVmFsdWUgcHJvcGVy
dHlOYW1lID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAg
ICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MikpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAzKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgNCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTmFtZWRC
bG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbEJsb2Nr
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbWF0Y2hlc1N0cnVjdHVy
ZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0aW9u
QmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC50ZXN0
Tm9uWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpKSwgdW5zdXJlKGlzTmFtZWRCbG9jayksIHVuc3VyZShvcGVyYXRpb25CbG9j
aykpOworICAgICAgICBtX291dC5hcHBlbmRUbyhpc05hbWVkQmxvY2spOworCisgICAgICAgIG1f
b3V0LmJyYW5jaChpc0NlbGwoYmFzZSwgcHJvdmVuVHlwZShiYXNlRWRnZSkpLCB1bnN1cmUoaXND
ZWxsQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhpc0NlbGxCbG9jayk7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0Lmxv
YWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSksCisgICAg
ICAgICAgICB1c3VhbGx5KG1hdGNoZXNTdHJ1Y3R1cmVCbG9jayksIHJhcmVseShvcGVyYXRpb25C
bG9jaykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1hdGNoZXNTdHJ1Y3R1cmVCbG9jayk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5hbWVkUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG9wZXJhdGlvbkJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgb3BlcmF0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbih2bUNhbGwoSW50
NjQsIHNsb3dQYXRoRnVuY3Rpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHBy
b3BlcnR5TmFtZSwgaW5kZXgsIG1vZGUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1bHQsIG9wZXJhdGlvblJlc3VsdCkp
OworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCkKKyAgICB7Cisg
ICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRvcklu
QnlWYWwpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eSgpCisgICAgeworICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJhdGlv
bkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CisgICAgfQogICAgIAogICAgIHZvaWQgY29tcGls
ZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCkKICAgICB7CkBAIC0xNzM0NCw3ICsxNzYxMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX25vZGUtPnNob3VsZFNw
ZWN1bGF0ZUludDMyKCkgJiYgY2FuU3BlY3VsYXRlKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGUo
CiAgICAgICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVz
c1RoYW4ocmVzdWx0LCBtX291dC5pbnQzMlplcm8pKTsKQEAgLTIwMjk2LDYgKzIwNTY1LDI3IEBA
IHByaXZhdGU6CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgfQogCisgICAgLy8g
VGhpcyBvbmx5IHdvcmtzIGZvciBpbnRzIHJpZ2h0IG5vdy4KKyAgICBQYXRjaHBvaW50VmFsdWUq
IGRhdGFMb2dGb3JEZWJ1Z2dpbmcoY29uc3QgY2hhciogcHJlZml4LCBMVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHJlc3VsdCA9IG1fb3V0LnBhdGNocG9pbnQo
Vm9pZCk7CisgICAgICAgIHJlc3VsdC0+ZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsK
KyAgICAgICAgcmVzdWx0LT5hcHBlbmQodmFsdWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVn
VDApKTsKKyAgICAgICAgVHlwZSB2YWx1ZVR5cGUgPSB2YWx1ZS0+dHlwZSgpOworICAgICAgICBy
ZXN1bHQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21h
cEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lz
dGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgIGppdC5wcm9iZURlYnVn
KFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWVUeXBlID09IEludDMyKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4ocHJlZml4LCBj
b250ZXh0LmdwcjxpbnQzMl90PihHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8SlNW
YWx1ZT4oR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZh
aWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxh
YmlsaXR5OyB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCmluZGV4IDczMTcxMDA5NmNmM2UyNDk4
YWU0NWRkYTI2YWE4MmU3OWNkNDZhNGUuLjY5N2RlOGQ5OGYxOWRlMzllNDFjNDI0YWI1ODQwOWY0
ZjUxOWIwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNM
LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCkBAIC0xMzgs
NiArMTM4LDcgQEAgbW9kdWxlIERTTAogI2luY2x1ZGUgIkdldEJ5VmFsSGlzdG9yeS5oIgogI2lu
Y2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgi
CisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2Rl
LmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRT
dGF0dXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9S
ZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgK
aW5kZXggNDQ0NjM1ZTk4MGQ5MGFmODM3ZWJkNjNiOTYyZmFlZGUyZWM1MzUwMy4uZDg3OWM5MGJl
MzExNzg2MjMzZjUyNmIxODNlZGYxY2IzYzdiYjM4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDYWxsRnJhbWUq
KTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KENvZGVCbG9jayop
OwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNTY29wZSopOwot
ICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNPYmplY3QqKTsKKyAg
ICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTQ2VsbCopOwogICAgICAg
ICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oRW5jb2RlZEpTVmFsdWUpOwogCiAg
ICAgICAgIGludDMyX3QgaSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCmluZGV4IGM1NmVmNWU0NTU0Y2IxMDNhYmVi
ZTcyZTYyOThmOGM0OGFhZDk4NjAuLjU5M2VmNjY2OGRlMmUwM2E2NTliMzlmMzFhZjYwZjg4YzI3
ODM5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVn
aXN0ZXJJbmxpbmVzLmgKQEAgLTYzLDcgKzYzLDcgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYg
UmVnaXN0ZXI6Om9wZXJhdG9yPShDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNP
YmplY3QqIG9iamVjdCkKK0FMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRv
cj0oSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgdS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKG9iamVjdCkpOwogICAgIHJldHVybiAqdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IGFjOGI1MTM3ZDg1MzU0NTA2YWVlZGNlZGJkMWM1
YmQ3NzI1NzljMDEuLjQxNTllN2U1MDQ5NjkzN2VlMWU1NmFmYjdjMjBhZTljZjJhODllZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtODg5LDcg
Kzg4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoCiAgICAgICAgICAgICBC
ZWxvdywgQWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb3RlIHRoYXQg
Zmlyc3QgYW5kIGxhc3QgYXJlIGluY2x1c2l2ZS4KICAgICBKdW1wIGJyYW5jaElmVHlwZShHUFJS
ZWcgY2VsbEdQUiwgSlNUeXBlUmFuZ2UgcmFuZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCmluZGV4IDQyYjhjYWY1ZjVjYjhjNGI1ZjNhZGViM2VkYTQ3YWIyNjkwZDQ5MDQuLjNh
ODQ1YWFiN2MyNjFmMjU1NDZiNjA3NmM2NTliNjE4Y2E5NGYzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5jcHAKQEAgLTMwOCwxMCArMzA4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQp
CiAgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCiAgICAgICAgIERFRklO
RV9TTE9XX09QKHNwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVf
bGVuZ3RoKQotICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkK
ICAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAgICAg
IERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1Ao
ZW51bWVyYXRvcl9uZXh0KQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2Fy
Z3VtZW50cykKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMp
CiAgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQpAQCAtMzY1
LDYgKzM2Myw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
REVGSU5FX09QKG9wX2dldF9ieV9pZF93aXRoX3RoaXMpCiAgICAgICAgIERFRklORV9PUChvcF9n
ZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X3ZhbCkKKyAgICAg
ICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09Q
KG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRv
cl9oYXNfb3duX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3ByaXZhdGVfbmFt
ZSkKICAgICAgICAgREVGSU5FX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAgICBERUZJ
TkVfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTQ3MywxNCArNDc0LDYgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2Zy
b21fYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX2FyZ3VtZW50cykKIAot
ICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKLSAg
ICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAg
ICAgICAgREVGSU5FX09QKG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBE
RUZJTkVfT1Aob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2RpcmVjdF9wbmFtZSkKLSAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lKQotICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1l
KQotICAgICAgICAgICAgCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5f
cHJvbG9ndWUpCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkK
IApAQCAtNTc4LDYgKzU3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9nZXRfcHJpdmF0ZV9uYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc2V0X3By
aXZhdGVfYnJhbmQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja19wcml2YXRl
X2JyYW5kKQpAQCAtNjA5LDcgKzYwMyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dD
YXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3Bfc3ViKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2VudW1lcmFi
bGVfaW5kZXhlZF9wcm9wZXJ0eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgpAQCAtNjQy
LDExICs2MzUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChub3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKHN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuc3RyaWN0
ZXEpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9kaXJlY3RfcG5hbWUpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9wcm90b3R5cGVfb2YpCi0gICAgICAg
IERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0
eSkKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaGFzX293bl9zdHJ1Y3R1cmVfcHJv
cGVydHkpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CmluZGV4IDQ4N2E1YWM1YjhlNWQ4YTlkODBiMmM2ZDMwNmUwODE1MjFiODI4MTQuLjRmYzlhMDJi
NzI5YTMyOTQ1Yjc1ODRmNzhhMTYzNWRlNmE4YjJmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aApAQCAtNjcwLDIxICs2NzAsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF91bmV4cGVjdGVkX2xvYWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF91cnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBPcENvZGVUeXBlPgotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19lbnVt
ZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Rp
cmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfZW51
bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1
ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Rv
X3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE9wY29kZVR5cGU+CisgICAgICAgIHZvaWQgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KGNvbnN0IE9wY29kZVR5cGUmLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisK
KyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiopOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChj
b25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1
bmN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1w
bChjb25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IE9wY29kZVR5cGUmLCBTbG93UGF0aEZ1bmN0aW9u
VHlwZSk7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9h
ZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90
YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJik7CkBAIC03MzUsNyArNzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0
ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9y
ZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9n
ZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZjZkYjNmNTljNGFhNGUwMjdhMTU2MTFlZGJiYTI2MWNh
ZDhlZmVkNi4uOWJhMTBlZDY3NzJmYWVjM2YyMGU2MzRiYWJlMTRhZGQ5YTEwODkwNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0xNjkyLDQ2ICsxNjkyLDEy
IEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBPcENvZGVUeXBlPgotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9w
cm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENvZGVUeXBlPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0K
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVz
cyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9o
YXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293bl9z
dHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzT3duU3RydWN0
dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2luX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BJblN0cnVj
dHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCiB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgCisKICAg
ICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgCisKICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KICAgICBKdW1w
TGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IGFycmF5TW9kZSwgYmFkVHlwZSwgbnVsbHB0cik7CkBAIC0xNzM5LDcgKzE3MDUsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxl
OjpJbmxpbmVDYWNoZSk7Ci0gICAgCisKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5
VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKIApAQCAtMTc0OCw3ICsxNzE0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJ
WkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRT
dHViUm91dGluZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5k
YXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAKKwogICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7CiAgICAgICAgIGJ5VmFs
SW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAgICAg
ICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHlHZW5lcmljOwpAQCAtMTc1OCwxNzEgKzE3MjQsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dAogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdU
MSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDEpOwotCi0gICAgLy8gVGhp
cyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQz
Mi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2UgY2hlY2sg
dGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0
aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBz
aW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhl
IHRvdGFsIGFsbG9jYXRpb24KLSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4g
QXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5k
aW5nIHRoZSB2YWx1ZQotICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3Mg
dXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRo
YW4gc2lnbgotICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUt
dGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRvV29yZChy
ZWdUMSwgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBw
cm9maWxlKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdU
Mik7Ci0KLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsK
LSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KLSAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlz
dCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1v
ZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0KLSAgICBpZiAoIUpJVENv
ZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNl
KGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwg
ZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwot
Ci0gICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRl
Y29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUs
IG5leHRIb3RQYXRoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9w
cm9wZXJ0eTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0KLSAg
ICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGlu
ZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHlEZWZhdWx0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlW
YWxJbmZvKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVj
bHR5cGUob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCk+KEFkZHJlc3MoR1BSSW5m
bzo6bm9uQXJnR1BSMCwgQnlWYWxJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwg
VHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEs
IEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIFRydXN0ZWRJ
bW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBieVZhbElu
Zm8pOwotCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVj
dHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJl
Z1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVt
ZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vz
cwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdU
MSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVD
YXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zm
c2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICAvLyBPdGhl
cndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdU
MSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9m
ZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVy
Zmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAg
IGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1Qw
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkp
OwotCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJl
Z1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMp
OwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0
ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJl
Z1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2VuZXJpY1BuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFu
Y2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNW
ZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVn
VDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVn
VDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggNGQ3NDEyNmJlMWUzZGU0MzBkM2E2
ZDljYjdmZGRiNmRjODZmN2ViNC4uMmFlM2EwNGEzYzVmZDJmNjk0MDJjMjVhM2VlM2Y3NDQ4MjRj
OTc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cApAQCAtMTE0MiwyMjcgKzExNDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgot
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcENvZGVUeXBlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3Qg
PSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJl
Z1QwKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHlJbXBsPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rp
b24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVu
dEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9v
cF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEluU3RydWN0dXJlUHJvcGVydHk+KGN1cnJl
bnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5
cGU7Ci0gICAgCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtl
IFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExv
YWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUsIG51
bGxwdHIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxv
Y2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICAKLSAgICBwYXRjaEJ1
ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLQotICAg
IHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLQotICAgIGJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBt
X2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAi
QmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAl
cCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dl
ZFZhbHVlKCkpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbElu
Zm8tPm1fYmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3Mp
KSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHlHZW5lcmljKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwot
ICAgIAotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCBy
ZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotCi0gICAg
Ly8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBh
biBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2Ug
Y2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rv
ckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNp
Z25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2lu
Y2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KLSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4g
NEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQg
ZXh0ZW5kaW5nIHRoZSB2YWx1ZQotICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNl
IGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0
aGVyIHRoYW4gc2lnbgotICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIg
dG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRv
V29yZChyZWdUMSwgcmVnVDEpOwotCi0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5n
U2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJh
eU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8gRklY
TUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1
bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUw
MzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVu
dEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAg
IAotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0
aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlW
YWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1
bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0uYnlWYWxJbmZvOwotCi0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAot
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWQocHJvcGVydHks
IHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwg
YnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0g
ICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5h
bWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZp
cnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMg
YSBjZWxsCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8g
Q29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMik7Ci0g
ICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGlu
ZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5l
QWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkp
LCByZWdUMCk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQs
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxv
YWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25l
ID0ganVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgbmVnMzIocmVnVDIpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRP
ZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDMyKEJhc2VJ
bmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQz
MihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVy
dHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7
Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
KTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29k
ZS5tX2luZGV4OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1p
dExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MigwKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxp
bmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAg
IGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0gICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLQotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKLSAg
ICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRz
LmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLSAgICAKLSAg
ICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKLX0K
LQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggMTVlMWQzNDU3OWI2ZDRjOGMxNzBkMjM1MGM2YzM2
NDQzZmZlYTQxNS4uZDU5NDU2MjI1ODg5MTVlNzg4Njk5NGQyNmIwOGM5NjcyM2Y3NGFjYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAg
LTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisjaW5j
bHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKQEAg
LTg2LDEwICs4NywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29k
ZVR5cGU+Cit2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5
cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwpAQCAtMTM2LDYgKzEzNywxMSBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8UwogICAgIH0KIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xv
d0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpLCBpdGVyKTsKK30KKwog
I2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRo
dW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihW
TSYgdm0pCiB7CkBAIC0zNTQwLDYgKzM1NDYsMTM2IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0
QnlWYWw+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZp
cnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdpc3Rl
ciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVj
b2RlLm1fcHJvcGVydHlOYW1lOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKKworICAgIGF1dG8g
cmVzdWx0R1BSID0gcmVnVDA7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworCisgICAgb3I4KHJlZ1Qy
LCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAg
Ly8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KKyAgICBKdW1wIGlzTm90
TmFtZWRNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6R2VuZXJpY01vZGUpKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMCkpOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7CisgICAgSnVtcCBzdHJ1Y3R1cmVN
aXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAv
LyBDb21wdXRlIHRoZSBvZmZzZXQuCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwg
cmVnVDEpOworICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICBKdW1w
IG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3Mo
cmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZz
ZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpKSwgcmVnVDApOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7
CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZXN1bHRH
UFIpOworCisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gT3RoZXJ3aXNl
IGl0J3Mgb3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1Qw
KTsKKyAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgbmVnMzIocmVnVDEpOwor
ICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgaW50MzJfdCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShm
aXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5KSwgcmVzdWx0R1BSKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBz
dHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0Y2gp
LCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworCisgICAgaXNOb3ROYW1lZE1vZGUu
bGluayh0aGlzKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCBy
ZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
KTsKKyAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworCisgICAgaXNOb3RJbmRleGVkLmxpbmso
dGhpcyk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwg
cHJvZmlsZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1Qx
KTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ss
IEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVy
U2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsK
KyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgaWYgKCFKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xv
d1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dl
dEJ5VmFscy5hcHBlbmQoZ2VuKTsKKworICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOworCisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAg
Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2V0QnlWYWw+KCksIGl0ZXIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlw
ZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJh
dG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVy
YWxDYXNlKQoreworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOworICAgIG9yOChyZWdUMCwg
QWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworCisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93Q2FzZXMubGlu
ayh0aGlzKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBnZW5lcmFsQ2FzZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKwor
ICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
bWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKSwgc2xvd19wYXRoX2VudW1l
cmF0b3JfaW5fYnlfdmFsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNf
b3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpLCBzbG93
X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNThlNWQ1MmZlNWIwOGFl
MjllM2U1ZGRkZTNkNzQ2Nzk2N2YyMzAxOS4uMjU3Y2FlYTI3ODY4ODNiYmEwOGM3YTJjNGIyMzhk
NTA0NGU3Mjk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC0xNTA1LDYgKzE1MDUsMjUgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZh
bD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3Jf
aW5fYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNhMDAx
YTU2NTVlYTFiYjFkYjU5NTczY2Y2MDguLmU3MTgzYTcyYTM2OGYxYTI4MDQ2ODRkMmIwNzY0N2Yy
MjA2OGYxMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KQEAgLTE5OTIsMTkgKzE5OTIsMTQgQEAgc2xvd1BhdGhPcChjcmVh
dGVfZ2VuZXJhdG9yKQogc2xvd1BhdGhPcChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQogc2xvd1Bh
dGhPcChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCiBzbG93UGF0aE9wKGRlZmluZV9kYXRhX3By
b3BlcnR5KQotc2xvd1BhdGhPcChlbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCi1zbG93UGF0aE9w
KGVudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKQogc2xvd1BhdGhPcChnZXRfYnlfdmFsX3dpdGhf
dGhpcykKLXNsb3dQYXRoT3AoZ2V0X2RpcmVjdF9wbmFtZSkKLXNsb3dQYXRoT3AoZ2V0X2VudW1l
cmFibGVfbGVuZ3RoKQogc2xvd1BhdGhPcChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLXNsb3dQ
YXRoT3AoaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoaGFzX2Vu
dW1lcmFibGVfcHJvcGVydHkpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfbmV4dCkKK3Nsb3dQYXRo
T3AoZW51bWVyYXRvcl9nZXRfYnlfdmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2luX2J5X3Zh
bCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogCiBpZiBub3QgSlNW
QUxVRTY0Ci0gICAgc2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkp
Ci0gICAgc2xvd1BhdGhPcChoYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICBzbG93UGF0
aE9wKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICBzbG93UGF0aE9wKGdldF9wcm90b3R5cGVf
b2YpCiBlbmQKIApAQCAtMjAyMSw3ICsyMDE2LDYgQEAgc2xvd1BhdGhPcChyZXNvbHZlX3Njb3Bl
X2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKIHNsb3dQYXRoT3Aoc3ByZWFkKQogc2xv
d1BhdGhPcChzdHJjYXQpCiBzbG93UGF0aE9wKHRocm93X3N0YXRpY19lcnJvcikKLXNsb3dQYXRo
T3AodG9faW5kZXhfc3RyaW5nKQogc2xvd1BhdGhPcCh0eXBlb2YpCiBzbG93UGF0aE9wKHR5cGVv
Zl9pc19vYmplY3QpCiBzbG93UGF0aE9wKHR5cGVvZl9pc19mdW5jdGlvbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5k
ZXggYmQ4ODU1ZWJmZDZmYzE5YjE1YzFiNTg4NmQ0ZmE1NTY0MzgyZDg3ZC4uOGE1ZjdkMjNlNjQ3
NjNiYTI1OWUxYjJjNWQ4N2Y4ZDE2YjgyOWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTMxNDEsMzQgKzMx
NDEsNiBAQCBsbGludE9wKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsLCBPcExvZ1NoYWRvd0No
aWNrZW5UYWlsLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaQogICAgIGRpc3BhdGNoKCkKIGVuZCkKIAot
bWFjcm8gaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVy
biwgc2xvd1BhdGhDYWxsKQotICAgIGdldChtX2Jhc2UsIHQwKQotICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUoc2l6ZSwgdDAsIHQxKQotICAgIGJ0cW56IHQxLCBub3RDZWxsTWFzaywgLnNsb3dQ
YXRoCi0KLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2VudW1lcmF0b3IsIHQwKQotICAgIGxvYWRp
IEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MV0sIHQxCi0gICAgYmluZXEgdDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6bV9jYWNoZWRTdHJ1Y3R1cmVJRFt0MF0sIC5zbG93UGF0aAotCi0gICAg
cmV0dXJuKFZhbHVlVHJ1ZSkKLQotLnNsb3dQYXRoOgotICAgIGNhbGxTbG93UGF0aChzbG93UGF0
aENhbGwpCi0gICAgZGlzcGF0Y2goKQotZW5kCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2hhc19l
bnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJv
cGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0
dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhf
aGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9wV2l0aFJl
dHVybihvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1Y3R1
cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0aF9o
YXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4ob3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5LCBPcEluU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNp
emUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3Bl
cnR5KQotZW5kKQotCiBvcChmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50LCBtYWNy
byAoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAogICAgIGxvYWRwIENvZGVCbG9jazo6
bV9nbG9iYWxPYmplY3RbdDBdLCB0MApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggMTEyOTU0YmI5YjZlNTAxMzY4ODNiNzQ1NmNi
MWU4MzE4ZmI1YTUxMS4uYjE1ZDM1NDgwMTliNzJlZDFkNjgzNzc1M2YzMDI2MDI2MGVhM2RhMyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCkBAIC05NjIsMTYxICs5NjIsMTM3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfdG9fcHJvcGVydHlfa2V5KQogICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5tX3Ny
YykuanNWYWx1ZSgpLnRvUHJvcGVydHlLZXlWYWx1ZShnbG9iYWxPYmplY3QpKTsKIH0KIAotSlND
X0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgp
CitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVt
ZXJhdG9yKQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdl
dEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdG9yVmFsdWUgPSBHRVRf
QyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBpZiAoZW51bWVyYXRvclZhbHVlLmlz
VW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisgICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIGlm
IChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKHZtLmVtcHR5
UHJvcGVydHlOYW1lRW51bWVyYXRvcigpKTsKIAotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihlbnVtZXJh
dG9yVmFsdWUuYXNDZWxsKCkpOworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4o
anNOdW1iZXIoZW51bWVyYXRvci0+aW5kZXhlZExlbmd0aCgpKSk7CisgICAgUkVUVVJOKHByb3Bl
cnR5TmFtZUVudW1lcmF0b3IoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7CiB9CiAKLUpTQ19ERUZJTkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0
KQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1l
cmFibGVJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVu
dW1lcmF0b3JOZXh0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSku
anNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVl
KCk7Ci0gICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5z
dHJ1Y3R1cmUodm0pKTsKLSAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzJBc0FueUludCgpKTsK
LSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxP
YmplY3QsIHByb3BlcnR5LmFzVUludDMyQXNBbnlJbnQoKSkpKTsKLX0KKyAgICBSZWdpc3RlciYg
bW9kZVJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1fbW9kZSk7CisgICAgUmVnaXN0ZXImIGluZGV4
UmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAgUmVnaXN0ZXImIG5hbWVSZWdp
c3RlciA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQot
ewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVj
b2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3Bl
cnR5KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7
Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS0+c3RydWN0
dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAgICAg
ICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKLSNlbmRpZgotICAgIEpTU3RyaW5nKiBzdHJpbmcg
PSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRv
SWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJF
VFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lKSkpOwotfQorICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TW9kZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigp
KTsKKyAgICB1aW50MzJfdCBpbmRleCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMy
KCk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1
Y3R1cmVfcHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VU
X0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQot
ICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCku
YXNDZWxsKCkpOwotICAgIGlmIChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVj
dHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAg
ICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKKyAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
R0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQoIWJhc2VW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1
ZS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIG1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlLT5zdHJ1Y3R1cmVJ
RCgpKTsKIAotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
anNWYWx1ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIEpTU3RyaW5n
KiBuYW1lID0gZW51bWVyYXRvci0+Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRl
eCwgbW9kZSk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNCb29sZWFu
KG9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVy
dHlOYW1lKSkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KG1vZGUpOworICAgIG1vZGVSZWdpc3RlciA9IGpzTnVtYmVyKHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KG1vZGUpKTsKKyAgICBpbmRleFJlZ2lzdGVyID0ganNOdW1iZXIoaW5kZXgp
OworICAgIG5hbWVSZWdpc3RlciA9IG5hbWUgPyBuYW1lIDoganNOdWxsKCk7CisgICAgRU5EKCk7
CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0dXJl
X3Byb3BlcnR5KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJh
dG9yX2dldF9ieV92YWwpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU1ZhbHVlIGJhc2UgPSBHRVRfQyhi
eXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxs
KCkpOwotICAgIGlmIChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2
bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVU
VVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VU
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9w
ZXJ0eS5pc1N0cmluZygpKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6
b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZSwgYXNTdHJpbmcocHJvcGVydHkpKSkpOwotfQor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0
byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQo
Ynl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9l
bnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAgICBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNJbnQz
MigpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGU6IHsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkp
OworICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZTogeworICAgICAgICAgICAgaWYg
KGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkg
PT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkgeworICAgICAgICAgICAgICAgIC8v
IFdlJ2xsIG9ubHkgbWF0Y2ggdGhlIHN0cnVjdHVyZSBJRCBpZiB0aGUgYmFzZSBpcyBhbiBvYmpl
Y3QuCisgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFz
ZVZhbHVlLmdldE9iamVjdCgpLT5nZXREaXJlY3QoaW5kZXggPCBlbnVtZXJhdG9yLT5jYWNoZWRJ
bmxpbmVDYXBhY2l0eSgpID8gaW5kZXggOiBpbmRleCAtIGVudW1lcmF0b3ItPmNhY2hlZElubGlu
ZUNhcGFjaXR5KCkgKyBmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuTmFtZWRNb2Rl
U3RydWN0dXJlTWlzbWF0Y2gpOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0K
IAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9w
cm9wZXJ0eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BI
YXNFbnVtZXJhYmxlUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRl
Y29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNL
X0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuanNWYWx1ZSgpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBK
U1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlO
YW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENF
UFRJT04oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0
eShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKLX0KKyAgICAgICAgY2FzZSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOiB7CisgICAgICAgICAgICBpZiAoYmFzZVZh
bHVlLmlzQ2VsbCgpICYmIG1vZGUgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1v
ZGUpCisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVj
dHVyZUlEKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgICAgICBK
U1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5q
c1ZhbHVlKCkpOworICAgICAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgLy8gVE9ETyBEb2VzIHRoaXMgYWN0
dWFsbHkgZXZlciB0aHJvdz8gSXNuJ3Qgc3RyaW5nIGJhY2tlZCBieSBhIFVVSUQ/CisgICAgICAg
ICAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNl
VmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIH0KIAotSlND
X0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKQotewot
ICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldERpcmVjdFBuYW1l
PigpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1Zh
bHVlKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5q
c1ZhbHVlKCk7Ci0gICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBz
dHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigp
OwotICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dl
dF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOwogICAgIEpTVmFsdWUgYmFzZVZh
bHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKGJhc2VWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBSRVRVUk4odm0uZW1wdHlQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKCkpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKTsKKyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok1vZGU+KEdFVChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigp
KTsKKyAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50
OF90Pihtb2RlKTsKIAotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+
KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJh
c2UgPSBiYXNlVmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBl
bnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9v
bGVhbih0cnVlKSk7CiAKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxP
YmplY3QsIGJhc2UpKTsKLX0KLQotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwo
KSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgp
LmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFz
ZS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1
ZSgpLmFzVUludDMyKCkpKSk7CisgICAgfQogCi0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9
IG51bGxwdHI7Ci0gICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVy
dHlJbmRleCgpKQotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5h
bWVBdEluZGV4KGluZGV4KTsKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lID8gcHJvcGVydHlOYW1l
IDoganNOdWxsKCkpOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNv
ZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihDb21t
b25TbG93UGF0aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3RyaW5nLCAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGUpKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQorSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCiB7CiAg
ICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdlbmVy
aWNQbmFtZT4oKTsKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBq
c0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRv
cikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29k
ZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzJBc0FueUludCgpOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0g
c3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUu
bV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CiAKLSAgICBKU1N0cmluZyog
cHJvcGVydHlOYW1lID0gbnVsbHB0cjsKLSAgICBpZiAoZW51bWVyYXRvci0+ZW5kU3RydWN0dXJl
UHJvcGVydHlJbmRleCgpIDw9IGluZGV4ICYmIGluZGV4IDwgZW51bWVyYXRvci0+ZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXgoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJv
cGVydHlOYW1lQXRJbmRleChpbmRleCk7Ci0gICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3Bl
cnR5TmFtZSA6IGpzTnVsbCgpKTsKLX0KKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1
ZS5nZXRPYmplY3QoKSkgeworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok5hbWVkTW9kZSAmJiBiYXNlLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3ItPmNh
Y2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsK
IAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcp
Ci17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9JbmRleFN0
cmluZz4oKTsKLSAgICBKU1ZhbHVlIGluZGV4VmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9pbmRleCku
anNWYWx1ZSgpOwotICAgIEFTU0VSVChpbmRleFZhbHVlLmlzVUludDMyQXNBbnlJbnQoKSk7Ci0g
ICAgUkVUVVJOKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleFZhbHVlLmFz
VUludDMyQXNBbnlJbnQoKSkuc3RyaW5nKCkpKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jv
b2xlYW4oYmFzZS0+aGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9p
bmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkpKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHN0
cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsK
KyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVj
dCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihvYmplY3RQ
cm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgcHJvcGVydHlO
YW1lKSkpOwogfQogCiBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3Byb2Zp
bGVfdHlwZV9jbGVhcl9sb2cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCmluZGV4IGQ4ZDE1MDFmYjM1YmFjMjc5NGM2ZDk0MTAyNzFiYjY4ZjRj
YzA1N2UuLmE1ZTAxNWQ1M2E2OWU2MDUzYWY0ZGJiMzFiMmM4ZjI1N2MwZGIxZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCkBAIC0yNTQs
MTcgKzI1NCwxMSBAQCBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9pc19j
b25zdHJ1Y3Rvcik7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9zdHJj
YXQpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJpbWl0aXZl
KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3Byb3BlcnR5X2tl
eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJs
ZV9sZW5ndGgpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2Vu
dW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xB
UkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpOwot
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3Ry
dWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X2dldF9kaXJlY3RfcG5hbWUpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOwotSlNDX0RFQ0xBUkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTsKLUpTQ19E
RUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CitKU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOworSlND
X0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFs
KTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaW5f
YnlfdmFsKTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0
b3JfaGFzX293bl9wcm9wZXJ0eSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9wcm9maWxlX3R5cGVfY2xlYXJfbG9nKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX3VucmVhY2hhYmxlKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcAppbmRleCBl
MmNhMTYyZTBiNTRlMjVjZjA2OWVlYThjODdlMWVlYTJlNGNkNWJlLi4xYjAzMTMwZjBhNWMwN2Mz
MzVjYzU4NTY4M2JiNjQ1ZWU1M2UwOGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwCkBAIC05MCw3ICs5MCw2IEBA
IFNwZWN1bGF0ZWRUeXBlIEZpbGVCYXNlZEZ1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJu
YWwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBvcF9n
ZXRfYnlfdmFsX3dpdGhfdGhpczoKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAgICAg
Y2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBj
YXNlIG9wX2NhbGxfdmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCmluZGV4IGYxMzlkNGE0NDdi
MjcwZjllZDMzZjdkZmQzNWUwMmFmZmMzMWM3MDMuLmMyNmMwMDM3NDAzOTBjN2IzODM2MDc2MGUz
YzIyOWMxZmQxYjg4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIE9wY29k
ZUlEIEZpbGVCYXNlZEZ1enplckFnZW50QmFzZTo6b3Bjb2RlQWxpYXNGb3JMb29rdXBLZXkoY29u
c3QgT3Bjb2RlSUQmIG9wY29kCiB7CiAgICAgaWYgKG9wY29kZUlkID09IG9wX2NhbGxfdmFyYXJn
cyB8fCBvcGNvZGVJZCA9PSBvcF9jYWxsX2V2YWwgfHwgb3Bjb2RlSWQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQogICAgICAgICByZXR1cm4gb3Bf
Y2FsbDsKLSAgICBpZiAob3Bjb2RlSWQgPT0gb3BfZ2V0X2RpcmVjdF9wbmFtZSB8fCBvcGNvZGVJ
ZCA9PSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcykKKyAgICBpZiAob3Bjb2RlSWQgPT0gb3BfZW51
bWVyYXRvcl9nZXRfYnlfdmFsIHx8b3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMp
CiAgICAgICAgIHJldHVybiBvcF9nZXRfYnlfdmFsOwogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9j
b25zdHJ1Y3RfdmFyYXJncykKICAgICAgICAgcmV0dXJuIG9wX2NvbnN0cnVjdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyNGZj
ZjA4MTVlMjUwNDk1ZTAzMTc5NGEwNmU0YjMxMDVjNzg0ZmI0Li4xNWY1YjA2NGVjYmZjNjU4YTk5
MGQyZWI1OTYzNWJmMmJkYmU4ODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDYxLDYgKzE0NjEsMTAgQEAgY2FwaXRhbE5h
bWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFn
ID8gY2FwaXRhbE5hbWUKICAgICAgICAgfSk7CiAjZW5kaWYKIAorICAgIG1fbGlua1RpbWVDb25z
dGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmVtcHR5UHJvcGVy
dHlOYW1lRW51bWVyYXRvcildLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxs
PiYgaW5pdCkgeworICAgICAgICBpbml0LnNldChpbml0LnZtLmVtcHR5UHJvcGVydHlOYW1lRW51
bWVyYXRvcigpKTsKKyAgICB9KTsKKwogICAgIGlmIChPcHRpb25zOjpleHBvc2VQcm9maWxlcnNP
bkdsb2JhbE9iamVjdCgpKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIl9fZW5hYmxlU2FtcGxpbmdQcm9maWxlciIpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRo
aXMsIDEsIFN0cmluZygpLCBlbmFibGVTYW1wbGluZ1Byb2ZpbGVyKSwgUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6UmVhZE9ubHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKaW5kZXggMjFjNzBhMjdiNjkx
YmUwNTY5MGEyZmFlNzdjNjk5MTJhZWVjMTE5ZC4uY2YwYTRhNTEzNGY4MmRlZTk5YWFiMjViNjYz
NTk4ZTU3ZGNlMmM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCkBAIC00OSwxMyArNDksMTkgQEAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3QKIAogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMy
X3QgaW5kZXhlZExlbmd0aCwgdWludDMyX3QgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPiogcHJvcGVydHlOYW1lc0J1ZmZlciwgdW5zaWduZWQgcHJvcGVy
dHlOYW1lc1NpemUpCiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JT
dHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5
TmFtZXNCdWZmZXIpCiAgICAgLCBtX2NhY2hlZFN0cnVjdHVyZUlEKHN0cnVjdHVyZSA/IHN0cnVj
dHVyZS0+aWQoKSA6IDApCiAgICAgLCBtX2luZGV4ZWRMZW5ndGgoaW5kZXhlZExlbmd0aCkKICAg
ICAsIG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleChudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVz
KQogICAgICwgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleChwcm9wZXJ0eU5hbWVzU2l6ZSkKICAg
ICAsIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkoc3RydWN0dXJlID8gc3RydWN0dXJlLT5pbmxpbmVD
YXBhY2l0eSgpIDogMCkKKyAgICAsIG1fcHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVydHlO
YW1lc0J1ZmZlcikKIHsKKyAgICBpZiAobV9pbmRleGVkTGVuZ3RoKQorICAgICAgICBtX21vZGVT
ZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTsKKyAgICBpZiAobV9l
bmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGU7CisgICAgaWYgKG1fZW5kR2VuZXJpY1Byb3BlcnR5
SW5kZXggLSBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAgIG1fbW9kZVNldCB8
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOwogfQogCiB2b2lkIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8UHJvcGVy
dHlOYW1lQXJyYXlEYXRhPiYmIGlkZW50aWZpZXJzKQpAQCAtMTQ4LDQgKzE1NCw3MCBAQCB2b2lk
IGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlLCBQcgogICAgIH0KIH0KIAorSlNTdHJpbmcqIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y29tcHV0ZU5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNP
YmplY3QqIGJhc2UsIHVpbnQzMl90JiBpbmRleCwgTW9kZSYgbW9kZSwgYm9vbCBzaG91bGRBbGxv
Y2F0ZUluZGV4ZWROYW1lU3RyaW5nKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0o
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NF
UlQoaW5kZXhlZExlbmd0aCgpIHx8IHNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisKKyAgICBpbmRl
eCsrOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5pdE1vZGU6IHsKKyAgICAgICAg
bW9kZSA9IEluZGV4ZWRNb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExUSFJP
VUdIOworICAgIH0KKworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVk
TW9kZTogeworICAgICAgICB3aGlsZSAoaW5kZXggPCBpbmRleGVkTGVuZ3RoKCkgJiYgIWJhc2Ut
Pmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KSkgeworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICB9CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisKKyAg
ICAgICAgaWYgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHNo
b3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPyBqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6
ZnJvbSh2bSwgaW5kZXgpLnN0cmluZygpKSA6IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFzaXpl
T2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBtb2RlID0gTmFtZWRNb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExUSFJP
VUdIOworICAgIH0KKworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1v
ZGU6CisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOiB7Cisg
ICAgICAgIEpTU3RyaW5nKiBuYW1lID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgIGlmIChpbmRleCA+PSBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lQXRJbmRleChp
bmRleCk7CisgICAgICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAoaW5kZXggPCBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgJiYgYmFz
ZS0+c3RydWN0dXJlSUQoKSA9PSBjYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0s
IG5hbWUtPnZhbHVlKGdsb2JhbE9iamVjdCkpOworICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9F
eGNlcHRpb24oKTsKKyAgICAgICAgICAgIGlmIChiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHko
Z2xvYmFsT2JqZWN0LCBpZCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIG5hbWUgPSBu
dWxscHRyOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5h
c3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgICAgIGlmIChpbmRleCA+PSBlbmRTdHJ1Y3R1cmVQ
cm9wZXJ0eUluZGV4KCkgJiYgaW5kZXggPCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAg
ICAgICBtb2RlID0gR2VuZXJpY01vZGU7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmgKaW5kZXggMDIwMTFkNDFjN2Y2NmRhZDg4M2FlOGQ3NzBiNWQzZDI4
NmNkNTA4Ny4uYTAwOWJiMjkwMWI0YWExNzBkNzM4YTU5ODYwYTA5YTE1NmQyMDQ1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogCiBuYW1lc3Bh
Y2UgSlNDIHsKIApAQCAtMzcsNiArMzcsMTcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBK
U0NlbGw7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJh
c2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAorICAgIGVudW0gTW9k
ZSA6IHVpbnQ4X3QgeworICAgICAgICBJbml0TW9kZSA9IDAsCisgICAgICAgIEluZGV4ZWRNb2Rl
ID0gMSA8PCAwLAorICAgICAgICBOYW1lZE1vZGUgPSAxIDw8IDEsCisgICAgICAgIEdlbmVyaWNN
b2RlID0gMSA8PCAyLAorICAgICAgICAvLyBQcm9maWxpbmcgT25seQorICAgICAgICBIYXNTZWVu
TmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0Y2ggPSAxIDw8IDMsCisgICAgfTsKKworICAgIHN0YXRp
YyBjb25zdGV4cHIgdWludDhfdCBlbnVtZXJhdGlvbk1vZGVNYXNrID0gKEdlbmVyaWNNb2RlIDw8
IDEpIC0gMTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2Vz
cyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAg
IHsKQEAgLTc0LDE2ICs4NSwyMCBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgZW5kR2VuZXJpY1By
b3BlcnR5SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OyB9
CiAgICAgdWludDMyX3QgY2FjaGVkSW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2Nh
Y2hlZElubGluZUNhcGFjaXR5OyB9CiAgICAgdWludDMyX3Qgc2l6ZU9mUHJvcGVydHlOYW1lcygp
IGNvbnN0IHsgcmV0dXJuIGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCk7IH0KKyAgICB1aW50MzJf
dCBtb2RlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlU2V0OyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlSUQpOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBpbmRleGVkTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9pbmRleGVkTGVuZ3RoKTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3QgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fZW5kU3RydWN0dXJl
UHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGVuZEdlbmVyaWNQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciwgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IGNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0KKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG1vZGVTZXRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX21vZGVTZXQpOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkKICAgICB7CiAgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3Bl
cnR5TmFtZXMpOwogICAgIH0KIAorICAgIEpTU3RyaW5nKiBjb21wdXRlTmV4dChKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCYgY3VycmVudEluZGV4LCBNb2RlJiwgYm9v
bCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nID0gdHJ1ZSk7CisKICAgICBERUNMQVJF
X1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgpAQCAtOTIsMTMgKzEwNywxNCBAQCBwcml2YXRl
OgogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90
LCB1aW50MzJfdCwgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiosIHVuc2lnbmVkKTsKICAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4mJik7CiAK
LSAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5
TmFtZXM7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWlu
OwogICAgIFN0cnVjdHVyZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgdWludDMyX3QgbV9p
bmRleGVkTGVuZ3RoOwogICAgIHVpbnQzMl90IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsK
ICAgICB1aW50MzJfdCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OwogICAgIHVpbnQzMl90IG1f
Y2FjaGVkSW5saW5lQ2FwYWNpdHk7CisgICAgdWludDMyX3QgbV9tb2RlU2V0IHsgMCB9OworICAg
IEF1eGlsaWFyeUJhcnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1l
czsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47CiB9
OwogCiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiwgSlNP
YmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1aW50
MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCk7CkBAIC0xMzQsNyArMTUwLDEwIEBAIGlubGlu
ZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSAw
OwogICAgIH0KIAotICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNy
ZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0
aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7Cisg
ICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmICFwcm9wZXJ0eU5hbWVzLnNpemUoKSkKKyAgICAgICAg
ZW51bWVyYXRvciA9IHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworICAgIGVsc2UK
KyAgICAgICAgZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZt
LCBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBudW1i
ZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKICAgICBpZiAo
IWluZGV4ZWRMZW5ndGggJiYgc3VjY2Vzc2Z1bGx5Tm9ybWFsaXplZENoYWluICYmIHN0cnVjdHVy
ZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMgPT0gc3RydWN0dXJlKSB7CiAgICAgICAgIGVudW1l
cmF0b3ItPnNldENhY2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNo
YWluKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5jYW5DYWNo
ZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0pKQpAQCAtMTQzLDQgKzE2Miw2IEBAIGlubGluZSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIGVudW1lcmF0b3I7CiB9CiAKK3VzaW5nIEVudW1l
cmF0b3JNZXRhZGF0YSA9IHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpNb2RlPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGlu
Z0Z1enplckFnZW50LmNwcAppbmRleCBjZGNmYTk5ZDQ5YTY5MTc0MDFkNjgzMTY4YmExOWFiZGVi
YWU5YTRkLi5jN2E4ZTMxZjdlNDdiZDY5MTFmZTRhYzQ1ZmRmNzdkNjgzOTY0MTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5n
RnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRp
Y3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBTcGVjdWxhdGVk
VHlwZSBQcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRl
cm5hbChDb2RlQmxvYwogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgogICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX3dpdGhfdGhpczoKICAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgotICAgIGNh
c2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3Zh
bDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdz
OgogICAgIGNhc2Ugb3BfY2FsbDoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNU
ZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGFhY2Y5N2Y5NThjODVkYzlmNTJkNGMyZTJlMjhlMzI3Yjg4
ODFlZC4uMzE3NzQyZDUyYzQwOTE0M2VhMzcxYWQwYTJhNmQyNmM1YWNjYzUzZiAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAyMS0wNy0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4K
KworICAgICAgICBmb3ItaW4gc2hvdWxkIG9ubHkgZW1pdCBvbmUgbG9vcCBpbiBieXRlY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3OTg5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3Mv
Zm9yLWluLWFycmF5LW1vZGUuanM6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBzdHJlc3Mv
Zm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qczoKKyAgICAgICAgKiBzdHJlc3MvZm9yLWlu
LWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzOgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tdGVz
dHMuanM6CisgICAgICAgICogc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1p
bi1sb29wLWNvcnJlY3RuZXNzLmpzOgorICAgICAgICAodGVzdDUpOgorCiAyMDIxLTA3LTI1ICBB
bGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBQYXJ0bHkg
aW1wbGVtZW50IEZ1bmN0aW9uLnByb3RvdHlwZS57Y2FsbGVyLGFyZ3VtZW50c30gcmVmbGVjdGlv
biBwcm9wb3NhbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUu
anMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcwppbmRleCA5MDAyYjk0MGFk
NTk2Yjc1NDgxZjAyNTQwZTUwYWM5ZTljYmI1MDg4Li4zZDJkYTYzOWQ4MTBmOGFiOTdhM2UyNjlm
YWUxMDcyMTBiNWNlNzVjIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXkt
bW9kZS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcwpAQCAtMjYs
OCArMjYsOSBAQAogdmFyIGZ1bmNBcmdBbmRCb2R5U3RyID0KICIoYXJyKSB7IiArICJcbiIgKwog
IiAgICB2YXIgc3VtID0gMDsiICsgIlxuIiArCi0iICAgIGZvciAodmFyIGkgaW4gYXJyKSIgKyAi
XG4iICsKKyIgICAgZm9yICh2YXIgaSBpbiBhcnIpIHsiICsgIlxuIiArCiAiICAgICAgICBzdW0g
Kz0gYXJyW2ldOyIgKyAiXG4iICsKKyIgICAgfSAiICsKICIgICAgcmV0dXJuIHN1bTsiICsgIlxu
IiArCiAifSI7CiAKQEAgLTc1LDYgKzc2LDcgQEAgZnVuY3Rpb24gdGVzdChuYW1lLCBkYXRhKSB7
CiAKICAgICAgICAgaWYgKChhY3R1YWwgIT0gZXhwZWN0ZWQpICYmIChhY3R1YWwgIT0gcHJldmlv
dXNSZXN1bHQpKSB7CiAgICAgICAgICAgICBwcmludCgiRkFJTDogIiArIG5hbWUgKyAiOiBleHBl
Y3RlZDogIiArIGV4cGVjdGVkICsgIiwgYWN0dWFsOiAiICsgYWN0dWFsICsgIiwgc3RhcnRpbmcg
QCBsb29wIGl0ZXJhdGlvbiAiICsgaSk7CisgICAgICAgICAgICAkdm0uYnJlYWtwb2ludCgpOwog
ICAgICAgICAgICAgcHJldmlvdXNSZXN1bHQgPSBhY3R1YWw7CiAgICAgICAgICAgICBmYWlsZWQg
PSB0cnVlOwogICAgICAgICAgICAgbnVtYmVyT2ZGYWlsdXJlcysrOwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMKaW5kZXggODMxMTViNDk3M2M4Mzdj
YTZkM2ZmMDZlYTZmZjEzMWMzNDUxMWU2Mi4uMDlmODFkOTU2NTNiYWExNTA2ZTVkZGEwNjJmYTJl
MzVmMTU4YmYzMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3Np
Z25lZC1sYXRlci5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVk
LWxhdGVyLmpzCkBAIC0xNCw1ICsxNCw1IEBAIG5vSW5saW5lKGZvbyk7CiBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKICAgICB2YXIgcmVzdWx0ID0gZm9vKHswOjAsIDE6MSwgYToy
LCBiOjN9KTsKICAgICBpZiAocmVzdWx0ICE9IDcpCi0gICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0
OiAiICsgcmVzdWx0KTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxl
dGUtZHVyaW5nLWl0ZXJhdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVy
aW5nLWl0ZXJhdGlvbi5qcwppbmRleCA1YWQzNTY2ZmQwZDM2MTAyNWExZTVmMzM2NWQwYmFkMzc0
ZDUxMjAyLi5kMTE0NjkzMWIxNDc1ZDg4YzQ3Mzk0OWVhZGEyZGRhMGZkMzkzMGE1IDEwMDY0NAot
LS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMKKysr
IGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCkBAIC0x
Miw4ICsxMiw5IEBACiAgICAgfTsKICAgICBub0lubGluZShmb28pOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgICAgICBpZiAoZm9vKCkgIT09ICIxMjM1IikKLSAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOworICAgICAgICB2YXIgcmVz
dWx0ID0gZm9vKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09ICIxMjM1IikKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCBnb3Q6ICIgKyByZXN1bHQpOwogICAgIH0KICAg
ICBmb28obnVsbCk7CiB9KSgpOwpAQCAtMzYsOCArMzcsOSBAQAogICAgIH07CiAgICAgbm9Jbmxp
bmUoZm9vKTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAg
aWYgKGZvbygpICE9PSAieHoiKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVz
dWx0Iik7CisgICAgICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICAgICAgaWYgKHJlc3VsdCAh
PT0gInh6IikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiArIHJl
c3VsdCk7CiAgICAgfQogfSkoKTsKIChmdW5jdGlvbigpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2Zvci1pbi10ZXN0cy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwpp
bmRleCAyZTRkNmI4NDJhMjQyZWI3MTU5ODYwMGVlNTI4YWUxNGI5Yzg5Y2U0Li42ODk2MDk4MTg1
MWVlMzQ0ZTNhYTdmNTMyMzE1MWIyMjUxZjY1ZDkwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVz
cy9mb3ItaW4tdGVzdHMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCkBA
IC0xMDUsNiArMTA1LDcgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3dTeW50YXhFcnJvcihzY3JpcHQp
IHsKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOwogICAgIH0KIH0p
KCk7CisKIChmdW5jdGlvbigpIHsKICAgICB2YXIgZm9vID0gZnVuY3Rpb24oYSwgYikgewogICAg
ICAgICBmb3IgKHZhciBwIGluIGIpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcy1v
d24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzIGIvSlNUZXN0
cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5l
c3MuanMKaW5kZXggOTljNTlhYzEwNTY4Y2U4YTc5MDg1MjI5ODIwNmZkYzdlMGUwZjg5Yy4uZTBh
ZGUwNzFhMmU0YjhkMDI3OGQ5NWNjOTMzZTI0ZjE4YmJlZTA1OCAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5l
c3MuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9y
LWluLWxvb3AtY29ycmVjdG5lc3MuanMKQEAgLTEzMiw3ICsxMzIsMTAgQEAgZnVuY3Rpb24gdGVz
dDUoKSB7CiAgICAgby5fX3Byb3RvX18gPSBwOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwOyArK2kpIHsKLSAgICAgICAgYXNzZXJ0KGNvdW50KG8pID09PSAwKTsKKyAgICAgICAgdmFy
IGMgPSBjb3VudChvKTsKKyAgICAgICAgaWYgKGMpCisgICAgICAgICAgICBwcmludChjKTsKKyAg
ICAgICAgYXNzZXJ0KGMgPT09IDApOwogICAgIH0KIH0KIHRlc3Q1KCk7Cg==
</data>
<flag name="commit-queue"
          id="456935"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434438</attachid>
            <date>2021-07-28 11:06:23 -0700</date>
            <delta_ts>2021-07-28 11:07:54 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728140622.patch</filename>
            <type>text/plain</type>
            <size>343336</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjkyOGQxOWRlMzIxY2Uw
NjhiNWFkOTIxZWIwNGFiNzIzZmEzZDVmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQzMDQs
NiArNDMwOCw0OSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAg
ICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgaWYg
KGFycmF5TW9kZS5pc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
OworICAgICAgICBlbHNlIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSB8fCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQorICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisK
KyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgp
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+ZW51bWVyYXRvck1ldGFkYXRh
KCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50
OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNh
c2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRv
ckhhc093blByb3BlcnR5OiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdo
ZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAg
ICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgorICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIG1ha2VIZWFwVG9w
Rm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAppbmRleCAxMTExZjg5ZjlkN2I1Yjk3Nzc4YzE2YzhkNTQ2NDBiZWEzNzQ0
MmIyLi5hMDI2YWFkMTg5M2JmMjNjNTcxOTZmY2M2YzkxZmMyMDAwM2M0NTY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKQEAgLTI4OSw2ICsyODksMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNT
YW5lQ2hhaW47CiAgICAgfQogCisgICAgYm9vbCBpc1NhbmVDaGFpbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNJbkJvdW5kc1NhbmVDaGFpbigpIHx8IGlzT3V0T2ZCb3VuZHNTYW5l
Q2hhaW4oKTsKKyAgICB9CisKICAgICBib29sIGlzT3V0T2ZCb3VuZHMoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzIHx8IHNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAKaW5kZXggZGIzN2Y0ZGRkYmY4MGNkNjZlYjU3ODdkN2JhYTJiZjUzYWY4OTA3Ni4uOWRi
ZDBiNDdkOWRmZjRjZjYwMzhhZjUwMDE3OTM0OGJlMGFlYTI5NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwCkBAIC0zOTAsNyArMzkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzICYgfk5vZGVCeXRlY29kZU5lZWRzTmVnWmVybyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAg
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNl
c0FzVmFsdWUpOwogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVy
Z2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhl
ciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCB8IE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApp
bmRleCBhMjk2YzRiODdjODU4ODY0ZmJkZWRkNzRlZjcyN2U1NGQ5NWZkNjk0Li4zNjllN2MyOTUw
NTViODBjNTI5MjE1Mzk5MWU0ODJlMjJjOTY4ZjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtODM4NywxMDMgKzgzODcsMTM2IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9oYXNfcHJpdmF0ZV9icmFuZCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDogewotICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmFi
bGVMZW5ndGgsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVy
ZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBo
KEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSks
Ci0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yPigpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldFBy
b3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5
PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksIGdldChieXRlY29kZS5tX3Byb3Bl
cnR5KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9uZXh0OiB7CisgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JOZXh0PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5
TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogaW5k
ZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAgICAgICAgICBOb2RlKiBlbnVtZXJhdG9y
ID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CisgICAgICAgICAgICBOb2RlKiBtb2RlID0g
Z2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAg
ICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVy
YXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19vd25fc3RydWN0dXJlX3By
b3BlcnR5KTsKLSAgICAgICAgfQorICAgICAgICAgICAgYXV0byBzZWVuTW9kZXMgPSBtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YTsKIAotICAgICAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKEluU3RydWN0dXJlUHJvcGVydHksCi0gICAgICAgICAgICAgICAg
Z2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJv
cGVydHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0g
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIXNlZW5Nb2RlcykKKyAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Ci0gICAgICAgICAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayku
bV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YmFzZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsKLSAgICAgICAgICAgIE5vZGUqIGhhc0l0ZXJhYmxl
UHJvcGVydHkgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSkpOwotICAgICAgICAgICAgbV9leGl0
T0sgPSBmYWxzZTsgLy8gSGFzSW5kZXhlZFByb3BlcnR5IG11c3QgYmUgdHJlYXRlZCBhcyBpZiBp
dCBjbG9iYmVycyBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0IGdlbmVy
aWMuCi0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGhhc0l0ZXJhYmxlUHJvcGVydHkp
OwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChtb2RlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0
b3IpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIHN0b3JhZ2UgZm9y
IEluZGV4ZWRNb2RlIG9ubHkuCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVkSW5kZXhBbmRNb2Rl
ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNlZW5Nb2RlcykpOworCisg
ICAgICAgICAgICBOb2RlKiB1cGRhdGVkTW9kZSA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRF
eHRyYWN0TW9kZSwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9tb2RlLCB1cGRhdGVkTW9kZSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRJbmRl
eCA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIHVwZGF0ZWRJbmRleEFu
ZE1vZGUpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1faW5kZXgsIHVwZGF0ZWRJbmRleCk7
CisKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSwgYWRkVG9HcmFwaChF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9k
ZSwgZW51bWVyYXRvcikpOworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9y
X25leHQpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dERpcmVjdFBuYW1lPigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOwotICAgICAgICAgICAgCisgICAgICAgIGNh
c2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICAg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9h
cnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7CisKICAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHBy
b3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJv
cGVydHlOYW1lID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIE5v
ZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogbW9k
ZSA9IGdldChieXRlY29kZS5tX21vZGUpOwogICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9
IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOwogCisgICAgICAgICAgICBhdXRvIHNlZW5Nb2Rl
cyA9IE9wdGlvblNldDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3KG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVz
KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKworICAgICAgICAg
ICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogYmFkTW9kZSA9IGFkZFRvR3JhcGgoQXJpdGhCaXRB
bmQsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpH
ZW5lcmljTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOworCisg
ICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgQXJpdGhCaXRBbmQgY2Fubm90IGhhdmUgZWZm
ZWN0cyBzbyBpdCdzIG9rIHRvIGV4aXQgaGVyZS4KKyAgICAgICAgICAgICAgICBtX2V4aXRPSyA9
IHRydWU7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOworCisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhqc051bWJlcigwKSkpLCBiYWRNb2RlKTsKKworICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsgLy8g
VXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQgb3B0aW1pemF0aW9ucy4K
KyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gRm9yIHByb3BlcnR5
IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1v
ZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGSVhNRTogQ2hlY2tpbmcgZm9yIGEgQmFkQ29uc3RhbnRWYWx1ZSBjYXVzZXMgdXMgdG8gYWx3
YXlzIHVzZSB0aGUgR2VuZXJpYyB2YXJpYW50IGlmIHdlIHN3aXRjaGVkIGZyb20gSW5kZXhlZE1v
ZGUgLT4gSW5kZXhlZE1vZGUgKyBOYW1lZE1vZGUgZXZlbiB0aG91Z2ggdGhhdCBtaWdodCBiZSBm
aW5lLgorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMuY29udGFpbnNBbnkoeyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhh
c1NlZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG1vZGVUZXN0ID0g
YWRkVG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzQm9vbGVh
bihmYWxzZSkpKSwgbW9kZVRlc3QpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5k
ZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFn
ZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRl
eCk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckdldEJ5VmFsLCBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwotICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQocHJvcGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJv
cGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGluZGV4KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOwogICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDAp
LCBPcEluZm8ocHJlZGljdGlvbikpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKIAotICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfZ2V0X2RpcmVjdF9wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9n
ZXRfcHJvcGVydHlfZW51bWVyYXRvcjogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7Ci0gICAgICAg
ICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9y
LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3IpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9pbl9ieV92YWw6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJh
eU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBB
cnJheTo6UmVhZCk7CiAKLSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUu
bV9kc3QsIGFkZFRvR3JhcGgoR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLAotICAgICAgICAg
ICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5tX2luZGV4KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUpOwotICAgICAgICB9CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdl
dChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0
ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dv
cmQoKSksIE9wSW5mbyhtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKIAotICAgICAg
ICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZTogewotICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVy
YXRvciksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOworICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOwogICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKLSAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4o
KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3Ry
aW5nLCBnZXQoYnl0ZWNvZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3RvX2luZGV4X3N0cmluZyk7CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25f
cHJvcGVydHk6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpOworICAgICAgICAgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwg
QXJyYXk6OlJlYWQpOworCisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBP
cEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKSk7CisKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIG9wX2dldF9pbnRlcm5hbF9maWVsZDogewpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NGQVBoYXNlLmNwcAppbmRleCBjYzBkMDE0ZGEyOTMxZmYzZWNkY2U5NDI5Y2My
NjI1NjFlMmY3Zjc2Li4wNmQxOWQxNzM5NzMwM2Y3NDFiZTZiMDJiZjAxMDU3ZjcyMjU2NDgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTY0LDcgKzE2
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBkYXRhTG9nKCIgICBGb3VuZCBtdXN0LWhhbmRs
ZSBibG9jazogIiwgKmJsb2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgbWVy
Z2VzIHNuYXBzaG90IG9mIHN0YWNrIHZhbHVlcyB3aGlsZSBDRkEgcGhhc2Ugd2FudCB0byBoYXZl
IHByb3ZlbiB0eXBlcyBhbmQgdmFsdWVzLiBUaGlzIGlzIHNvbWV3aGF0IHRyaWNreS4KLSAgICAg
ICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlkYXRlcyB0
aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY1ZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5z
IG91dCB0aGF0IHRoaXMKKyAgICAgICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcg
T1NSIGVudHJ5IHZhbGlkYXRlcyB0aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY3RWYWx1
ZSB2YWx1ZXMuIEFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzCiAgICAgICAgIC8vIHR5cGUgd2lk
ZW5pbmcgaXMgY3JpdGljYWwgdG8gbmF2aWVyLXN0b2tlcy4gV2l0aG91dCBpdCwgbmF2aWVyLXN0
b2tlcyBoYXMgbW9yZSBzdHJpY3QgY29uc3RyYWludCBvbiBPU1IgZW50cnkgYW5kCiAgICAgICAg
IC8vIGZhaWxzIE9TUiBlbnRyeSByZXBlYXRlZGx5LgogICAgICAgICBib29sIGNoYW5nZWQgPSBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApp
bmRleCBjNzE2NGIzMGY0NjRlYjBkNDM4MmUyY2NhNDJkNTY5OTY0ZDFiZjY3Li5hYzc4MmQ5OWI0
NTNjNTA4MjYxYTdmM2E4Nzk1NTg4MDBkMDA1Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0yNTQsMTcgKzI1NCw3IEBAIENhcGFiaWxp
dHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBvcF9oYXNfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNl
IG9wX2dldF9zY29wZToKICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAgIGNhc2Ugb3Bf
Z2V0X2VudW1lcmFibGVfbGVuZ3RoOgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhl
ZF9wcm9wZXJ0eToKLSAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0
eToKLSAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFz
X293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVy
dHk6Ci0gICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfZ2V0X3Byb3Bl
cnR5X2VudW1lcmF0b3I6Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToK
LSAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKLSAgICBjYXNlIG9wX3RvX2lu
ZGV4X3N0cmluZzoKICAgICBjYXNlIG9wX25ld19mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmNf
ZXhwOgogICAgIGNhc2Ugb3BfbmV3X2dlbmVyYXRvcl9mdW5jOgpAQCAtMjk5LDYgKzI4OSwxMCBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3Bfc2V0X3ByaXZhdGVfYnJhbmQ6
CiAgICAgY2FzZSBvcF9jaGVja19wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfbmV4dDoKKyAgICBjYXNlIG9wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOgorICAgIGNh
c2Ugb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5OgogICAgICAgICByZXR1cm4gQ2FuQ29t
cGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAppbmRleCA5ZDEwMDRmZTUzZjNkNDQ3ZGYxMDNmYWNh
MGQyZTEwZWM0ZmY1ZjQ2Li43N2E2OGU4ZTQxYTc3OTJlM2U2YjZlNDkzYTQwNWM3NWYzODRjOTZk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTQ3LDYg
KzE0NywxMCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIENoZWNrQXJy
YXk6CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheU9yRW1wdHk6CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6
CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIEdl
dEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAg
ICAgICAgIGNhc2UgR2V0VmVjdG9yTGVuZ3RoOgpAQCAtMzQzLDYgKzM0Nyw5IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFk
LCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgIGNhc2Ug
VG9JbmRleFN0cmluZzoKICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKICAg
ICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKQEAgLTM1MCw2ICszNTcsNzIgQEAg
dm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0
b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGNh
c2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgcmVhZChKU09i
amVjdF9idXR0ZXJmbHkpOworICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIHJlYWQoTmFt
ZWRQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7
CisgICAgICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAg
ICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDog
eworICAgICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjogeworICAgICAgICAgICAgaWYgKG1v
ZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1Ymxp
Y0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsK
KyAgICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywg
SW5kZXhlZEludDMyUHJvcGVydGllcywgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1Nh
bmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhl
ZERvdWJsZVByb3BlcnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2Fu
ZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
OworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5k
ZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIGlmICht
b2RlLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rv
ckxlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVy
dGllcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKICAgICBjYXNlIEhhc0VudW1l
cmFibGVJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkp
OwpAQCAtNzA1LDYgKzc3OCw4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBU
b1ByaW1pdGl2ZToKICAgICBjYXNlIFRvUHJvcGVydHlLZXk6CiAgICAgY2FzZSBJbkJ5VmFsOgor
ICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBj
YXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAgLTkwNiw2ICs5ODEsMTIgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0
IFdyaXRlRnUKICAgICAgICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3Rh
cnQgKyBzdGF0aWNfY2FzdDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBmYXIgdG9vIGNvbnNlcnZhdGl2ZSBmb3IgdGhlIGNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBJbnQzMlVzZSBjYXNlLgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OiB7CisgICAgICAgIGNsb2JiZXJUb3AoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUt
PmFycmF5TW9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4
IDUzYWJmZWE5MWRmMjI0YmQ0ODI1NTBkYmU1NzgyZDU5Y2FkZDk4YjUuLjUyYTczMTY1NjU4NjEy
NTA2NTYwZTNiZjNmNTFiOTUxM2YzYjlhN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RvZXNHQy5jcHAKQEAgLTM5NSw2ICszOTUsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgogICAg
IGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6
CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlh
bGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVj
dDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNTA4
LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
ID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNh
c2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwog
ICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1
dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li5hY2U0YWY1
MzQ1NzJmNGJlNmFlNzVhMjBlYTMwMTZiNGM2Yzc4Zjg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0
b3JHZXRCeVZhbDogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAg
ICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEwNjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MjExNzIKICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5
OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUoKS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOworCisKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAg
ICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9TUiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE5h
bWVkTW9kZS4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV0Ugc2hvdWxkIGhhdmUgYSBiZXR0
ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBF
bnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9k
ZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlwZShBcnJheTo6R2VuZXJpYykpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEwOTYsNyArMTExMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBo
b2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0aGUgZnVsbC1ibG93bgogICAgICAgICAgICAgICAg
ICAgICAvLyBvdXQtb2YtYm91bmRzIHNsb3cgcGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFz
RXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4KSkKQEAgLTExMTEs
NyArMTEyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChh
cnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5l
Q2hhaW47CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2Vz
QXNPdGhlcikgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJl
YWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0IGNhcmUKQEAgLTExMjEsNyArMTEzNyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBh
cnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGgu
aGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4KSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRP
ZkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTc4
LDcgKzExOTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNl
PihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
Y2FuJ3Qgc2V0IGEgbm9uLUpTVmFsdWUgcmVzdWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgc2lu
Y2Ugd2UgY291bGQgc3RpbGwgZG8gYSBOYW1lZE1vZGUgcHJvcGVydHkgYWNjZXNzLiBXZSBhbHNv
IGRvbid0IGhhdmUgYSBnb29kIHdheSB0bworICAgICAgICAgICAgLy8gcHJvdmUgdGhlcmUncyBu
byBzdHJ1Y3R1cmUgcHJvcGVydGllcyBhdCB0aGlzIHBvaW50LgorICAgICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJv
dW5kcygpCkBAIC0yMzQ1LDYgKzIzNjUsNTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZpeEVk
Z2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICAgICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Cisg
ICAgICAgICAgICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7Cisg
ICAgICAgICAgICBFZGdlJiBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
bm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5lbnVt
ZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSB7CisgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLCBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKS0+cHJlZGljdGlvbigpKSk7CisKKyAgICAgICAgICAgICAg
ICBmaXhFZGdlPENlbGxVc2U+KGJhc2UpOworICAgICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVy
YXRpb24oYmFzZSwgaW5kZXgsIHN0b3JhZ2VFZGdlKTsKKworICAgICAgICAgICAgICAgIEFycmF5
TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAo
YXJyYXlNb2RlLmJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc2V0U2FuZUNoYWluSWZQb3NzaWJsZShub2RlLCBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9
PSBBcnJheTo6SW5Cb3VuZHMgPyBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6T3V0
T2ZCb3VuZHNTYW5lQ2hhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9k
ZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1l
ZE1vZGUgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBCYWRD
YWNoZSkpCisgICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihiYXNlKTsKKworICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihpbmRleCk7CisgICAgICAgICAgICBmaXhFZGdl
PEtub3duSW50MzJVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6
IHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bklu
dDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJV
c2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihu
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJ
bkJ5VmFsOiB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+
c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4o
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3du
SW50MzJVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICAgICAgZml4
RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBQcm9maWxl
VHlwZTogewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBpbnNlcnQgdHlwZSBjaGVja3MgYmFz
ZWQgb24gdGhlIGluc3RydWN0aW9uVHlwZVNldCBvZiB0aGUgVHlwZUxvY2F0aW9uLCBub3QgdGhl
IGdsb2JhbFR5cGVTZXQuCiAgICAgICAgICAgICAvLyBCZWNhdXNlIHRoZSBpbnN0cnVjdGlvblR5
cGVTZXQgaXMgY29udGFpbmVkIGluIGdsb2JhbFR5cGVTZXQsIGlmIHdlIHByb2R1Y2UgYSB0eXBl
IGNoZWNrIGZvcgpAQCAtMzY5MCw2ICszNzYyLDY3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgRWRnZShhcnJheSwgS25vd25DZWxsVXNlKSk7CiAg
ICAgfQogCisgICAgdm9pZCBzZXRKU0FycmF5U2FuZUNoYWluSWZQb3NzaWJsZShOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgp
OworICAgICAgICBzdGQ6Om9wdGlvbmFsPEFycmF5OjpTcGVjdWxhdGlvbj4gc2FuZUNoYWluU3Bl
Y3VsYXRpb247CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNKU0FycmF5V2l0aE9yaWdpbmFsU3Ry
dWN0dXJlKCkpIHsKKyAgICAgICAgICAgIC8vIENoZWNrIGlmIEluQm91bmRzU2FuZUNoYWluIHdp
bGwgd29yayBvbiBhIHBlci10eXBlIGJhc2lzLiBOb3RlIHRoYXQ6CisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gMSkgV2UgZG9uJ3Qgd2FudCBkb3VibGUgYXJyYXlzIHRvIHNvbWV0aW1l
cyByZXR1cm4gdW5kZWZpbmVkLCBzaW5jZQorICAgICAgICAgICAgLy8gdGhhdCB3b3VsZCByZXF1
aXJlIGEgY2hhbmdlIHRvIHRoZSByZXR1cm4gdHlwZSBhbmQgaXQgd291bGQgcGVzc2ltaXNlCisg
ICAgICAgICAgICAvLyB0aGluZ3MgYSBsb3QuIFNvLCB3ZSdkIG9ubHkgd2FudCB0byBkbyB0aGF0
IGlmIHdlIGFjdHVhbGx5IGhhZAorICAgICAgICAgICAgLy8gZXZpZGVuY2UgdGhhdCB3ZSBjb3Vs
ZCByZWFkIGZyb20gYSBob2xlLiBUaGF0J3MgcHJldHR5IGFubm95aW5nLgorICAgICAgICAgICAg
Ly8gTGlrZWx5IHRoZSBiZXN0IHdheSB0byBoYW5kbGUgdGhhdCBjYXNlIGlzIHdpdGggYW4gZXF1
aXZhbGVudCBvZgorICAgICAgICAgICAgLy8gSW5Cb3VuZHNTYW5lQ2hhaW4gZm9yIE91dE9mQm91
bmRzLiBGb3Igbm93IHdlIGp1c3QgZGV0ZWN0IHdoZW4gVW5kZWZpbmVkIGFuZAorICAgICAgICAg
ICAgLy8gTmFOIGFyZSBpbmRpc3Rpbmd1aXNoYWJsZSBhY2NvcmRpbmcgdG8gYmFja3dhcmRzIHBy
b3BhZ2F0aW9uLCBhbmQganVzdAorICAgICAgICAgICAgLy8gdXNlIEluQm91bmRzU2FuZUNoYWlu
IGluIHRoYXQgY2FzZS4gVGhpcyBoYXBwZW5zIHRvIGNhdGNoIGEgbG90IG9mIGNhc2VzLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDIpIFdlIGRvbid0IHdhbnQgaW50MzIgYXJyYXkg
bG9hZHMgdG8gaGF2ZSB0byBkbyBhIGhvbGUgY2hlY2sganVzdCB0bworICAgICAgICAgICAgLy8g
Y29lcmNlIHRvIFVuZGVmaW5lZCwgc2luY2UgdGhhdCB3b3VsZCBtZWFuIHR3aWNlIHRoZSBjaGVj
a3MuIFdlIHdhbnQgdG8KKyAgICAgICAgICAgIC8vIGJlIGFibGUgdG8gc2F5IHdlIGFsd2F5cyBy
ZXR1cm4gSW50MzIuIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBwcm9maWxpbmcKKyAgICAg
ICAgICAgIC8vIGJhc2VkPworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgaGFz
IHR3byBpbXBsaWNhdGlvbnMuIEZpcnN0LCB3ZSBoYXZlIHRvIGRvIG1vcmUgY2hlY2tzIHRoYW4g
d2UnZAorICAgICAgICAgICAgLy8gbGlrZS4gSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHdlIGhhdmUg
dG8gZG8gdGhlIGhvbGUgY2hlY2suIFNlY29uZCwKKyAgICAgICAgICAgIC8vIHNvbWUgYWNjZXNz
ZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0aGUgZnVsbC1ibG93bgor
ICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBzbG93IHBhdGguIFdlIGNhbiBmaXggdGhhdCB3
aXRoOgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NDY2OAorCisgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgICAgICAgICAgICAgIGlmIChpczY0Qml0
KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFt
X2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkp
CisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6Ok91dE9m
Qm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBcnJheTo6Q29udGlndW91czoKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGhhcHBlbnMg
dG8gYmUgZW50aXJlbHkgbmF0dXJhbC4gV2UgYWxyZWFkeSB3b3VsZCBoYXZlCisgICAgICAgICAg
ICAgICAgLy8gcmV0dXJuZWQgYW55IEpTVmFsdWUsIGFuZCBub3cgd2UnbGwgcmV0dXJuIFVuZGVm
aW5lZC4gV2Ugc3RpbGwgZG8KKyAgICAgICAgICAgICAgICAvLyB0aGUgY2hlY2sgYnV0IGl0IGRv
ZXNuJ3QgcmVxdWlyZSB0YWtpbmcgYW55IGtpbmQgb2Ygc2xvdyBwYXRoLgorICAgICAgICAgICAg
ICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91
dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
TmVnYXRpdmVJbmRleCkpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9u
ID0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykKKyAgICAgICAgICAg
ICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZToKKyAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNl
c0FzT3RoZXIpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykg
eworICAgICAgICAgICAgICAgICAgICAvLyBIb2xlcyBsb29rIGxpa2UgTmFOIGFscmVhZHksIHNv
IGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2FyZQorICAgICAgICAgICAgICAgICAgICAvLyBhYm91dCB0
aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFVuZGVmaW5lZCBhbmQgTmFOIHRoZW4gd2UgY2FuCisgICAg
ICAgICAgICAgICAgICAgIC8vIGRvIHRoaXMuCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFp
blNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5
OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50
aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxh
dGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChzYW5lQ2hhaW5TcGVjdWxhdGlvbikK
KyAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwgKnNhbmVDaGFpblNwZWN1
bGF0aW9uKTsKKyAgICB9CisKICAgICB2b2lkIHNldFNhbmVDaGFpbklmUG9zc2libGUoTm9kZSog
bm9kZSwgQXJyYXk6OlNwZWN1bGF0aW9uIHNwZWN1bGF0aW9uKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCmlu
ZGV4IDlkNDlmZTYzMjVjNWQ0ZWY0ZjgxMjRmZmUzNmZhMGNmYmRiZDYxYmYuLmRkM2NjZmRhOWU1
NDdiZTExZDE5MmQxNzUyZDQ2ZmQ2ZGI5YTYxYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCkBAIC0zODcsNiArMzg3LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXhTdHIsIE5vZGUqIG5vZGUsIER1bXBDb250ZXgK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+aW5CeVN0YXR1cygpKTsKICAgICBpZiAo
bm9kZS0+aGFzUHV0QnlJZFN0YXR1cygpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICpub2Rl
LT5wdXRCeUlkU3RhdHVzKCkpOworICAgIGlmIChub2RlLT5oYXNFbnVtZXJhdG9yTWV0YWRhdGEo
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZW51bWVyYXRvck1vZGVzID0gIiwgbm9kZS0+
ZW51bWVyYXRvck1ldGFkYXRhKCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiVDoiLCAqbm9kZS0+dGFyZ2V0QmxvY2soKSk7CiAgICAgaWYgKG5v
ZGUtPmlzQnJhbmNoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCmluZGV4IDZjYWUwN2U5
MDZmOWMxZDBlZjQwMzMwYzIzMzQ2YzVkNGMyM2Y5YzAuLjFiYWExYzhiY2Y1MTkzMTQwNDMwYTEx
ZmJjMGYzYTg5MjIxNTFlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCkBAIC0xMzQ0
LDYgKzEzNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6VW5kZWNpZGVkKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzgwLDYgKzEzODEsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAvLyBGSVhNRTogVGVhY2ggdGhpcyBhYm91dCBFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleC4KICAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOiB7CiAgICAgICAg
ICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBSZWxhdGlvbnNoaXA6Okxlc3NUaGFu
KSk7CiAgICAgICAgICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRl
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbV96ZXJvLCBSZWxhdGlvbnNoaXA6OkdyZWF0ZXJUaGFu
LCAtMSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKaW5kZXggMGE1
OTNlNTZhNzg2ZDM5M2ZkODdiNjU1N2QzNTJlM2YwZDQwNmFhNS4uZWM1YThmYjZlYWNlMjlkMzVl
ZDA1N2NkNjRmMGQ2ZjQ2NDY2NGQwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNYXlFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCkBAIC0xMTEsOCArMTExLDExIEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJTZXRQcml2YXRlQnJhbmRTdGF0dXM6CisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CiAg
ICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFt
ZToKICAgICBjYXNlIFN0ckNhdDoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDY5MTYyYmNmZjRmZDI3MzYyMDkz
MGM5NzA3YTZkMGE0MzhlNWVkODEuLjY5MDMzZjc5OTFhMzY3YmE0NTUxOTM0ZGY4MzExNmFkYjQ0
MTcxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01Miw2ICs1Miw3IEBA
CiAjaW5jbHVkZSAiRGVsZXRlQnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiR2V0QnlWYXJpYW50Lmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0
S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCkBAIC0xNzcyLDYgKzE3NzMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgR2V0QnlJZERpcmVjdEZsdXNoOgogICAgICAgICBjYXNl
IEdldFByb3RvdHlwZU9mOgogICAgICAgICBjYXNlIFRyeUdldEJ5SWQ6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNl
IEdldEJ5VmFsV2l0aFRoaXM6CiAgICAgICAgIGNhc2UgR2V0UHJpdmF0ZU5hbWU6CkBAIC0xOTQx
LDYgKzE5NDMsODQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8dm9pZCo+
KCk7CiAgICAgfQogCisgICAgYm9vbCBoYXNTdG9yYWdlQ2hpbGQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAg
ICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ29kZVBvaW50QXQ6
CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEdldEJ5VmFs
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgor
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGNhc2UgQXRvbWljc0FkZDoKKyAg
ICAgICAgY2FzZSBBdG9taWNzQW5kOgorICAgICAgICBjYXNlIEF0b21pY3NDb21wYXJlRXhjaGFu
Z2U6CisgICAgICAgIGNhc2UgQXRvbWljc0V4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NM
b2FkOgorICAgICAgICBjYXNlIEF0b21pY3NPcjoKKyAgICAgICAgY2FzZSBBdG9taWNzU3RvcmU6
CisgICAgICAgIGNhc2UgQXRvbWljc1N1YjoKKyAgICAgICAgY2FzZSBBdG9taWNzWG9yOgorICAg
ICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2Fz
ZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBBcnJheUluZGV4T2Y6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBzdG9yYWdlQ2hpbGRJbmRleCgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU3Rv
cmFnZUNoaWxkKCkpOworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICAgICAgY2FzZSBT
dHJpbmdDb2RlUG9pbnRBdDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAg
ICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGNhc2UgQXRvbWljc0Fk
ZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQW5kOgorICAgICAgICBjYXNlIEF0b21pY3NDb21wYXJl
RXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0V4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0
b21pY3NMb2FkOgorICAgICAgICBjYXNlIEF0b21pY3NPcjoKKyAgICAgICAgY2FzZSBBdG9taWNz
U3RvcmU6CisgICAgICAgIGNhc2UgQXRvbWljc1N1YjoKKyAgICAgICAgY2FzZSBBdG9taWNzWG9y
OgorICAgICAgICAgICAgcmV0dXJuIDIgKyBudW1FeHRyYUF0b21pY3NBcmdzKG9wKCkpOworICAg
ICAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGNh
c2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgICAgICBy
ZXR1cm4gMjsKKworICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKKyAgICAgICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0dXJuIDI7CisK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
ICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3MgdG8gZGV0ZXJt
aW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiArMjI4NSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgpAQCAtMzE3
NCw2ICszMjU4LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFNldFBy
aXZhdGVCcmFuZFN0YXR1cyo+KCk7CiAgICAgfQogCisgICAgYm9vbCBoYXNFbnVtZXJhdG9yTWV0
YWRhdGEoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNh
c2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVy
YXRvckhhc093blByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBFbnVtZXJhdG9yTWV0YWRhdGEgZW51
bWVyYXRvck1ldGFkYXRhKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX29wSW5mbzIuYXM8RW51
bWVyYXRvck1ldGFkYXRhPigpOworICAgIH0KKwogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50
U3RyZWFtJiBvdXQpCiAgICAgewogICAgICAgICBpZiAoIWNoaWxkMSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IDVkNGIxN2ZiMzc2NTI4ODg5OGE5MzA4Y2Y2
NjU4MTQyMTdjNTBhZDEuLjVjZTlhZjNlNDUwMzQ4ZWNhYWJhYzFiMWM4OTVhZWMzZTFmNzY4YmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKQEAgLTUxNSw2ICs1MTUs
MTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAog
ICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwK
KyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgTm9kZVJlc3VsdEpT
IHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2Rl
LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRl
eCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JHZXRCeVZhbCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAg
bWFjcm8oRW51bWVyYXRvckluQnlWYWwsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhhc1ZhckFy
Z3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRW51bWVyYXRvckhhc093blByb3Bl
cnR5LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIC8qIE5vZGVzIGZvciBKU01hcCBhbmQgSlNTZXQgKi8gXAogICAgIG1hY3JvKE1h
cEhhc2gsIE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKE5vcm1hbGl6ZU1hcEtleSwgTm9k
ZVJlc3VsdEpTKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAppbmRleCA4ZDE1ZDZhYjM1MTZiNWViMDJiN2Y2M2Y0NDg2MTc5ZTliOGU4NDRkLi5mZWViYWJi
YTUwZTk1MGVkMjA5NTk5MzlhNzM3NzMyODY5YTg3NmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTI1MDUsNiArMjUwNSwxMDcgQEAgSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIEpTQ2VsbCosIChKU0ds
b2JhbE9iamVjdCogZ2xvYmEKICAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZy
b20odm0sIGluZGV4KS5zdHJpbmcoKSk7CiB9CiAKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUs
IHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBK
SVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok1vZGU+KG1vZGVOdW1iZXIpOworICAgIGlmIChKU1ZhbHVlOjpkZWNvZGUo
YmFzZVZhbHVlKS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAgIEFTU0VSVChtb2RlID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5pdE1vZGUpOworICAgICAgICBBU1NFUlQoIWlu
ZGV4KTsKKyAgICAgICAgQVNTRVJUKCFlbnVtZXJhdG9yLT5zaXplT2ZQcm9wZXJ0eU5hbWVzKCkp
OworICAgICAgICBtb2RlID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTsK
KyAgICB9IGVsc2UgeworICAgICAgICBKU09iamVjdCogYmFzZSA9IEpTVmFsdWU6OmRlY29kZShi
YXNlVmFsdWUpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQWxsb2Nh
dGVJbmRleGVkTmFtZVN0cmluZyA9IGZhbHNlOworICAgICAgICBlbnVtZXJhdG9yLT5jb21wdXRl
TmV4dChnbG9iYWxPYmplY3QsIGJhc2UsIGluZGV4LCBtb2RlLCBzaG91bGRBbGxvY2F0ZUluZGV4
ZWROYW1lU3RyaW5nKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWUgcmVzdWx0ID0gYml0d2lz
ZV9jYXN0PEpTVmFsdWU+KHN0YXRpY19jYXN0PHVpbnQ2NF90Pihtb2RlKSA8PCAzMiB8IGluZGV4
IHwgSlNWYWx1ZTo6TnVtYmVyVGFnKTsKKyNlbHNlCisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Zh
bHVlKG1vZGUsIGluZGV4KTsKKyNlbmRpZgorICAgIEFTU0VSVChyZXN1bHQuaXNOdW1iZXIoKSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitKU0NfREVGSU5FX0pJ
VF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIEVu
Y29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKworICAgIGlmICht
b2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAg
ICAgICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+aW5kZXhlZExlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2
bSwgaW5kZXgpLnN0cmluZygpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiByZXN1bHQg
PSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisKKyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgRW5jb2RlZEpTVmFs
dWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIGJhc2UsIHVpbnQzMl90
IGluZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBlbnVtZXJhdG9yLT5wcm9w
ZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lID0g
c3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBzY29wZS5hc3NlcnROb0V4
Y2VwdGlvbigpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlLT50b09iamVjdChnbG9iYWxP
YmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBSRUxF
QVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdldChnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
cHJvcGVydHlOYW1lVmFsdWUsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSAmJiBiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGJhc2UuZ2V0T2JqZWN0KCktPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgp
KSk7CisKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0ganNTZWN1cmVDYXN0PEpTU3RyaW5n
Kj4odm0sIEpTVmFsdWU6OmRlY29kZShwcm9wZXJ0eU5hbWVWYWx1ZSkpOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihDb21tb25TbG93UGF0
aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFtZSkpKSk7Cit9CisK
K0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2Rl
ZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSwgdWlu
dDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3Qo
KS0+aGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5n
KiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVj
b2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlO
YW1lLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3Qs
IGJhc2UsIGlkZW50aWZpZXIpKSkpOworfQorCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQ2VsbCogcmVnZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFz
dEluZGV4KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCmluZGV4IDMxNGUxZmVkZTU5NWQwZmI4ZmE4
MzVlZjcyMDVlNmI2NDVjMzA0NmIuLmQzNmYzNTNiYzM2MTJiOTg4MmNhMWQxODM4NDczZGQwOTI4
NTk0NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCkBAIC0z
Niw2ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgRGF0ZUluc3RhbmNlOwogY2xhc3Mg
SlNCaWdJbnQ7CiBzdHJ1Y3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGU7CitjbGFzcyBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I7CiAKIG5hbWVzcGFjZSBERkcgewogCkBAIC0xMTAsNiArMTExLDEy
IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KikpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBK
U0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQz
Ml90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dWludDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikp
OworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0
SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwg
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3Ry
dWN0dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3
ZTMwNmJhYjg1MzdjMGU4OWUyZTBkLi5kMmFlY2MwMWE1ZjI5MDQzYWUyMWRmZGZkY2M3ZjUxMDk5
ODhjMjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsK
ICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAg
ICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hp
bGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51
bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxl
SW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAg
ICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNh
c2UgUmVnRXhwRXhlYzoKQEAgLTEyMDUsMTAgKzEyMDcsMTUgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHNldFByZWRpY3Rpb24oU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwog
CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKICAgICAgICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVu
Z3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFs
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBJ
bkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBIYXNQcml2YXRlTmFt
ZToKQEAgLTEyMzksNiArMTI0NiwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihTcGVjU3RyaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAgIC8v
IFRoaXMgY2FuIGFjdHVhbGx5IHJldHVybiBhIEpTIG51bGwgYnV0IHdlIGJyYW5jaCBvZiB0aGF0
IGNhc2UgaW4gdGhlIHNhbWUgYmFzaWMgYmxvY2sgc28gd2UgZG9uJ3Qgd2FudCB0byBtZXNzIHdp
dGgKKyAgICAgICAgICAgIC8vIGZpeHVwJ3MgbG9naWMuCisgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNGdWxsTnVtYmVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogeworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgdmFsdWUgcHJvZmlsZSB3aGV0aGVyIHdlJ3Zl
IGV2ZXIgYWN0dWFsbHkgc2VlbiBhIHN5bWJvbC9zdHJpbmcuCisgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKwogICAgICAgICBjYXNlIFBhcnNlSW50OiB7CiAgICAgICAgICAgICAvLyBXZSBleHBl
Y3QgdGhpcyBub2RlIHRvIGFsbW9zdCBhbHdheXMgcHJvZHVjZSBhbiBpbnQzMi4gSG93ZXZlciwK
ICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgaXQgcHJvZHVjZXMgTmFOIG9yIGludGVnZXJz
IG91dCBvZiBpbnQzMiByYW5nZS4gV2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCmluZGV4IGM5NjM3YTFkMTNmYWFmOWVjMDQ1NjU0ODEw
NWY1N2UyOTk5ZDRjMDMuLjY1NjUxMTA0MThkY2FlOWU0ZmVmZmZhOTk0NjIyNzIzYjQyODA1NDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNl
LmNwcApAQCAtODYsNiArODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbG93ZXJCb3VuZHND
aGVjayhtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAxKSwg
bV9ncmFwaC5jaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAg
IGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAg
ICAgICAgICBsb3dlckJvdW5kc0NoZWNrKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSwg
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMikpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4IDBmOWJkZTZhMzE1ZGE3MTcyYTMwZjYxOWVlMmQwYjli
NDYwZTJjNTAuLmEwNTFlNzRhNzA2MjExNTljODNiOTYyOTNjODI4NmZlMzU0ZmQyY2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0zNzIsNiAr
MzcyLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgLy8gdG8gY2FwdHVyZSAi
cHJvZmlsaW5nIiBhdCB0aGUgcG9pbnQgaW4gY29udHJvbCBmbG93IGhlcmUgdGhlIHVzZXIgcHV0
IHRoZW0uCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5
VmFsOgogICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9y
YWdlOgogICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CkBAIC00OTYsNiArNDk3LDExIEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgICAgIHJldHVybiBpc1NhZmU7CiAgICAgfQogCisgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAvLyBUaGVzZSB0ZWNo
bmljYWxseSBkb24ndCBoYXZlIGVmZmVjdHMgYnV0IHRoZXknbGwgb25seSBldmVyIGZvbGxvdyBh
IEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlIHNvIHdlIG1pZ2h0IGFzIHdlbGwgcmV0
dXJuIGZhbHNlLgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRh
dGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgog
ICAgIGNhc2UgQ3JlYXRlUHJvbWlzZToKQEAgLTU5NSw2ICs2MDEsOCBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgogICAgIGNhc2UgSW5CeVZhbDoK
ICAgICBjYXNlIEluQnlJZDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CiAgICAg
Y2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgY2FzZSBIYXNPd25Qcm9wZXJ0eToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMjkyY2Vm
NjFhMWVkMTUxOGE2MDg3MTM0MmQ2NDRlZDk3OGIxZTViOC4uM2UzZjgxMjNkNmIxMGJhNTYzMmY4
MWU5NmY3ZWQwMThlNWI1YTYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTE2MzUsMjUgKzE2MzUsMTUgQEAgSlNWYWx1ZVJlZ3NU
ZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQpCiB7CiB9
CiAKK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2
ZUpJVCogaml0LCBHUFJSZWcgc3BlY2lmaWNQYXlsb2FkKQogI2lmIFVTRShKU1ZBTFVFNjQpCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVt
cG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZh
bHVlV29yZCkKLSAgICA6IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCi17Ci19CisgICAgOiBt
X2dwcihqaXQsIHNwZWNpZmljUGF5bG9hZCkKICNlbHNlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklU
KiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCByZXN1bHRXb3JkKQor
ICAgIDogbV9wYXlsb2FkR1BSKGppdCwgc3BlY2lmaWNQYXlsb2FkKQorICAgICwgbV90YWdHUFIo
aml0KQorI2VuZGlmCiB7Ci0gICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQpIHsKLSAg
ICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOwot
ICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOwotICAgICAgICBtX3RhZ0dQUiA9
IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICB9CiB9Ci0jZW5kaWYKIAog
I2lmIFVTRShKU1ZBTFVFNjQpCiBKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1w
b3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIEpTVmFsdWVPcGVyYW5kJiBvcGVy
YW5kKQpAQCAtMjU5NSw3ICsyNTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dENoYXJDb2RlQXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdChzY3JhdGNoUmVn
LCBtX2N1cnJlbnROb2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpT
VmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVm
aXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLmNoaWxk
KG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC5jaGlsZChub2RlLCAxKSk7CkBAIC0yNjA0LDE3ICsyNTk0LDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZzsKLSAgICBHUFJSZWcgcmVzdWx0VGFnUmVn
ID0gSW52YWxpZEdQUlJlZzsKLSAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5k
cygpKSB7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZWFsUmVzdWx0VGFnKHRoaXMpOwotICAgICAg
ICByZXN1bHRUYWcuYWRvcHQocmVhbFJlc3VsdFRhZyk7Ci0gICAgICAgIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZv
cm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpID8gRGF0YUZv
cm1hdEpTIDogRGF0YUZvcm1hdENlbGwpOworICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCk7CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNh
biBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxh
cmdlCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaFJlZyk7CkBAIC0yNjUwLDggKzI2MzMs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBu
b2RlKQogICAgICAgICAgICAgYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRpb25TaW5nbGVDaGFy
YWN0ZXJTdHJpbmcsIHNjcmF0Y2hSZWcsICZ2bSwgc2NyYXRjaFJlZykpOwogCiAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICBBU1NFUlQoZm9ybWF0
ID09IERhdGFGb3JtYXRKUyk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFRhZ1JlZyk7CisgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdz
LnRhZ0dQUigpKTsKICNlbmRpZgogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTI2
NjksMzQgKzI2NTMsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
dHJpbmcoTm9kZSogbm9kZSkKICAgICAgICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRX
YXRjaFN0cnVjdHVyZVRyYW5zaXRpb24oc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlKTsKICAgICAg
ICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24o
b2JqZWN0UHJvdG90eXBlU3RydWN0dXJlKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAg
ICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihtYWtlVW5pcXVlPFNhbmVTdHJpbmdHZXRCeVZhbFNs
b3dQYXRoR2VuZXJhdG9yPigKLSAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgSlNW
YWx1ZVJlZ3Moc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0jZWxzZQogICAgICAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93
UGF0aEdlbmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFs
dWVSZWdzKHJlc3VsdFRhZ1JlZywgc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0jZW5k
aWYKKyAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJv
cGVydHlSZWcpKTsKICAgICAgICAgfSBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxTdHJpbmdJbnQsCi0gICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7Ci0jZWxzZQogICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCiAgICAgICAg
ICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0j
ZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBqc1ZhbHVl
UmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwotI2Vsc2UKLSAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwotI2VuZGlm
Ci0gICAgfSBlbHNlCi0gICAgICAgIGNlbGxSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9k
ZSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbV9jdXJyZW50Tm9kZSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpCisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBtX2N1
cnJlbnROb2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9t
Q2hhckNvZGUoTm9kZSogbm9kZSkKQEAgLTMzNDksMTQgKzMzMjEsMzEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6bG9hZEZyb21JbnRUeXBlZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcg
cHJvcGVydHlSZWcKICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVk
QXJyYXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlU
eXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50
VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywg
VHlwZWRBcnJheVR5cGUgdHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUsIGJvb2wgc2hvdWxkQm94KQog
ewotICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpIHsKKyAg
ICBib29sIGlzVUludDMyID0gZWxlbWVudFNpemUodHlwZSkgPT0gNCAmJiAhaXNTaWduZWQodHlw
ZSk7CisgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOworCisg
ICAgaWYgKHNob3VsZEJveCkgeworICAgICAgICBpZiAoaXNVSW50MzIpIHsKKyAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSBmcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgbV9qaXQuY29udmVydElu
dDMyVG9Eb3VibGUocmVzdWx0UmVnLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIHBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okdy
ZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UmVnLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICAg
ICAgbV9qaXQuYWRkRG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJkFzc2VtYmx5
SGVscGVyczo6dHdvVG9UaGUzMiksIGZyZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcG9zaXRp
dmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKGZyZXN1bHQuZnBy
KCksIHJlc3VsdFJlZ3MpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faml0LmJveElu
dDMyKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghaXNVSW50MzIpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpIDwgNCB8
fCBpc1NpZ25lZCh0eXBlKSk7CiAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFJlZywg
bm9kZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGVsZW1lbnRT
aXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKKwogICAgIGlmIChub2RlLT5zaG91
bGRTcGVjdWxhdGVJbnQzMigpICYmIGNhblNwZWN1bGF0ZSkgewogICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSk7CiAg
ICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CkBAIC0zMzgwLDcgKzMz
NjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChO
b2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeQogICAgIGRvdWJsZVJlc3VsdChmcmVzdWx0
LmZwcigpLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwg
VHlwZWRBcnJheVR5cGUgdHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkK
IHsKICAgICBBU1NFUlQoaXNJbnQodHlwZSkpOwogICAgIApAQCAtMzM5MiwxMyArMzM4MSwxNSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9k
ZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdAogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIERhdGFGb3JtYXQgZm9y
bWF0OworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1h
dEludDMyKTsKKyAgICBib29sIHNob3VsZEJveCA9IGZvcm1hdCA9PSBEYXRhRm9ybWF0SlM7CiAK
ICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVn
KTsKLSAgICBsb2FkRnJvbUludFR5cGVkQXJyYXkoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIHJl
c3VsdFJlZywgdHlwZSk7CisgICAgbG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgdHlwZSk7CiAgICAgY29uc3RleHBy
IGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3Vs
dChub2RlLCByZXN1bHRSZWcsIHR5cGUsIGNhblNwZWN1bGF0ZSk7CisgICAgc2V0SW50VHlwZWRB
cnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0UmVncywgdHlwZSwgY2FuU3BlY3VsYXRlLCBzaG91
bGRCb3gpOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklUOjpnZXRJbnRUeXBlZEFycmF5U3RvcmVP
cGVyYW5kKApAQCAtMzYzNiw3ICszNjI3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnQKICAg
ICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUq
IG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpCiB7CiAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogICAgIApAQCAtMzY0OCw2ICsz
NjM5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlCiAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwogCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsK
KyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXREb3Vi
bGUpOworCiAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBGUFJSZWcgcmVzdWx0
UmVnID0gcmVzdWx0LmZwcigpOwogICAgIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2sobm9kZSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpOwpAQCAtMzY2NCw3ICszNjU5LDEzIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5
cGVkQXJyYXlUeXBlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
fQogICAgIAotICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIGlmIChmb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgIG1faml0LmJveERvdWJsZShyZXN1bHRSZWcs
IHJlc3VsdFJlZ3MpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSk7
CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIH0KIH0KIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUp
CkBAIC0zNzAzLDcgKzM3MDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZQogICAgIG5vUmVz
dWx0KG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3RyaW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJk
YTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMzcxMSwxOSAr
MzcxMiwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RX
aXRoU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwog
ICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERh
dGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3RyaW5nKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdl
dEJ5VmFsT2JqZWN0U3RyaW5nLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSogbm9kZSkKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSog
bm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBhcmcxKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzIodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7CkBAIC0zNzMxLDEyICszNzMzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSogbm9kZSkKICAgICBHUFJSZWcg
YXJnMUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwog
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBz
dGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKwogICAgIHNwZWN1bGF0ZU9iamVj
dChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBhcmcxR1BSKTsKICAgICBzcGVjdWxhdGVT
eW1ib2wobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgYXJnMkdQUik7CiAKICAgICBmbHVz
aFJlZ2lzdGVycygpOwotICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOwogCkBAIC04MDM4LDE3ICs4MDQxLDE3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChOb2RlKiBub2RlKQogICAgIHN0
cmljdEludDMyUmVzdWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2Rl
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
LSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgR1BSUmVn
IHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOworCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZv
cm1hdEpTKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
OwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtODA3
OSwyMiArODA4MiwyNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRp
cmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2NvcGVk
QXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAvLyBUT0RPOiBBcmUgYm90aCBvZiB0
aGVzZSBuZWNlc3Nhcnk/PwogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoMih0aGlzKTsKICAgICAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHNjcmF0Y2gy
LmdwcigpOwogICAgIAogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwor
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBz
dGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKICAgICAKICAgICBtX2ppdC5sb2Fk
UHRyKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1
bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwpAQCAt
MTM0ODIsNiArMTM0ODcsMzE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUb0luZGV4
U3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKKworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQ
UlJlZyBtb2RlR1BSID0gbW9kZS5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVu
dW1lcmF0b3IuZ3ByKCk7CisKKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBKU1ZhbHVl
UmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMsIFJldXNlLCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBy
ZXN1bHQucmVncygpOworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFs
dWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
MCkpKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaW5jcmVtZW50TG9vcDsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZTsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBz
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsKKworICAgICAg
ICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAgICAgICAgIGluY3JlbWVudExvb3AgPSBt
X2ppdC5sYWJlbCgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoLmdwcigpKTsKKworICAgICAgICAgICAgaW5pdE1vZGUubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHNjcmF0Y2guZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICB9KSk7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpLmxpbmtUbyhpbmNy
ZW1lbnRMb29wLCAmbV9qaXQpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAg
ICBtX2ppdC5vcjY0KHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNl
bHNlCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2Up
IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKKworICAgICAgICAvLyBIYXMgdGhlIHNhbWUgc3RydWN0dXJlIGFzIHRo
ZSBlbnVtZXJhdG9yLgorICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291
cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVz
dWx0UmVncy5wYXlsb2FkR1BSKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUs
IEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhH
UFIsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1v
ZGVHUFIpOworCisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICBpbml0TW9kZS5saW5r
KCZtX2ppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQub3I2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSA8PCAzMiksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyNlbHNlCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYK
KworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7Cisg
ICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLnJlZ3MoKTsKKworICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBpbmRleEdQUiwgbW9kZUdQ
UiwgZW51bWVyYXRvckdQUik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoTm9kZSogbm9kZSkKK3sKKyAgICBKU1Zh
bHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1
ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5qc1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBw
YXlsb2FkR1BSID0gcGFpclJlZ3MucGF5bG9hZEdQUigpOworCisgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
bV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSksIHBheWxvYWRHUFIsIHJlc3VsdEdQUik7CisKKyAgICBzdHJpY3RJbnQzMlJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVy
YXRvck5leHRFeHRyYWN0TW9kZShOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVw
ZGF0ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVn
cyA9IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHBhaXJHUFIgPSBpczY0
Qml0KCkgPyBwYWlyUmVncy5wYXlsb2FkR1BSKCkgOiBwYWlyUmVncy50YWdHUFIoKTsKKworICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgbV9qaXQucnNoaWZ0NjQocGFpckdQ
UiwgVHJ1c3RlZEltbTMyKDMyKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgbV9qaXQubW92ZShw
YWlyR1BSLCByZXN1bHRHUFIpOworI2VuZGlmCisgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzayksIHJlc3VsdEdQ
Uik7CisKKyAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUo
Tm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXhPcGVy
YW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgbW9kZU9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGVudW1lcmF0b3JPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKworICAgIEdQ
UlJlZyBpbmRleCA9IGluZGV4T3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgbW9kZSA9IG1vZGVP
cGVyYW5kLmdwcigpOworICAgIEdQUlJlZyBlbnVtZXJhdG9yID0gZW51bWVyYXRvck9wZXJhbmQu
Z3ByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpTVmFsdWVSZWdzRmx1c2hlZENh
bGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1
bHQucmVncygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRh
dGVQcm9wZXJ0eU5hbWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBp
bmRleCwgbW9kZSwgZW51bWVyYXRvcik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAgRWRnZSBi
YXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0
ZSA9IFsmXSAoR1BSUmVnIGJhc2VDZWxsR1BSKSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsK
KyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BS
OworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgYmFkU3RydWN0dXJlU2xvd1BhdGg7CisKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5v
ZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7CisgICAgICAgICAgICBFZGdlIHN0b3JhZ2VFZGdl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBpZiAoc3RvcmFnZUVkZ2UpCisgICAgICAgICAgICAg
ICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0b3JhZ2VFZGdlKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDUp
KTsKKworICAgICAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICAg
ICAgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgICAgIGVudW1lcmF0b3JHUFIgPSBl
bnVtZXJhdG9yLmdwcigpOworCisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBv
cmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKwor
ICAgICAgICAgICAgYm9vbCBoYXZlU3RvcmFnZSA9ICEhc3RvcmFnZUVkZ2U7CisgICAgICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RvcmFnZVRlbXBvcmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlR1BSOworICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkgeworICAgICAgICAgICAgICAg
IHN0b3JhZ2VUZW1wb3JhcnkgPSBHUFJUZW1wb3JhcnkodGhpcywgUmV1c2UsIGVudW1lcmF0b3Ip
OworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBzdG9yYWdlVGVtcG9yYXJ5LmdwcigpOwor
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBub3RGYXN0TmFt
ZWRDYXNlczsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSB0
aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlzIG5vdCBhbiBvYmplY3QuCisgICAgICAgICAgICBu
b3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBtb2RlR1BSLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKSk7
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBjaGVj
ayB0aGF0IHRoZSBiYXNlIGlzIGEgY2VsbCBoZXJlIHNpbmNlIHdlIHdvbid0IGdlbmVyYXRlIE5h
bWVkTW9kZSBwcm9wZXJ0aWVzIGZvciBub24tb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAvLyBU
T0RPOiBwdXQgQXNzZXJ0IGhlcmU/CisKKyAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGUgc3Ry
dWN0dXJlCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElmIHdlIGtub3cgdGhlcmUncyBvbmx5
IG9uZSBzdHJ1Y3R1cmUgZm9yIGJhc2Ugd2UgY2FuIGp1c3QgZW1iZWQgaXQgaGVyZS4KKyAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUNlbGxH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOworCisgICAgICAg
ICAgICAgICAgYXV0byBiYWRTdHJ1Y3R1cmUgPSBtX2ppdC5icmFuY2gzMigKKyAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKwor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBNYXliZSB3ZSBzaG91bGQgaGF2ZSBhIGJldHRlciB3
YXkgdG8gcmVwcmVzZW50IEluZGV4ZWQrTmFtZWQ/CisgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkubm9kZSgpID09IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMykubm9kZSgpKQorICAgICAgICAgICAgICAgICAgICBiYWRTdHJ1Y3R1cmVTbG93UGF0aCA9
IGJhZFN0cnVjdHVyZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChiYWRTdHJ1Y3R1cmUpOworCisgICAgICAgICAgICAg
ICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgICAgICAgICAgICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG91dE9mTGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKworICAgICAgICAgICAgICAgIG1faml0LmxvYWRWYWx1ZShN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VDZWxsR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdFJlZ3MpOworCisgICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOworCisgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAg
ICAgICAgICAgICAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIG1f
aml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOworICAgICAgICAgICAgICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOworICAgICAgICAg
ICAgICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIGlmICghaGF2ZVN0b3JhZ2UpCisgICAgICAgICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUNlbGxHUFIsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOworICAgICAgICAgICAgICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZUdQUiwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIG9m
ZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvbmVD
YXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
bm90RmFzdE5hbWVkQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKHJlc3VsdFJlZ3MsIERhdGFGb3JtYXRKUyk7CisgICAgICAgIH0pKTsKKworICAg
ICAgICAvLyBXZSByZWx5IG9uIGNvbXBpbGVHZXRCeVZhbCB0byBjYWxsIGpzVmFsdWVSZXN1bHQg
Zm9yIHVzLgorICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBraW5kYSBoYWNreS4uLgorICAgICAg
ICBBU1NFUlQoZ2VuZXJhdGlvbkluZm8obm9kZSkuanNWYWx1ZVJlZ3MoKSA9PSByZXN1bHRSZWdz
ICYmIGdlbmVyYXRpb25JbmZvKG5vZGUpLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEpT
KTsKKworICAgICAgICBpZiAoYmFkU3RydWN0dXJlU2xvd1BhdGguaXNTZXQoKSkKKyAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChiYWRTdHJ1Y3R1cmVTbG93UGF0
aCwgdGhpcywgb3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlQ2VsbEdQUiwgaW5kZXhHUFIs
IGVudW1lcmF0b3JHUFIpKTsKKworICAgICAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAg
IH07CisKKyAgICBpZiAoaXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgLy8g
VXNlIG1hbnVhbCBvcGVyYW5kIHNwZWN1bGF0aW9uIHNpbmNlIEZpeHVwIG1heSBoYXZlIHBpY2tl
ZCBhIFVzZUtpbmQgbW9yZSByZXN0cmljdGl2ZSB0aGFuIENlbGxVc2UuCisgICAgICAgIHNwZWN1
bGF0ZShub2RlLCBiYXNlRWRnZSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2VP
cGVyYW5kKHRoaXMsIGJhc2VFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAg
ICBnZW5lcmF0ZShiYXNlT3BlcmFuZC5ncHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZU9wZXJhbmQodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBnZW5lcmF0
ZShiYXNlT3BlcmFuZC5ncHIoKSk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93
UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
SGFzUHJvcGVydHkoTm9kZSogbm9kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xvd1BhdGhGdW5j
dGlvbikKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChhdXRvIGJhc2VSZWdzLCBHUFJSZWcgYmFzZUNl
bGxHUFIpIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMykpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworCisgICAgICAgIEpTVmFsdWVSZWdz
IHByb3BlcnR5TmFtZVJlZ3MgPSBwcm9wZXJ0eU5hbWUucmVncygpOworICAgICAgICBHUFJSZWcg
aW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdw
cigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisK
KyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgb3BlcmF0aW9uQ2FzZXM7CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShiYXNlRWRnZSkubV90eXBlICYgflNwZWNDZWxsKQorICAgICAgICAgICAgb3BlcmF0aW9u
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncykpOworCisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgZ2VuZXJhdGUgdGhpcyBjb2RlIGlmIHdlIGtub3cgYmFz
ZSBpcyBub3QgYSBjZWxsLgorICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBtb2RlR1BSLCBUcnVzdGVkSW1tMzIoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG9wZXJhdGlv
bkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRSZWdzKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBvcGVyYXRpb25DYXNl
cy5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihzbG93UGF0aEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5TmFtZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BS
KTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKKworICAgICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKKyAgICB9OworCisgICAgaWYgKGlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpKSB7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBn
ZW5lcmF0ZShiYXNlLmdwcigpLCBiYXNlLmdwcigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFz
ZS5yZWdzKCksIGJhc2UucGF5bG9hZEdQUigpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKiBub2RlKQoreworICAgIGNvbXBp
bGVFbnVtZXJhdG9ySGFzUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwp
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc093blByb3Bl
cnR5KE5vZGUqIG5vZGUpCit7CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2Rl
LCBvcGVyYXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpOworfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqIG5vZGUpCiB7CiAgICAgc3RkOjpvcHRp
b25hbDxHUFJUZW1wb3Jhcnk+IHN0dWJJbmZvOwpAQCAtMTQ5MzQsMjggKzE1MjQ3LDI4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBu
b2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0
aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
R1BSUmVnLCBHUFJSZWc+KCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IElu
dmFsaWRHUFJSZWc7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CiAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIEFycmF5TW9kZSBtb2Rl
ID0gbm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgIGNh
c2UgQXJyYXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAg
QVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAg
ICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxk
SW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9
IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOwor
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OwogCiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE0OTgzLDEyICsxNTI5Niwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUq
IG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0
b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CiAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4
R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJv
dW5kcygpKQpAQCAtMTUwMTIsMTMgKzE1MzI3LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNs
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAy
KSk7CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3Rv
cmFnZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwog
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3Rv
cmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2Ny
YXRjaC5ncHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHBy
ZWZpeCgpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKTsKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQogICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgb3V0
T2ZCb3VuZHMpOwpAQCAtMTUwNDcsMTQgKzE1MzY0LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0Na
IHNsCiAgICAgZGVmYXVsdDogewogICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgVHlwZWRBcnJh
eXMgaW4gSGFzSW5kZXhlZFByb3BlcnR5IElDCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIs
IHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5q
dW1wKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQogCiAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgc2xvd1BhdGhPcGVyYXRpb24s
IHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGluZGV4R1BS
KSk7Ci0KLSAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREaXJlY3RQbmFtZShOb2RlKiBub2RlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDk4
Yzc2MTZiOGZkMmZiZjVjNGRkOGE1NzcxNTA4YWQyNjc5Zjk5ZDEuLjViYjZkZTFiOWVmNmM2NGM3
NDRkYTU3NzU5YWU0NDZjYWE1ODE4YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR1BSVGVtcG9yYXJ5OworY2xhc3MgSlNWYWx1ZVJlZ3NU
ZW1wb3Jhcnk7CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJhdG9y
OwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CkBAIC0yNDYsNiArMjQ3LDggQEAgcHVibGljOgogICAg
IH0KICAgICBHUFJSZWcgYWxsb2NhdGUoR1BSUmVnIHNwZWNpZmljKQogICAgIHsKKyAgICAgICAg
aWYgKHNwZWNpZmljID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0ZSgpOwog
I2lmIEVOQUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQogICAgICAgICBt
X2ppdC5hZGRSZWdpc3RlckFsbG9jYXRpb25BdE9mZnNldChtX2ppdC5kZWJ1Z09mZnNldCgpKTsK
ICNlbmRpZgpAQCAtMTM0NSwxMiArMTM0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS0+YXJyYXlNb2RlKCkp
OwogICAgIH0KICAgICAKKyAgICAvLyBXZSB1c2UgYSBzY29wZWRMYW1iZGEgdG8gcGxhY2F0ZSBy
ZWdpc3RlciBhbGxvY2F0aW9uIHZhbGlkYXRpb24uCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwo
Tm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9y
bWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworCiAgICAgdm9pZCBj
b21waWxlR2V0Q2hhckNvZGVBdChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiwgY29u
c3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRnJvbUNo
YXJDb2RlKE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1l
bnRzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqLCBj
b25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0
YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYg
cHJlZml4KTsKIAogICAgIHZvaWQgY29tcGlsZUdldFByaXZhdGVOYW1lKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVHZXRQcml2YXRlTmFtZUJ5SWQoTm9kZSopOwpAQCAtMTQyNCwxMiArMTQzMCwx
MiBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlJc0Rl
dGFjaGVkSWZPdXRPZkJvdW5kcyhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEpJVENvbXBpbGVyOjpK
dW1wIG91dE9mQm91bmRzKTsKICAgICB2b2lkIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2soTm9k
ZSosIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5kZXhHUFIpOwogICAgIHZvaWQgY29tcGlsZUdl
dFR5cGVkQXJyYXlCeXRlT2Zmc2V0KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9u
SW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdl
dEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJl
ZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRU
eXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFycmF5
VHlwZSk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiwg
VHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcg
YmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKik7Ci0gICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1h
dCk+JiBwcmVmaXgpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJv
bChOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFG
b3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBj
b21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdl
JiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxs
V2l0aFN5bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxk
Myk7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CkBAIC0xNDU4LDcg
KzE0NjQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgRWRnZSB2YWx1ZVVzZSk7CiAgICAg
dm9pZCBsb2FkRnJvbUludFR5cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBwcm9w
ZXJ0eVJlZywgR1BSUmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgc2V0
SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJy
YXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSk7CisgICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5TG9h
ZFJlc3VsdChOb2RlKiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5cGUsIGJv
b2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1l
IENsYXNzVHlwZT4gdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVnLCBSZWdpc3Rl
cmVkU3RydWN0dXJlLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QmLCBzaXplX3QsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogICAgIHZvaWQgY29tcGlsZU5l
d0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSop
OwpAQCAtMTUyOCw2ICsxNTM0LDE3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUhhc0VudW1l
cmFibGVQcm9wZXJ0eShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhOb2Rl
Kik7CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShO
b2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShOb2RlKik7
CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoTm9kZSopOworICAg
IHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqKTsKKyAg
ICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSopOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JI
YXNQcm9wZXJ0eShOb2RlKiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JJbkJ5VmFsKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkoTm9kZSopOworCiAgICAgdm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRC
eUlkRGlyZWN0KE5vZGUqKTsKQEAgLTE1NjgsNyArMTU4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvbXBpbGVDYWxsTnVtYmVyQ29uc3RydWN0b3IoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93
Q2hpY2tlblRhaWwoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShO
b2RlKiwgU19KSVRPcGVyYXRpb25fR0NaKTsKKyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoTm9kZSosIFNfSklUT3BlcmF0aW9uX0dDWiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6
dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZUV4dHJh
Y3RDYXRjaExvY2FsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDbGVhckNhdGNoTG9jYWxzKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQcm9maWxlVHlwZShOb2RlKik7CkBAIC0xOTM3LDYgKzE5
NTQsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3MoZ3ByKCkp
OwogICAgIH0KKyAgICBKU1ZhbHVlUmVncyByZWdzKCkgeyByZXR1cm4ganNWYWx1ZVJlZ3MoKTsg
fQogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBib29sIGlzRG91YmxlKCkgeyByZXR1cm4g
bV9pc0RvdWJsZTsgfQogCkBAIC0xOTY1LDcgKzE5ODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5bG9hZEdQUigpKTsKICAgICB9CiAKLSAgICBH
UFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoKQorICAgIEdQUlJlZyBncHIoV2hpY2hWYWx1
ZVdvcmQgd2hpY2ggPSBQYXlsb2FkV29yZCkKICAgICB7CiAgICAgICAgIHJldHVybiBqc1ZhbHVl
UmVncygpLmdwcih3aGljaCk7CiAgICAgfQpAQCAtMjAwMywyMSArMjAyMSwyMCBAQCBwcml2YXRl
OgogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgorICAgIFN0b3JhZ2VPcGVyYW5kKCkgPSBkZWZhdWx0OworCiAgICAgZXhwbGljaXQg
U3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQogICAgICAgICA6
IG1faml0KGppdCkKICAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52
YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAg
ICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkg
PT0gS25vd25DZWxsVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKLSAg
ICAgICAgICAgIGdwcigpOworICAgICAgICBlbXBsYWNlKGppdCwgZWRnZSk7CiAgICAgfQogICAg
IAogICAgIH5TdG9yYWdlT3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9ncHJPcklu
dmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPcklu
dmFsaWQpOworICAgICAgICBpZiAobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KICAgICAKICAg
ICBFZGdlIGVkZ2UoKSBjb25zdApAQCAtMjAzNiw2ICsyMDUzLDE3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAg
ICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CisKKyAgICB2b2lkIGVtcGxhY2UoU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbV9qaXQgPSBqaXQ7
CisgICAgICAgIG1fZWRnZSA9IGVkZ2U7CisgICAgICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCA9
PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgQVNTRVJUKG1faml0KTsKKyAgICAgICAgQVNTRVJU
KGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25D
ZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKKyAgICAgICAgICAg
IGdwcigpOworICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewpAQCAtMjA0Myw5ICsy
MDcxLDkgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU3BlY3VsYXRpdmVK
SVQqIG1faml0OworICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdCB7IG51bGxwdHIgfTsKICAgICBF
ZGdlIG1fZWRnZTsKLSAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CisgICAgR1BSUmVnIG1fZ3By
T3JJbnZhbGlkIHsgSW52YWxpZEdQUlJlZyB9OwogfTsKIAogCkBAIC0yMTM0LDExICsyMTYyLDE5
IEBAIGNsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHsKIHB1YmxpYzoKICAgICBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSgpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKik7
CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBHUFJSZWcgc3BlY2lm
aWNQYXlsb2FkKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCwgR1BSUmVnIHNwZWNp
ZmljVGFnKTsKKyNlbmRpZgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hW
YWx1ZVdvcmQgcmVzdWx0UmVnV29yZCA9IFBheWxvYWRXb3JkKTsKICAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYpOwogICAg
IH5KU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSB7IHJldHVybiAhIXJlZ3MoKTsgfQorCisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmIG9w
ZXJhdG9yPShKU1ZhbHVlUmVnc1RlbXBvcmFyeSYmKSA9IGRlZmF1bHQ7CisKICAgICBKU1ZhbHVl
UmVncyByZWdzKCk7CiAKIHByaXZhdGU6CkBAIC0yMTUwLDYgKzIxODYsMjYgQEAgcHJpdmF0ZToK
ICNlbmRpZgogfTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklU
KiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCkKKyAgICA6IG1fZ3By
KGppdCwgUmV1c2UsIG9wZXJhbmQpCit7Cit9CisjZWxzZQordGVtcGxhdGU8dHlwZW5hbWUgVD4K
K0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJ
VCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkK
K3sKKyAgICBpZiAocmVzdWx0V29yZCA9PSBQYXlsb2FkV29yZCkgeworICAgICAgICBtX3BheWxv
YWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7CisgICAgICAgIG1fdGFn
R1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9wYXlsb2Fk
R1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAgICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5
KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFzcyBGUFJUZW1w
b3JhcnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5k
ZXggOWQ0MDM2OTYxMGQ4OWU0MWU1MTZmNmM0YTQyNWU1ZmQ3MTAyYTFiZS4uNTAzYjM0MTQyMWZj
NjkxZWIwYjNmMGVlZDBmNTYzZjE4OTBlYzlmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0xODEyLDYgKzE4MTIs
MzM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9k
ZSogbm9kZSwgQmFzZU9wZXJhbmRUeXBlJiBiYXNlCiAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hp
bGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsgICAgCiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2Fz
ZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjaWYgQ09NUElMRVJf
UVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCisgICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Cisj
ZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIo
KTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShy
ZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFs
LmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAg
ICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUs
IHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtp
bmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJl
IHJpZ2h0LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0
eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERh
dGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncyk7CisgICAgICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAg
IHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVS
ZWdzKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFs
dWVSZWdzKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisK
KyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwor
ICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRH
ZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3Ry
ZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+
dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOworCisgICAgICAgIEpJVEdl
dEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRU
eXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwg
dXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3Vs
dFJlZ3MsIEludmFsaWRHUFJSZWcpOworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICBlbHNl
IGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBl
KFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJ
bnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+
IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVn
cyk7CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7Cisg
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewor
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0
aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
PT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEludDMyIDogRGF0YUZvcm1hdEpTKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0
SW50MzIpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHNTYW5lQ2hhaW4oKSk7CisKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAor
ICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFn
KSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9m
ZnNldCksCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAg
ICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwg
bm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIG1faml0Lmxv
YWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncy50YWdHUFIo
KSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwKKyAgICAg
ICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0
UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAg
ICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAorICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwor
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3Jl
KSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOworCisgICAgICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJl
c3VsdFJlZ3MpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0UmVncy50YWdHUFIoKSkpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
KworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRh
Rm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5mcHIoKSk7CisgICAg
ICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0LmZwcigpKSk7CisgICAgICAgICAgICBpZiAo
Zm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIGJveERvdWJsZShyZXN1
bHQuZnByKCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFT
U0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAg
ICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7
CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVz
dWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJl
c3VsdFJlZ3MpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlT
dG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdu
b3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKwor
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3Vs
dFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKwor
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChE
YXRhRm9ybWF0SlMpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0g
bV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKworICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJl
Z3MudGFnR1BSKCkpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJh
bmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGhvbGUpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7
CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJh
eTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3Vt
ZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29w
ZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5v
ZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Cisg
ICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50
VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOwor
ICAgIH0gfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7
CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMjIzMyw3ICsyNTYyLDEyIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5n
Q2hhckF0OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcg
c2FtZSBiYXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25T
dHJpbmcobm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZd
IChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gSlNW
YWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9y
bWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihy
ZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApAQCAtMjI2NSwzMjYgKzI1OTksMjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAg
ICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VF
eGl0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01Q
SUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFCTEVfQ09ERSkKLSAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3Mo
KSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpV
bmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRl
eCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIGluZGV4KTsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0gICAgICAgICAgICBHUFJSZWcgaW5kZXhH
UFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1
bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3Vs
dFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2UoKTsKLQotICAgICAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJl
c3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZh
bC5jb250YWlucyhub2RlKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1Vz
ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0
aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsgLy8gU2F2ZSBhIHJlZ2lzdGVyLCBzcGVj
dWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCi0gICAgICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsK
LSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVn
cyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMs
IFJldXNlLCBwcm9wZXJ0eSwgVGFnV29yZCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFBheWxvYWRXb3JkKTsKLQotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZXN1bHRUYWcuZ3ByKCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICgh
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVj
Q2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKLSAgICAgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnKTsKLQotICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCi0gICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUu
Zm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkp
Ci0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQot
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1Bh
dGguZ2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93
UGF0aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1Nh
bmVDaGFpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAot
ICAgICAgICAgICAgICAgICAgICByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0VGFn
LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSBqc1ZhbHVlUmVzdWx0OworICAgICAgICBHUFJUZW1wb3Jhcnkgb25lUmVnUmVzdWx0
OworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZd
IChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAg
ICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXls
b2FkKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5n
cHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9h
ZC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLQotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVz
dWx0VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5
bG9hZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1w
dHkocmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAg
ICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVn
KSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1
bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAg
ICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVl
UmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdz
KCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOwotICAgICAgICAgICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0SW50MzI6CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAgICAgICAg
ICAgICAgIG9uZVJlZ1Jlc3VsdCA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KG9uZVJlZ1Jlc3VsdC5ncHIo
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAgICAgRlBS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0g
cmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSBy
ZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZw
cigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVi
bGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOwotICAgICAgICAgICAgYm94RG91
YmxlKHRlbXBSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyk7Ci0KLSAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
LSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9i
amVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCBy
ZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHBy
b3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKLQotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0KLSAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhM
b2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0
VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOworICAgICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHRSZWdzID0ganNWYWx1ZVJlc3VsdC5yZWdzKCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7
Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0g
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7Ci0g
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9h
ZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNl
IEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVu
dHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6
Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBUeXBlZEFy
cmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAg
ICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAg
ICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFp
cihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAKQEAgLTQxMzMsMTEgKzQxNjgsMTkgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpOworICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKKwor
ICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsm
XSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwgcmVzdWx0LmdwcigpKTsgfSkp
OworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAg
Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4o
WyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluZGV4LmdwcigpLCByZXN1bHQuZ3ByKCkpOyB9
KSk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKQEAgLTQx
NTcsNiArNDIwMCw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAg
ICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OiB7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleChub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5
TmFtZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUo
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvckdldEJ5
VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsKKyAgICAgICAg
Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTogeworICAgICAgICBjb21waWxlRW51
bWVyYXRvckhhc093blByb3BlcnR5KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAg
ICBjYXNlIFByb2ZpbGVUeXBlOiB7CiAgICAgICAgIGNvbXBpbGVQcm9maWxlVHlwZShub2RlKTsK
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAppbmRleCBiNWUxY2MzZTQyZDJmYjRjOWQ0ZjEzMTA3ZTk4ZWZlMGIy
MDVlNWM3Li42MmZlMjIzZWFhOTBjNDhiYTMyNDJmNDhkNGFlNDk5ODJhNDA3Yjk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAg
LTIyNDYsNiArMjI0NiwzNzAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2Rl
KiBub2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
KE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCit7CisgICAg
c3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKKyAgICBjYXNlIEFycmF5OjpBbnlU
eXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKKyAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ0FyZ3VtZW50czoKKyAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zOgorICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CisgICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUgdHlwZSIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVn
cyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkg
PSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdFJlZ3MuZ3ByKCkpOworCisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkJp
Z1VpbnQ2NEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKKyAgICAgICAgaWYgKG1f
Z3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgIGlmICht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkg
PT0gU3RyaW5nVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVmaXgpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBw
cm9wZXJ0eS5ncHIoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRh
Rm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHN0
dWJJbmZvOworICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOworICAg
ICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKKyAgICAgICAg
ICAgIHN0dWJJbmZvID0gR1BSVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgc3R1YkluZm9H
UFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHNwZWN1bGF0ZShub2Rl
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHBy
ZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0UmVn
cy5ncHIoKTsKKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4u
c2VtYW50aWM7CisgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRD
YWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9y
aWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKKyAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKKworICAgICAgICBKSVRH
ZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklU
VHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlWYWws
IHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1
ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7
CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJv
cGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCisgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlz
VHlwZShTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlz
U3ltYm9sID0gdHJ1ZTsKKworICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7CisK
KyAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOworICAgICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKKyAgICAgICAgICAgIHNsb3dQ
YXRoID0gc2xvd1BhdGhJQ0NhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBn
ZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5m
b0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwK
KyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZv
KCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOworICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJh
eTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAg
ICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
Zm9ybWF0KSA9IHByZWZpeChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMy
ID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdCA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7
CisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3Vs
dCk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFp
bigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9
PSBBcnJheTo6Q29udGlndW91cyk7CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0KTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAg
ICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsCisgICAg
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdCwgbm9kZSwgZm9ybWF0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFz
ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUp
ID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1
bHRSZWdzLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisKKyAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewor
ICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRSZWcp
OworICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0
UmVnKTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJl
ZykpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWcsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAg
ICB9CisKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7CisKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsK
KyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgoRGF0YUZv
cm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpCisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdz
KCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdFJlZykpOworICAgICAgICAgICAg
aWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUo
cmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYgIXJlc3VsdFJlZ3MpOworICAgICAg
ICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBib29sIHJlc3VsdElzVW5i
b3hlZCA9IG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcik7CisKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
KyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKwor
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVt
cC5mcHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBEYXRh
Rm9ybWF0IGZvcm1hdDsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHBy
ZWZpeChyZXN1bHRJc1VuYm94ZWQgPyBEYXRhRm9ybWF0RG91YmxlIDogRGF0YUZvcm1hdEpTKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7CisgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgIGlm
IChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAgICAgICAgICAgICAgIGF1dG8gZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1
ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAg
ICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47CisgICAgICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4pLCB0ZW1wUmVnKTsKKyAgICAgICAg
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIXJlc3Vs
dFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdCh0ZW1wUmVnLCBub2RlKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBS
ZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwg
bnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0
eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncy5ncHIo
KSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAgICAgICAgICAg
IGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncy5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgQXJyYXk6
OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlz
SW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKKworCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxw
dHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSk7CisKKyAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwor
CisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7
CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9i
amVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6
OlN0cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5
OgorICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpV
aW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5
OjpGbG9hdDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OiB7CisgICAgICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4
KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKQEAgLTI3MTMsNyArMzA3NywxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIFN0
cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24gU3RyaW5nQ2hhckF0IG5vZGUgaGF2
aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0gICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7Cisg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+
KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJl
ZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlMgfHwgcHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRD
ZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHQucmVncygpLCBw
cmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApA
QCAtMjc0NiwzNDUgKzMxMTUsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChu
b2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6QW55VHlwZWRB
cnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICBjYXNlIEFycmF5
OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoKLSAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQ
cmVkaWN0aW9uczoKLSAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKLSAgICAgICAgICAg
IERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUgdHlwZSIpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogewotICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBSZXVzZSwgaW5kZXgpOwotICAgICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBu
b2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAg
ICAgICAgICAgdXNlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAg
aW5kZXgudXNlKCk7Ci0KLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBs
aWNpdGx5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkJpZ0ludDY0QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5Ogot
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5t
X3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgp
ID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgICAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAgICAgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFy
eT4gc3R1YkluZm87Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgcHJvcGVydHkpOwotCi0gICAgICAgICAgICBHUFJS
ZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOwotICAgICAgICAgICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Ci0gICAgICAgICAgICAgICAgc3R1YkluZm8u
ZW1wbGFjZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBzdHViSW5mb0dQUiA9IHN0dWJJbmZvLT5n
cHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICAg
ICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotCi0g
ICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7
Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNp
dGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4s
IG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVy
cyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCi0gICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOwotCi0g
ICAgICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgbV9q
aXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFj
Y2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJl
c3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKLQotICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9k
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCi0gICAg
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOwotICAg
ICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1Yklu
Zm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3Rh
dGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJv
bCkpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJ
VCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkp
OwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQ
YXRoOwotICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQp
KSB7Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIs
IENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9m
ZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLCBu
dWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAg
ICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVs
bHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKLSAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKLQotICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBB
U1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKTsKLSAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5j
aElmTm90RW1wdHkocmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0Lmdw
cigpKTsKLSAgICAgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
LSAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0
LmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlLCBub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6
OkludDMyID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9ybWF0SlMpOworICAgICAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbChub2RlLCBz
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1h
dCBwcmVmZXJyZWRGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7Cisg
ICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3dpdGNoIChw
cmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
LSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcp
OwotCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVD
aGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuYnJhbmNoSWZOb3RF
bXB0eShyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4s
IHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOwotICAgICAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdl
dEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1
bHQuZnByKCk7Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotCi0gICAgICAgICAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNo
YWluKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xl
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHRSZWcpKTsK
LSAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCByZXN1bHRJ
c1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkgJiYg
IShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOwotCi0gICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiByZXN1bHQ7
Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEdQUlJlZz4gcmVzdWx0UmVnOwotICAgICAgICAg
ICAgaWYgKCFyZXN1bHRJc1VuYm94ZWQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuZW1wbGFj
ZSh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXN1bHRSZWcgPSByZXN1bHQtPmdwcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAg
ICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOwotICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkg
ewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRJc1VuYm94ZWQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgICAgICBzbG93
Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgTmFO
ID0gUE5hTjsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShUcnVzdGVkSW1t
UHRyKCZOYU4pLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdCh0ZW1wUmVnLCBub2RlKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgICAgICAgICAgYm94
RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZt
X2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRl
eCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCAqcmVzdWx0UmVnKTsKLSAgICAgICAg
ICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQoKnJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgKnJl
c3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAqcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywg
cHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcs
IG5vZGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6
U2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3Bl
cnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRG
cm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1
bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRKUyB8fCBwcmVmZXJyZWRG
b3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50MzIpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IEpT
VmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MgPSBy
ZXN1bHQucmVncygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OwotICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0UmVnKTsKLSAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKLSAgICAKLSAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5
OgotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpV
aW50OEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAg
ICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFy
cmF5OgotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkZsb2F0NjRBcnJheTogewotICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQo
dHlwZSkpCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5v
ZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICB9IH0KKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgcHJl
ZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTM1ODEsNyArMzYyNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0ZXhwciBib29s
IGNhblNwZWN1bGF0ZSA9IGZhbHNlOwotICAgICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3Vs
dChub2RlLCByZXN1bHRHUFIsIHR5cGUsIGNhblNwZWN1bGF0ZSk7CisgICAgICAgIGNvbnN0ZXhw
ciBib29sIHNob3VsZEJveCA9IGZhbHNlOworICAgICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJl
c3VsdChub2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCB0eXBlLCBjYW5TcGVjdWxhdGUsIHNo
b3VsZEJveCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01MjkxLDExICs1
MzM3LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAg
IGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5KTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXgu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7Cisg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBS
ZXVzZSwgaW5kZXgpOworCisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwg
b3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6
dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRl
eC5ncHIoKSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IEdldERpcmVjdFBuYW1lOiB7CkBAIC01MzE1LDYgKzUzNjksNDIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51
bWVyYXRvck5leHRFeHRyYWN0TW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRF
eHRyYWN0TW9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51
bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxlRW51bWVyYXRv
ckdldEJ5VmFsKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1l
cmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHk6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBQcm9maWxlVHlwZTogewogICAgICAgICBj
b21waWxlUHJvZmlsZVR5cGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5k
ZXggMTE3NmQzZTdhZjI4MzMyYjAzMDc0MWI0ZDljNDBmMGJlZjFkMDM4Yi4uNWY1MWYyMjUxMDRm
OWJhNTIyNjk4ZGQwMzY3NWJkZDViZTI3NWZhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCkBAIC0yNzMsNiAr
MjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBOdWtlU3RydWN0dXJlQW5kU2V0QnV0dGVy
Zmx5OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAgICAgICAgICAgICAg
IGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6
CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICAgICAgICAgICAgICBj
YXNlIFB1dEJ5VmFsOgpAQCAtMzUyLDYgKzM1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgorICAgICAg
ICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICAgICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAppbmRleCAyZTJmMDdkZmM3ZThjMTNkZGIw
ZWRkNWEyZDA3YTVkODcyZTE3OTA4Li45ZWQ4NzEzM2Y3NzIzMGUwZTFiZDQ0NWYzMDYyMzQzN2Zj
ZDYzNDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaApAQCAtMTE0LDYgKzExNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1By
b3BlcnR5SW5kZXhPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cl9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjppbmRl
eGVkTGVuZ3RoT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
bW9kZVNldCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpIFwKICAg
ICBtYWNybyhKU1JvcGVTdHJpbmdfZmxhZ3MsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGbGFncygp
KSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2xlbmd0aCwgSlNSb3BlU3RyaW5nOjpvZmZzZXRP
Zkxlbmd0aCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZpYmVyMCwgSlNSb3BlU3RyaW5n
OjpvZmZzZXRPZkZpYmVyMCgpKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKaW5kZXggYTFhNWZkMjQ0Y2YyMTEwMzI2NDE5N2E3NmFlMzBjN2Y2MGY3
OWU2NC4uNmU1ZDEwZDQzMzdjN2EzZGE2MTIzYjM1MGU2OGUyNzlmMTBiNWI2YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtMjk4LDYgKzI5
OCwxMyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKICAgICBjYXNlIEdldEVudW1lcmF0
b3JHZW5lcmljUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2UgRW51bWVy
YXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRC
eVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgogICAgIGNhc2UgQm90dG9tVmFsdWU6CiAgICAgY2FzZSBQaGFudG9tTmV3
T2JqZWN0OgogICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDZmZTI5ZDk5ZmE0NDE0OWMxNDZi
MjFhYjQxMDRjNDA4MDM2OWYzNzEuLjlmYzJjNmZmNzRlMDA0NTI5NWI0MzA5NmY5MzVmMDY0N2Ex
ZWRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAKQEAgLTEwMiw2ICsxMDIsOCBAQAogI2luY2x1ZGUgPHd0Zi9SZWN1cnNhYmxlTGFtYmRhLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3JkZXJlZFNldC5oPgogCisjaW5jbHVkZSAiUHJvYmVDb250
ZXh0LmgiCisKICN1bmRlZiBSRUxFQVNFX0FTU0VSVAogI2RlZmluZSBSRUxFQVNFX0FTU0VSVChh
c3NlcnRpb24pIGRvIHsgXAogICAgIGlmICghKGFzc2VydGlvbikpIHsgXApAQCAtMTU1OCw2ICsx
NTYwLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzoKICAgICAgICAg
ICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgICAgICBj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgICAgICAgICBjb21w
aWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgICAgICAgICBj
b21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9yR2V0QnlWYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFs
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToK
ICAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC01MDIwLDcgKzUwNDMsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyB3ZSBk
b21pbmF0ZSB0aGVtLgogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisg
ICAgTFZhbHVlIGNvbXBpbGVHZXRCeVZhbEltcGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNl
bWFudGljKTsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpA
QCAtNTA0Nyw4ICs1MDcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZl
IHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAg
ICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNv
bnRpZ3VvdXMpCiAgICAgICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2Up
OwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBtX291dC5uZXdCbG9jaygpOwpAQCAt
NTA4MCw4ICs1MTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2Vl
cCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQog
ICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOiB7CkBAIC01MTAwLDggKzUxMjEsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJl
c3VsdCwgcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldERv
dWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCByZXN1bHRJ
c1VuYm94ZWQgPSBtX25vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAm
JiAhKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKQEAgLTUxNDEs
MTggKzUxNjIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0
SXNVbmJveGVkKQotICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkoRG91YmxlLCBm
YXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKERv
dWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgICAgIHJldHVybiBtX291
dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CiAgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogCiAgICAgICAgICAgICBz
cGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihp
bmRleCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZp
bmVkKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVj
dEFyZ3VtZW50czogewpAQCAtNTE2OSw4ICs1MTg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJv
dW5kcyk7CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNl
SW5kZXgoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3Jh
Z2UsIGJhc2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2so
KTsKQEAgLTUxOTIsOCArNTIxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7
CkBAIC01MjQ2LDggKzUyNjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVy
Zmxvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5
OjpCaWdJbnQ2NEFycmF5OgpAQCAtNTI1NiwyNCArNTI3MiwyMSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobV9ub2RlKSkgewogICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkudXNlS2luZCgp
ID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkudXNl
S2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN5bWJv
bCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCAxKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgcmV0dXJu
IHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCB3
ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBs
b3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtNTM3Myw4ICs1Mzg2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAg
ICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6CkBAIC01MzkwLDggKzU0MDIsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9v
dXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVw
IGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAg
ICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBp
bkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01NDE3LDEzICs1NDI4LDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
ICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVu
dCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFz
ZSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwg
c2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbXBp
bGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
biBjb21waWxlU3RyaW5nQ2hhckF0SW1wbCgpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpAQCAtNTQ0OCw5ICs1NDU3LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvYWRGcm9tSW50VHlwZWRB
cnJheShwb2ludGVyLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBr
ZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAg
ICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAg
ICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUp
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwpAQCAtNTQ2OSw4ICs1NDc2LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFz
ZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJl
c3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNTQ4MCw4ICs1NDg2LDI0IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAg
IHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAg
ICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBjb25zdGV4cHIg
Ym9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOworICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxv
YWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAg
ICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15QXJn
dW1lbnRCeVZhbCgpCkBAIC04NTcxLDcgKzg1OTMsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgZW1wdHlSZXN1bHQsIHNsb3dSZXN1
bHQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICBM
VmFsdWUgY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKQogICAgIHsKICAgICAgICAgTFZhbHVlIGJh
c2UgPSBsb3dTdHJpbmcobV9ncmFwaC5jaGlsZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVl
IGluZGV4ID0gbG93SW50MzIobV9ncmFwaC5jaGlsZChtX25vZGUsIDEpKTsKQEAgLTg2NzksNyAr
ODcwMSwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2Ug
dGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShi
YXNlKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIHJlc3VsdHMpKTsKKyAg
ICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgcmVzdWx0cyk7CisgICAgfQorCisgICAgdm9p
ZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoY29tcGls
ZVN0cmluZ0NoYXJBdEltcGwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN0cmlu
Z0NoYXJDb2RlQXQoKQpAQCAtMTI5MDYsMTcgKzEyOTMzLDE2IEBAIHByaXZhdGU6CiAgICAgICAg
IGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgp
ID09IEZlbmNlZFN0b3JlQmFycmllcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUhh
c0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCisg
ICAgTFZhbHVlIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKExWYWx1ZSBpbmRleCwgU19K
SVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2lu
LnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAwKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbV9u
b2RlLT5hcnJheU1vZGUoKTsKIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5
OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2Uo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9y
YWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhl
YXAgPSBtb2RlLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwogICAgICAgICAgICAgICAgIG1faGVh
cHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9w
ZXJ0aWVzOwpAQCAtMTI5NTEsMTEgKzEyOTc3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGko
SW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBz
bG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAg
ICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1f
aGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXM7CiAgICAgICAgICAgICAKQEAgLTEyOTg5LDEy
ICsxMzAxNCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBj
aGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3Vs
dCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsK
IAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsK
QEAgLTEzMDI2LDE3ICsxMzA1MCwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBj
aGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0
KTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIHNldEJvb2xl
YW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSkpOwotICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1Bh
dGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSk7CiAg
ICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAorICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCisgICAgeworICAg
ICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MSkpOworICAgICAgICBzZXRCb29sZWFuKGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKGlu
ZGV4LCBzbG93UGF0aE9wZXJhdGlvbikpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUhhc0Vu
dW1lcmFibGVQcm9wZXJ0eSgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwpAQCAt
MTMyMTcsNiArMTMyNDUsMjQ3IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgaW5k
ZXgpKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZSgpCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAg
ICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAy
KSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMykpOworCisgICAgICAgIGlmIChtX25vZGUtPmVudW1lcmF0b3JNZXRhZGF0
YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdFplcm8z
MihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGluY3JlbWVudCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
aGVja0hhc1Byb3BlcnR5ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSA9IG1fb3V0LmFuY2hv
cihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSks
IHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGluY3JlbWVudCkpOworCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAgICAgICAgTFZhbHVlIGluZGV4
UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgpOworICAgICAgICAgICAgTFZhbHVl
IGluY3JlbWVudGVkSW5kZXggPSBtX291dC5hZGQoaW5kZXhQaGksIG1fb3V0LmludDMyT25lKTsK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3JlbWVudGVkSW5kZXhSZXN1bHQgPSBtX291
dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBm
aW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7Cisg
ICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubGVzc1RoYW4oaW5jcmVtZW50ZWRJbmRleCwg
bV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
X2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGNvbnRpbnVh
dGlvbikpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0hhc1Byb3BlcnR5KTsK
KyAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0
aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSwgaW5jcmVtZW50ZWRJbmRleFJlc3VsdCk7CisgICAgICAg
ICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4UGhpLCBtX291dC5hbmNob3IocHJvcGVy
dHlJbmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmluYWxQcm9wZXJ0eUluZGV4
ID0gbV9vdXQuYW5jaG9yKHByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgTFZhbHVlIGhhc1By
b3BlcnR5ID0gY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwocHJvcGVydHlJbmRleCwgb3Bl
cmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goaGFzUHJvcGVydHksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50
KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICBMVmFsdWUgZmluYWxJbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgZmluYWxJbmNyZW1lbnRl
ZEluZGV4LCBmaW5hbFByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5iaXRPcihtX291dC56ZXJvRXh0KGZpbmFsSW5kZXgsIEludDY0KSwgbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgPDwgMzIpKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBFZGdlJiBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2lu
ZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChiYXNl
RWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2Rl
LCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9tb2RlU2V0KSwgbV9v
dXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihp
bmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNy
ZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJP
bmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ID0gbV9v
dXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1
ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25F
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKKyAgICB9CisKKyAgICB2b2lkIGNv
bXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCgpCisgICAgeworICAgICAgICBMVmFsdWUg
Ym94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBzZXRJ
bnQzMihtX291dC5jYXN0VG9JbnQzMihib3hlZFBhaXIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNv
bXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBi
b3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExWYWx1
ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LmxTaHIoYm94ZWRQYWlyLCBtX291
dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQoaGlnaEJp
dHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlv
bk1vZGVNYXNrKSkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkg
aGF2ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNvdmVyeSBmb3IgdGhpcyBub2RlIHNpbmNlIGl0J3Mg
ImVmZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxpdmUgaW4gYnl0ZWNvZGUuCisgICAgdm9pZCBjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKQorICAgIHsKKyAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3Jp
Z2luLnNlbWFudGljKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygp
KTsKKworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4
LCBtb2RlLCBlbnVtZXJhdG9yKSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRv
ckdldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAgIEVkZ2UgcHJvcGVydHlOYW1lRWRnZSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKTsKKyAgICAgICAgRWRnZSBzdG9yYWdlRWRnZSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKKyAgICAgICAgRWRnZSBpbmRleEVkZ2UgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMyk7CisKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBE
Rkc6OmlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpID8gbG93Q2VsbChiYXNlRWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKSA6IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworCisgICAgICAgIExW
YWx1ZSBzdG9yYWdlID0gc3RvcmFnZUVkZ2UgPyBsb3dTdG9yYWdlKHN0b3JhZ2VFZGdlKSA6IG51
bGxwdHI7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gbWF0ZXJpYWxpemUgdGhlIHByb3BlcnR5TmFt
ZSBoZXJlIGluIGNhc2UgaXQgcmVxdWlyZXMgYm94aW5nIHNpbmNlIHRoZSBJQyBwYXRoIHdvbid0
IGRvbWluYXRlIHN1YnNlcXVlbnQgdXNlcyBpbiBzdWJzZXF1ZW50IG5vZGVzLgorICAgICAgICAv
LyBJZiBpdCdzIGFuIEludDMyIGFuZCB3ZSB1c2UgaXQgYXMgc3VjaCB0aGlzIGJveGluZyB3aWxs
IGJlIERDRSdkIGJ5IGIzIGxhdGVyIGFueXdheS4KKyAgICAgICAgbG93SlNWYWx1ZShwcm9wZXJ0
eU5hbWVFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisKKyAgICAgICAgTFZhbHVl
IGluZGV4ID0gbG93SW50MzIoaW5kZXhFZGdlKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJ
bnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNCkpOworICAgICAgICBMVmFsdWUgZW51
bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDUpKTsKKworICAg
ICAgICBMQmFzaWNCbG9jayBjaGVja1N0cnVjdHVyZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJbmxpbmVPck91dE9mTGluZUJsb2NrID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lTG9hZEJsb2NrID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZMaW5lTG9hZEJsb2NrID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZ2VuZXJpY0lDQmxvY2sgPSBtX291
dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworCisgICAgICAgIExWYWx1ZSBpc05vdE5hbWVkID0gbV9vdXQudGVzdE5vblpl
cm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisgICAg
ICAgIG1fb3V0LmJyYW5jaChpc05vdE5hbWVkLCB1bnN1cmUoZ2VuZXJpY0lDQmxvY2spLCB1bnN1
cmUoY2hlY2tTdHJ1Y3R1cmVCbG9jaykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNr
U3RydWN0dXJlQmxvY2spOworICAgICAgICAvLyBUT0RPIGNoZWNrIGNlbGw/CisgICAgICAgIExW
YWx1ZSBzdHJ1Y3R1cmVJRDsKKyAgICAgICAgYXV0byBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5v
ZGUoYmFzZUVkZ2Uubm9kZSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CisgICAgICAg
IGlmIChzdHJ1Y3R1cmUpCisgICAgICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmNvbnN0SW50
MzIoc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RydWN0dXJl
SUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworCisg
ICAgICAgIExWYWx1ZSBoYXNFbnVtZXJhdG9yU3RydWN0dXJlID0gbV9vdXQuZXF1YWwoc3RydWN0
dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJh
ZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0OworICAgICAgICBpZiAoaW5kZXhFZGdlLm5vZGUoKSA9
PSBwcm9wZXJ0eU5hbWVFZGdlLm5vZGUoKSkgeworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGlj
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0
dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmlj
SUNCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhiYWRTdHJ1Y3R1cmVTbG93
UGF0aCk7CisgICAgICAgICAgICBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5
VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCwgZW51bWVyYXRvcikp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9y
U3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShn
ZW5lcmljSUNCbG9jaykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5saW5lT3JP
dXRPZkxpbmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBpbmxpbmVDYXBhY2l0eSA9IG51bGxwdHI7
CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgICAg
IGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9
ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgICAgICBpbmxpbmVDYXBh
Y2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5KQorICAgICAgICAgICAgaW5saW5l
Q2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOworICAgICAgICBMVmFsdWUgaXNJbmxp
bmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291dC5pbnQzMk9uZSA6IG1fb3V0LmJl
bG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0lubGlu
ZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayksIHVuc3VyZShvdXRPZkxpbmVMb2FkQmxvY2spKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkQmxvY2spOworICAgICAgICBWYWx1
ZUZyb21CbG9jayBpbmxpbmVSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291
dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigp
LAorICAgICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgU2Nh
bGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZM
aW5lTG9hZEJsb2NrKTsKKyAgICAgICAgaWYgKCFzdG9yYWdlKQorICAgICAgICAgICAgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworCisg
ICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBtX291dC5zaWduRXh0MzJUbzY0KAorICAgICAgICAg
ICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgaW5saW5lQ2FwYWNpdHkpKSk7CisgICAgICAg
IGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5w
cm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZ2VuZXJpY0lDQmxvY2spOworICAgICAgICBM
VmFsdWUgZ2VuZXJpY1Jlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsK
KyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUo
dHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1
bHQgPSBib3hJbnQzMihnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBnZW5lcmljUmVzdWx0ID0gc3RyaWN0SW50NTJUb0pTVmFsdWUoZ2VuZXJpY1Jlc3Vs
dCk7CisgICAgICAgIH0gZWxzZSBpZiAoZ2VuZXJpY1Jlc3VsdC0+dHlwZSgpID09IERvdWJsZSkK
KyAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBib3hEb3VibGUoZ2VuZXJpY1Jlc3VsdCk7CisK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdl
bmVyaWNSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IG1fb3V0LnBoaShJbnQ2NCwgZ2VuZXJpY0lDUmVzdWx0LCBvdXRPZkxpbmVSZXN1bHQsIGlubGlu
ZVJlc3VsdCk7CisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdCkKKyAgICAg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocmVzdWx0LCBiYWRTdHJ1Y3R1cmVTbG93UGF0
aFJlc3VsdCk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lkIGNvbXBpbGVFbnVt
ZXJhdG9ySGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xvd1BhdGhGdW5jdGlvbikK
KyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIEVkZ2UgYmFzZUVkZ2Ug
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAgIExWYWx1ZSBiYXNlID0g
YmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UgPyBsb3dDZWxsKGJhc2VFZGdlKSA6IGxvd0pT
VmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBMVmFsdWUgcHJvcGVydHlOYW1lID0gbG93SlNWYWx1
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBMVmFsdWUgaW5kZXgg
PSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICBMVmFs
dWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CisgICAg
ICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgNCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTmFtZWRCbG9jayA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbEJsb2NrID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbWF0Y2hlc1N0cnVjdHVyZUJsb2NrID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0aW9uQmxvY2sgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9j
aygpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC50ZXN0Tm9uWmVybzMyKG1vZGUsIG1f
b3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSwgdW5z
dXJlKGlzTmFtZWRCbG9jayksIHVuc3VyZShvcGVyYXRpb25CbG9jaykpOworICAgICAgICBtX291
dC5hcHBlbmRUbyhpc05hbWVkQmxvY2spOworCisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwo
YmFzZSwgcHJvdmVuVHlwZShiYXNlRWRnZSkpLCB1bnN1cmUoaXNDZWxsQmxvY2spLCB1bnN1cmUo
b3BlcmF0aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpc0NlbGxCbG9jayk7
CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBz
LkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChz
dHJ1Y3R1cmVJRCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSksCisgICAgICAgICAgICB1c3VhbGx5KG1h
dGNoZXNTdHJ1Y3R1cmVCbG9jayksIHJhcmVseShvcGVyYXRpb25CbG9jaykpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG1hdGNoZXNTdHJ1Y3R1cmVCbG9jayk7CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIG5hbWVkUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG9wZXJhdGlvbkJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3BlcmF0aW9uUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbih2bUNhbGwoSW50NjQsIHNsb3dQYXRoRnVuY3Rp
b24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5TmFtZSwgaW5kZXgs
IG1vZGUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBo
aShJbnQzMiwgbmFtZWRSZXN1bHQsIG9wZXJhdGlvblJlc3VsdCkpOworICAgIH0KKworICAgIHZv
aWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCkKKyAgICB7CisgICAgICAgIGNvbXBpbGVFbnVt
ZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwpOworICAgIH0KKwor
ICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSgpCisgICAgeworICAgICAg
ICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk7CisgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1t
ZWRpYXRlKCkKICAgICB7CkBAIC0xNzM0NCw3ICsxNzYxMyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIGlmIChtX25vZGUtPnNob3VsZFNwZWN1bGF0ZUludDMyKCkgJiYg
Y2FuU3BlY3VsYXRlKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAgICAgICAg
T3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmVzdWx0LCBtX291
dC5pbnQzMlplcm8pKTsKQEAgLTIwMjk2LDYgKzIwNTY1LDI3IEBAIHByaXZhdGU6CiAgICAgICAg
IG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgfQogCisgICAgLy8gVGhpcyBvbmx5IHdvcmtzIGZv
ciBpbnRzIHJpZ2h0IG5vdy4KKyAgICBQYXRjaHBvaW50VmFsdWUqIGRhdGFMb2dGb3JEZWJ1Z2dp
bmcoY29uc3QgY2hhciogcHJlZml4LCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBQYXRj
aHBvaW50VmFsdWUqIHJlc3VsdCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAgICAgIHJl
c3VsdC0+ZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LT5h
cHBlbmQodmFsdWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgVHlw
ZSB2YWx1ZVR5cGUgPSB2YWx1ZS0+dHlwZSgpOworICAgICAgICByZXN1bHQtPnNldEdlbmVyYXRv
cihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25QYXJhbXMm
KSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3Jh
dGNoKGppdCk7CisKKyAgICAgICAgICAgIGppdC5wcm9iZURlYnVnKFs9XSAoUHJvYmU6OkNvbnRl
eHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVUeXBlID09IEludDMyKQor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4ocHJlZml4LCBjb250ZXh0LmdwcjxpbnQzMl90
PihHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8SlNWYWx1ZT4oR1BSSW5mbzo6cmVn
VDApKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKwogICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFwKCkgeyBy
ZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CiAgICAgCiAg
ICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9n
ZW5lcmF0b3IvRFNMLnJiCmluZGV4IDczMTcxMDA5NmNmM2UyNDk4YWU0NWRkYTI2YWE4MmU3OWNk
NDZhNGUuLjY5N2RlOGQ5OGYxOWRlMzllNDFjNDI0YWI1ODQwOWY0ZjUxOWIwNjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCkBAIC0xMzgsNiArMTM4LDcgQEAgbW9kdWxl
IERTTAogI2luY2x1ZGUgIkdldEJ5VmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9u
LmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJp
dmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKaW5kZXggNDQ0NjM1ZTk4MGQ5
MGFmODM3ZWJkNjNiOTYyZmFlZGUyZWM1MzUwMy4uZDg3OWM5MGJlMzExNzg2MjMzZjUyNmIxODNl
ZGYxY2IzYzdiYjM4YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL1JlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVyLmgKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFMV0FZ
U19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDYWxsRnJhbWUqKTsKICAgICAgICAgQUxXQVlT
X0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KENvZGVCbG9jayopOwogICAgICAgICBBTFdBWVNf
SU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNTY29wZSopOwotICAgICAgICBBTFdBWVNfSU5M
SU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNPYmplY3QqKTsKKyAgICAgICAgQUxXQVlTX0lOTElO
RSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTQ2VsbCopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJl
Z2lzdGVyJiBvcGVyYXRvcj0oRW5jb2RlZEpTVmFsdWUpOwogCiAgICAgICAgIGludDMyX3QgaSgp
IGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVySW5saW5lcy5oCmluZGV4IGM1NmVmNWU0NTU0Y2IxMDNhYmViZTcyZTYyOThmOGM0OGFhZDk4
NjAuLjU5M2VmNjY2OGRlMmUwM2E2NTliMzlmMzFhZjYwZjg4YzI3ODM5ODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKQEAg
LTYzLDcgKzYzLDcgQEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9y
PShDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLUFMV0FZU19J
TkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNPYmplY3QqIG9iamVjdCkKK0FM
V0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNDZWxsKiBvYmplY3Qp
CiB7CiAgICAgdS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKG9iamVjdCkpOwogICAg
IHJldHVybiAqdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVy
cy5oCmluZGV4IGFjOGI1MTM3ZDg1MzU0NTA2YWVlZGNlZGJkMWM1YmQ3NzI1NzljMDEuLjQxNTll
N2U1MDQ5NjkzN2VlMWU1NmFmYjdjMjBhZTljZjJhODllZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtODg5LDcgKzg4OSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGJyYW5jaDgoCiAgICAgICAgICAgICBCZWxvdywgQWRkcmVzcyhjZWxs
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5
cGUpKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb3RlIHRoYXQgZmlyc3QgYW5kIGxhc3QgYXJl
IGluY2x1c2l2ZS4KICAgICBKdW1wIGJyYW5jaElmVHlwZShHUFJSZWcgY2VsbEdQUiwgSlNUeXBl
UmFuZ2UgcmFuZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IDQyYjhj
YWY1ZjVjYjhjNGI1ZjNhZGViM2VkYTQ3YWIyNjkwZDQ5MDQuLjNhODQ1YWFiN2MyNjFmMjU1NDZi
NjA3NmM2NTliNjE4Y2E5NGYzZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTMw
OCwxMCArMzA4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQpCiAgICAgICAgIERFRklORV9T
TE9XX09QKG5ld19hcnJheV9idWZmZXIpCiAgICAgICAgIERFRklORV9TTE9XX09QKHNwcmVhZCkK
LSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQotICAgICAgICBE
RUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NM
T1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAgICAgIERFRklORV9TTE9XX09QKHRv
X2luZGV4X3N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1dfT1AoZW51bWVyYXRvcl9uZXh0KQog
ICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKICAgICAgICAg
REVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCiAgICAgICAgIERFRklORV9T
TE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQpAQCAtMzY1LDYgKzM2Myw5IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9i
eV9pZF93aXRoX3RoaXMpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlfaWRfZGlyZWN0KQog
ICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfaW5f
YnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5
KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3ByaXZhdGVfbmFtZSkKICAgICAgICAgREVGSU5F
X09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfY2hlY2tfcHJp
dmF0ZV9icmFuZCkKQEAgLTQ3MywxNCArNDc0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
TWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2Zyb21fYXJndW1lbnRzKQogICAg
ICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX2FyZ3VtZW50cykKIAotICAgICAgICBERUZJTkVfT1Ao
b3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9w
X2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9w
X2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfT1Aob3BfaW5fc3Ry
dWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2RpcmVjdF9wbmFtZSkK
LSAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKQotICAgICAg
ICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQotICAgICAgICAgICAgCiAg
ICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAgICAgICAg
IERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKIApAQCAtNTc4LDYgKzU3MSw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfcHJpdmF0ZV9uYW1l
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc2V0X3ByaXZhdGVfYnJhbmQpCiAgICAg
ICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja19wcml2YXRlX2JyYW5kKQpAQCAtNjA5LDcg
KzYwMyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc3ViKQotICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgpAQCAtNjQyLDExICs2MzUsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChub3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHN0cmljdGVxKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuc3RyaWN0ZXEpCi0gICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGdldF9kaXJlY3RfcG5hbWUpCiAgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKGdldF9wcm90b3R5cGVfb2YpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AoaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERF
RklORV9TTE9XQ0FTRV9TTE9XX09QKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICNpZiAhRU5BQkxF
KEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHJlc29s
dmVfc2NvcGUpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDQ4N2E1YWM1Yjhl
NWQ4YTlkODBiMmM2ZDMwNmUwODE1MjFiODI4MTQuLjRmYzlhMDJiNzI5YTMyOTQ1Yjc1ODRmNzhh
MTYzNWRlNmE4YjJmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNjcwLDIxICs2NzAs
MjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xv
YWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3Vuc2lnbmVkKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91cnNoaWZ0KGNvbnN0IElu
c3RydWN0aW9uKik7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgotICAg
ICAgICB2b2lkIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19lbnVt
ZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25z
dCBJbnN0cnVjdGlvbiopOwogCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
CisgICAgICAgIHZvaWQgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUm
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisKKyAgICAgICAgdm9pZCBlbWl0
X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKworICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICAg
ICAgdm9pZCBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlv
biosIGNvbnN0IE9wY29kZVR5cGUmLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSk7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOworICAg
ICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1p
dFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC03MzUsNyAr
NzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
KTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25z
dCBJbnN0cnVjdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAK
aW5kZXggZjZkYjNmNTljNGFhNGUwMjdhMTU2MTFlZGJiYTI2MWNhZDhlZmVkNi4uOWJhMTBlZDY3
NzJmYWVjM2YyMGU2MzRiYWJlMTRhZGQ5YTEwODkwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCkBAIC0xNjkyLDQ2ICsxNjkyLDEyIEBAIHZvaWQgSklUOjplbWl0
X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVU
eXBlPgotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcENvZGVUeXBlPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVj
b2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcjsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVn
VDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3Bl
cnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0
aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1cnJl
bnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5PihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgCisKICAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7Ci0gICAgCisKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVz
IGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KICAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFkVHlw
ZSwgbnVsbHB0cik7CkBAIC0xNzM5LDcgKzE3MDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQ
dAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0g
ICAgCisKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhU
YXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQ
YXRoVGFyZ2V0KTsKIApAQCAtMTc0OCw3ICsxNzE0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHQKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigK
ICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywK
ICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJl
c3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAKKwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMo
SklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7CiAgICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVt
cFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbElu
Zm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAgICAgICAgYnlWYWxJbmZvLT5tX3Ns
b3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljOwpAQCAtMTc1
OCwxNzEgKzE3MjQsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIH0KIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0g
Ynl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9j
ay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7Ci0KLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RJbnQocmVnVDEpOwotCi0gICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBp
bmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRo
IHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0
IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3
YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0
aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24K
LSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVu
ZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQotICAg
IC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVz
cyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgotICAgIC8vIGV4
dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0
aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwgcmVnVDEpOwotCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICBhbmQz
MihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7Ci0KLSAgICBKSVRBcnJh
eU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxp
a2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0
TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUsIGJ5VmFs
SW5mbyk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCByZWdUMCk7Ci0KLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRU
eXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFk
ZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0g
ICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgTGFiZWwgbmV4dEhv
dFBhdGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFi
bGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLSAg
ICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAg
aWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAg
YnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlE
ZWZhdWx0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5RGVmYXVsdCk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgQnlW
YWxJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIEdQUkluZm86Om5vbkFyZ0dQ
UjApOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOwotCi0gICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQg
PSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eCsrOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRl
Y29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRl
eDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
cjsKLQotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
cmVnVDAsIGJhc2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21w
dXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7
Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlu
bGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAK
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2Yg
bGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMy
KEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7
Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwg
cmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAs
IEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3Bl
cnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBp
bkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJl
Z1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChC
YXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KIHZv
aWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHJvZmlsZVR5cGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMzMl82NC5jcHAKaW5kZXggNGQ3NDEyNmJlMWUzZGU0MzBkM2E2ZDljYjdmZGRiNmRjODZmN2Vi
NC4uMmFlM2EwNGEzYzVmZDJmNjk0MDJjMjVhM2VlM2Y3NDQ4MjRjOTc3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTE0MiwyMjcgKzEx
NDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7
CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgotdm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cENvZGVUeXBlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIGVtaXRM
b2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxs
KGJhc2UpOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLQotICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBlbWl0U3Rv
cmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJs
ZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eUltcGw8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5SW1wbDxPcEluU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19
Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8q
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUg
YXJyYXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24g
PSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
KS5wdHIoKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgCi0gICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBB
cmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUsIG51bGxwdHIpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtCdWZmZXI6OlBy
b2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLQotICAgIHBhdGNoQnVmZmVyLmxpbmso
ZG9uZSwgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLQotICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hC
dWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgaGFzX2luZGV4
ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9j
b2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFkVHlwZUp1bXAs
IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJS
b3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxs
KENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7
Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1l
dGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2Rl
QmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIGVtaXRMb2Fk
UGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2UpOwotCi0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotCi0gICAgLy8gVGhpcyBpcyB0ZWNobmlj
YWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhv
dCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFz
IGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdp
bGwgYWx3YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rv
ckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9j
YXRpb24KLSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJv
IGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1
ZQotICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUg
YWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgotICAg
IC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1
ZSBpbiB0aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwgcmVnVDEp
OwotCi0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJv
ZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIp
OwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0g
ICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qg
c2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2Rl
LCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7
Ci0KLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRTdG9yZUJv
b2woZHN0LCByZWdUMCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7Ci0gICAg
Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
YnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9k
ZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVy
dHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwot
Ci0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlE
ZWZhdWx0LCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgYnlWYWxJbmZvKTsKLQotICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRo
VGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0
aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMik7Ci0gICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgbG9h
ZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVn
VDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAg
Ly8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0
aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbmVn
MzIocmVnVDIpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAs
IHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRv
cjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAg
ZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1l
cmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1Qw
LCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0KLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJv
cGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4
KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2Rl
Lm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0K
LSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQo
ZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywg
cmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwot
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0KLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQmFzZUlu
ZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlw
ZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKaW5kZXggMTVlMWQzNDU3OWI2ZDRjOGMxNzBkMjM1MGM2YzM2NDQzZmZlYTQxNS4uZDU5NDU2
MjI1ODg5MTVlNzg4Njk5NGQyNmIwOGM5NjcyM2Y3NGFjYyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
ICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0
LmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1Yklu
Zm8uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKQEAgLTg2LDEwICs4NywxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+Cit2b2lkIEpJVDo6
Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGlmIChoYXNBbnlTbG93
Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlOwpAQCAtMTM2LDYgKzEzNywxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
UwogICAgIH0KIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5VmFsPigpLCBpdGVyKTsKK30KKwogI2lmIEVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNs
b3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0zNTQw
LDYgKzM1NDYsMTM2IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5UHV0
QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5CiAgICAgcmV0dXJuIHNsb3dD
YXNlczsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBtb2Rl
ID0gYnl0ZWNvZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1l
OworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9y
OworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsK
KworICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKKworICAgIGF1dG8gcmVzdWx0R1BSID0gcmVnVDA7
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHByb3BlcnR5TmFtZSwgcmVnVDEpOworCisgICAgb3I4KHJlZ1QyLCBBYnNvbHV0ZUFkZHJlc3Mo
Jm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisgICAgLy8gVGhpcyBpcyBhbHdheXMg
YW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KKyAgICBKdW1wIGlzTm90TmFtZWRNb2RlID0gYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUp
KTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworCisgICAgLy8g
Q2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQuCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworICAgIC8vIElm
IGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFn
ZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9
IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAgIGFkZFB0
cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDAp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOworCisgICAgZG9uZUNh
c2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUK
KyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzdWIzMihBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgbmVnMzIocmVnVDEpOworICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QxLCByZWdUMSk7CisgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBz
dGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNl
dCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0R1BSKTsK
KyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBzdHJ1Y3R1cmVNaXNtYXRjaC5s
aW5rKHRoaXMpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVt
ZXJhdG9yTWV0YWRhdGEpOworCisgICAgaXNOb3ROYW1lZE1vZGUubGluayh0aGlzKTsKKyAgICBK
dW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKyAgICAvLyBSZXBsYWNl
IHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihp
bmRleCwgcmVnVDEpOworCisgICAgaXNOb3RJbmRleGVkLmxpbmsodGhpcyk7CisgICAgZW1pdEFy
cmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIEpJVEdldEJ5
VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5l
SklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29k
ZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1QyKTsKKyAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CisgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKQorICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAg
IGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2Vu
KTsKKworICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0
ZXIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1Bh
dGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdlbmVyYWxDYXNlKQoreworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFz
ZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2Rl
Lm1fbW9kZTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIobW9kZSwgcmVnVDApOworICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwg
cmVnVDApOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSwgcmVnVDApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93Q2FzZXMubGluayh0aGlzKTsKKworICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBnZW5l
cmFsQ2FzZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKworICAgIGRvbmUubGluayh0aGlz
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0X2VudW1lcmF0b3JfaGFz
X3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BFbnVtZXJhdG9ySW5CeVZhbD4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdF9lbnVtZXJhdG9y
X2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpLCBzbG93X3BhdGhfZW51bWVyYXRvcl9o
YXNfb3duX3Byb3BlcnR5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNThlNWQ1MmZlNWIwOGFlMjllM2U1ZGRkZTNkNzQ2Nzk2
N2YyMzAxOS4uMjU3Y2FlYTI3ODY4ODNiYmEwOGM3YTJjNGIyMzhkNTA0NGU3Mjk3NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCkBAIC0xNTA1LDYgKzE1MDUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIHRlbXBsYXRl
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKIAorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKKyAgICBz
bG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hh
c19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhD
YWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNW
QUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNhMDAxYTU2NTVlYTFiYjFkYjU5NTcz
Y2Y2MDguLmU3MTgzYTcyYTM2OGYxYTI4MDQ2ODRkMmIwNzY0N2YyMjA2OGYxMjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20K
QEAgLTE5OTIsMTkgKzE5OTIsMTQgQEAgc2xvd1BhdGhPcChjcmVhdGVfZ2VuZXJhdG9yKQogc2xv
d1BhdGhPcChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQogc2xvd1BhdGhPcChkZWZpbmVfYWNjZXNz
b3JfcHJvcGVydHkpCiBzbG93UGF0aE9wKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotc2xvd1BhdGhP
cChlbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCi1zbG93UGF0aE9wKGVudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lKQogc2xvd1BhdGhPcChnZXRfYnlfdmFsX3dpdGhfdGhpcykKLXNsb3dQYXRoT3Ao
Z2V0X2RpcmVjdF9wbmFtZSkKLXNsb3dQYXRoT3AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQogc2xv
d1BhdGhPcChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLXNsb3dQYXRoT3AoaGFzX2VudW1lcmFi
bGVfaW5kZXhlZF9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkp
CitzbG93UGF0aE9wKGVudW1lcmF0b3JfbmV4dCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9nZXRf
YnlfdmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2luX2J5X3ZhbCkKK3Nsb3dQYXRoT3AoZW51
bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogCiBpZiBub3QgSlNWQUxVRTY0Ci0gICAgc2xvd1Bh
dGhPcChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xvd1BhdGhPcCho
YXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICBzbG93UGF0aE9wKGluX3N0cnVjdHVyZV9w
cm9wZXJ0eSkKICAgICBzbG93UGF0aE9wKGdldF9wcm90b3R5cGVfb2YpCiBlbmQKIApAQCAtMjAy
MSw3ICsyMDE2LDYgQEAgc2xvd1BhdGhPcChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5j
X2RlY2xfaW5fZXZhbCkKIHNsb3dQYXRoT3Aoc3ByZWFkKQogc2xvd1BhdGhPcChzdHJjYXQpCiBz
bG93UGF0aE9wKHRocm93X3N0YXRpY19lcnJvcikKLXNsb3dQYXRoT3AodG9faW5kZXhfc3RyaW5n
KQogc2xvd1BhdGhPcCh0eXBlb2YpCiBzbG93UGF0aE9wKHR5cGVvZl9pc19vYmplY3QpCiBzbG93
UGF0aE9wKHR5cGVvZl9pc19mdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggYmQ4ODU1ZWJmZDZmYzE5
YjE1YzFiNTg4NmQ0ZmE1NTY0MzgyZDg3ZC4uOGE1ZjdkMjNlNjQ3NjNiYTI1OWUxYjJjNWQ4N2Y4
ZDE2YjgyOWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTMxNDEsMzQgKzMxNDEsNiBAQCBsbGludE9wKG9w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsLCBPcExvZ1NoYWRvd0NoaWNrZW5UYWlsLCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaQogICAgIGRpc3BhdGNoKCkKIGVuZCkKIAotbWFjcm8gaGFzU3RydWN0dXJl
UHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybiwgc2xvd1BhdGhDYWxsKQot
ICAgIGdldChtX2Jhc2UsIHQwKQotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAs
IHQxKQotICAgIGJ0cW56IHQxLCBub3RDZWxsTWFzaywgLnNsb3dQYXRoCi0KLSAgICBsb2FkVmFy
aWFibGUoZ2V0LCBtX2VudW1lcmF0b3IsIHQwKQotICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1
cmVJRFt0MV0sIHQxCi0gICAgYmluZXEgdDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bV9j
YWNoZWRTdHJ1Y3R1cmVJRFt0MF0sIC5zbG93UGF0aAotCi0gICAgcmV0dXJuKFZhbHVlVHJ1ZSkK
LQotLnNsb3dQYXRoOgotICAgIGNhbGxTbG93UGF0aChzbG93UGF0aENhbGwpCi0gICAgZGlzcGF0
Y2goKQotZW5kCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVy
ZV9wcm9wZXJ0eSwgT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXpl
LCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNp
emUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9wV2l0aFJldHVybihvcF9oYXNfb3duX3N0
cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgbWFjcm8gKHNpemUs
IGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0aF9oYXNfb3duX3N0cnVjdHVyZV9w
cm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4ob3BfaW5fc3RydWN0dXJlX3Byb3Bl
cnR5LCBPcEluU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCBy
ZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gs
ICByZXR1cm4sIF9zbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCiBvcChm
dXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50LCBtYWNybyAoKQogICAgIGxvYWRwIENv
ZGVCbG9ja1tjZnJdLCB0MAogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDBd
LCB0MApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAKaW5kZXggMTEyOTU0YmI5YjZlNTAxMzY4ODNiNzQ1NmNiMWU4MzE4ZmI1YTUxMS4uYjE1
ZDM1NDgwMTliNzJlZDFkNjgzNzc1M2YzMDI2MDI2MGVhM2RhMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05NjIsMTYxICs5
NjIsMTM3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJvcGVy
dHlfa2V5KQogICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5tX3NyYykuanNWYWx1ZSgpLnRvUHJv
cGVydHlLZXlWYWx1ZShnbG9iYWxPYmplY3QpKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCitKU0NfREVGSU5FX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQogewogICAgIEJF
R0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+
KCk7Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdG9yVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2Up
LmpzVmFsdWUoKTsKLSAgICBpZiAoZW51bWVyYXRvclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdF
VF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVy
YXRvcigpKTsKIAotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpz
Q2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihlbnVtZXJhdG9yVmFsdWUuYXNDZWxsKCkp
OworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7
CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNOdW1iZXIoZW51bWVyYXRv
ci0+aW5kZXhlZExlbmd0aCgpKSk7CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZUVudW1lcmF0b3Io
Z2xvYmFsT2JqZWN0LCBiYXNlKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KQogewogICAgIEJFR0lOKCk7
Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwog
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBK
U09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0
KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9w
ZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5zdHJ1Y3R1cmUodm0pKTsKLSAg
ICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzJBc0FueUludCgpKTsKLSAgICBSRVRVUk4oanNCb29s
ZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5LmFz
VUludDMyQXNBbnlJbnQoKSkpKTsKLX0KKyAgICBSZWdpc3RlciYgbW9kZVJlZ2lzdGVyID0gR0VU
KGJ5dGVjb2RlLm1fbW9kZSk7CisgICAgUmVnaXN0ZXImIGluZGV4UmVnaXN0ZXIgPSBHRVQoYnl0
ZWNvZGUubV9pbmRleCk7CisgICAgUmVnaXN0ZXImIG5hbWVSZWdpc3RlciA9IEdFVChieXRlY29k
ZS5tX3Byb3BlcnR5TmFtZSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0g
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eT4oKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1
ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAg
SlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0g
ICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0jaWYgVVNFKEpTVkFMVUUz
Ml82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNW
YWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS0+c3RydWN0dXJlKHZtKS0+aWQoKSA9PSBl
bnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAgICAgICBSRVRVUk4oanNCb29sZWFu
KHRydWUpKTsKLSNlbmRpZgotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0
eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxP
YmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFz
ZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOwot
fQorICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICB1aW50MzJfdCBp
bmRleCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMyKCk7CiAKLUpTQ19ERUZJTkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi17
Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzT3duU3RydWN0
dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNl
KS5qc1ZhbHVlKCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlm
IChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0g
ZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVh
bih0cnVlKSk7Ci0jZW5kaWYKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0
b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51
bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVChieXRlY29k
ZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQoIWJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9y
TnVsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlLT5zdHJ1Y3R1cmVJRCgpKTsKIAotICAgIEpTVmFs
dWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJF
TEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBzdHJpbmcg
PSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRv
SWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIEpTU3RyaW5nKiBuYW1lID0gZW51bWVyYXRv
ci0+Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9kZSk7CiAgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNCb29sZWFuKG9iamVjdFByb3RvdHlwZUhh
c093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpOworICAgIG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUp
OworICAgIG1vZGVSZWdpc3RlciA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUp
KTsKKyAgICBpbmRleFJlZ2lzdGVyID0ganNOdW1iZXIoaW5kZXgpOworICAgIG5hbWVSZWdpc3Rl
ciA9IG5hbWUgPyBuYW1lIDoganNOdWxsKCk7CisgICAgRU5EKCk7CiB9CiAKLUpTQ19ERUZJTkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQorSlNDX0RF
RklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCiB7
CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5TdHJ1Y3R1cmVQ
cm9wZXJ0eT4oKTsKLSAgICBKU1ZhbHVlIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpz
VmFsdWUoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQo
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlmIChiYXNl
LmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVy
YXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVl
KSk7Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsK
LSAgICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9i
amVjdCwgYmFzZSwgYXNTdHJpbmcocHJvcGVydHkpKSkpOwotfQorICAgIGF1dG8gYnl0ZWNvZGUg
PSBwYy0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nh
c3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5q
c1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEg
fD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VU
KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9
IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNJbnQzMigpOworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgICAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGU6IHsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1
cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAgICAgICAgICAgUkVU
VVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oaW5kZXgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok5hbWVkTW9kZTogeworICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwo
KSAmJiBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+Y2Fj
aGVkU3RydWN0dXJlSUQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ2xsIG9ubHkgbWF0Y2gg
dGhlIHN0cnVjdHVyZSBJRCBpZiB0aGUgYmFzZSBpcyBhbiBvYmplY3QuCisgICAgICAgICAgICAg
ICAgQVNTRVJUKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgp
KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldE9iamVjdCgp
LT5nZXREaXJlY3QoaW5kZXggPCBlbnVtZXJhdG9yLT5jYWNoZWRJbmxpbmVDYXBhY2l0eSgpID8g
aW5kZXggOiBpbmRleCAtIGVudW1lcmF0b3ItPmNhY2hlZElubGluZUNhcGFjaXR5KCkgKyBmaXJz
dE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAg
bWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0Y2gp
OworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0KIAotSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKLXsKLSAgICBC
RUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJhYmxlUHJvcGVy
dHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFs
dWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAg
IEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwot
ICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1N0cmluZyogc3RyaW5nID0g
YXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lk
ZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBSRVRV
Uk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHBy
b3BlcnR5TmFtZSkpKTsKLX0KKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlOiB7CisgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIG1v
ZGUgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpCisgICAgICAgICAgICAg
ICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZUlEKGJhc2VWYWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0g
YXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkpOworICAgICAg
ICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmpl
Y3QpOworICAgICAgICAgICAgLy8gVE9ETyBEb2VzIHRoaXMgYWN0dWFsbHkgZXZlciB0aHJvdz8g
SXNuJ3Qgc3RyaW5nIGJhY2tlZCBieSBhIFVVSUQ/CisgICAgICAgICAgICBDSEVDS19FWENFUFRJ
T04oKTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKQotewotICAgIEJFR0lOKCk7Ci0gICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgSlNWYWx1
ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgQVNT
RVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmlu
Zyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmll
cihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihiYXNl
VmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgfTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1K
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2lu
X2J5X3ZhbCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BH
ZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVu
dW1lcmF0b3JJbkJ5VmFsPigpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNv
ZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICBSRVRVUk4odm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICBh
dXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KEdF
VChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsKIAotICAg
IEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAg
Q0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2Vu
dW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFsdWUuZ2V0
T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRT
dHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAKLSAg
ICBSRVRVUk4ocHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2UpKTsKLX0K
LQotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChi
eXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgdWludDMyX3Qg
aW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyQXNBbnlJbnQo
KTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVk
TW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHkoZ2xv
YmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkpKSk7
CisgICAgfQogCi0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IG51bGxwdHI7Ci0gICAgaWYg
KGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKQotICAgICAg
ICBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsK
LSAgICBSRVRVUk4ocHJvcGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkpOworICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUp
LmpzVmFsdWUoKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW5C
eVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3RyaW5nLCAmbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGUpKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51
bWVyYXRvcl9nZW5lcmljX3BuYW1lKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2Vs
bCgpKTsKLSAgICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVl
KCkuYXNVSW50MzJBc0FueUludCgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVt
ZXJhdG9ySGFzT3duUHJvcGVydHk+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhi
eXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCku
YXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4obW9kZSk7CiAKLSAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gbnVs
bHB0cjsKLSAgICBpZiAoZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpIDw9
IGluZGV4ICYmIGluZGV4IDwgZW51bWVyYXRvci0+ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKSkK
LSAgICAgICAgcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChp
bmRleCk7Ci0gICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVsbCgp
KTsKLX0KKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNW
YWx1ZSgpKTsKKyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3QoKSkgewor
ICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSAm
JiBiYXNlLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkp
CisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKIAotSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCi17Ci0gICAgQkVHSU4oKTsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKLSAgICBKU1Zh
bHVlIGluZGV4VmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpOwotICAgIEFT
U0VSVChpbmRleFZhbHVlLmlzVUludDMyQXNBbnlJbnQoKSk7Ci0gICAgUkVUVVJOKGpzU3RyaW5n
KHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleFZhbHVlLmFzVUludDMyQXNBbnlJbnQoKSku
c3RyaW5nKCkpKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzT3du
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFz
VUludDMyKCkpKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdF
VChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhD
RVBUSU9OKCk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9w
ZXJ0eShnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lKSkpOwogfQogCiBKU0Nf
REVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCmlu
ZGV4IGQ4ZDE1MDFmYjM1YmFjMjc5NGM2ZDk0MTAyNzFiYjY4ZjRjYzA1N2UuLmE1ZTAxNWQ1M2E2
OWU2MDUzYWY0ZGJiMzFiMmM4ZjI1N2MwZGIxZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCkBAIC0yNTQsMTcgKzI1NCwxMSBAQCBKU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9pc19jb25zdHJ1Y3Rvcik7CiBKU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9zdHJjYXQpOwogSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKIEpTQ19ERUNMQVJFX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3Byb3BlcnR5X2tleSk7Ci1KU0NfREVDTEFSRV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwotSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9w
cm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51
bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTsK
LUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUp
OwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3IpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CitKU0NfREVDTEFSRV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKK0pTQ19ERUNMQVJFX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKK0pTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVf
Y2xlYXJfbG9nKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3VucmVh
Y2hhYmxlKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2NyZWF0ZV9s
ZXhpY2FsX2Vudmlyb25tZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcAppbmRleCBlMmNhMTYyZTBiNTRlMjVjZjA2
OWVlYThjODdlMWVlYTJlNGNkNWJlLi4xYjAzMTMwZjBhNWMwN2MzMzVjYzU4NTY4M2JiNjQ1ZWU1
M2UwOGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFz
ZWRGdXp6ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmls
ZUJhc2VkRnV6emVyQWdlbnQuY3BwCkBAIC05MCw3ICs5MCw2IEBAIFNwZWN1bGF0ZWRUeXBlIEZp
bGVCYXNlZEZ1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhp
czoKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6
CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1
enplckFnZW50QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFz
ZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCmluZGV4IGYxMzlkNGE0NDdiMjcwZjllZDMzZjdkZmQzNWUw
MmFmZmMzMWM3MDMuLmMyNmMwMDM3NDAzOTBjN2IzODM2MDc2MGUzYzIyOWMxZmQxYjg4ZTIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFn
ZW50QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2Vk
RnV6emVyQWdlbnRCYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIE9wY29kZUlEIEZpbGVCYXNlZEZ1enpl
ckFnZW50QmFzZTo6b3Bjb2RlQWxpYXNGb3JMb29rdXBLZXkoY29uc3QgT3Bjb2RlSUQmIG9wY29k
CiB7CiAgICAgaWYgKG9wY29kZUlkID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJZCA9PSBv
cF9jYWxsX2V2YWwgfHwgb3Bjb2RlSWQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlkID09IG9w
X3RhaWxfY2FsbF92YXJhcmdzKQogICAgICAgICByZXR1cm4gb3BfY2FsbDsKLSAgICBpZiAob3Bj
b2RlSWQgPT0gb3BfZ2V0X2RpcmVjdF9wbmFtZSB8fCBvcGNvZGVJZCA9PSBvcF9nZXRfYnlfdmFs
X3dpdGhfdGhpcykKKyAgICBpZiAob3Bjb2RlSWQgPT0gb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFs
IHx8b3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCiAgICAgICAgIHJldHVybiBv
cF9nZXRfYnlfdmFsOwogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncykK
ICAgICAgICAgcmV0dXJuIG9wX2NvbnN0cnVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyNGZjZjA4MTVlMjUwNDk1ZTAzMTc5
NGEwNmU0YjMxMDVjNzg0ZmI0Li4xNWY1YjA2NGVjYmZjNjU4YTk5MGQyZWI1OTYzNWJmMmJkYmU4
ODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCkBAIC0xNDYxLDYgKzE0NjEsMTAgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3RydWN0b3Iq
IGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8gY2FwaXRhbE5hbWUKICAg
ICAgICAgfSk7CiAjZW5kaWYKIAorICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcild
LmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5pdCkgeworICAgICAg
ICBpbml0LnNldChpbml0LnZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpKTsKKyAgICB9
KTsKKwogICAgIGlmIChPcHRpb25zOjpleHBvc2VQcm9maWxlcnNPbkdsb2JhbE9iamVjdCgpKSB7
CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIl9fZW5hYmxlU2FtcGxp
bmdQcm9maWxlciIpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmluZygpLCBl
bmFibGVTYW1wbGluZ1Byb2ZpbGVyKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtIHwgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAKaW5kZXggMjFjNzBhMjdiNjkxYmUwNTY5MGEyZmFlNzdjNjk5
MTJhZWVjMTE5ZC4uY2YwYTRhNTEzNGY4MmRlZTk5YWFiMjViNjYzNTk4ZTU3ZGNlMmM4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwCkBAIC00OSwxMyArNDksMTkgQEAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0sIFN0cnVjdHVy
ZSogc3QKIAogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5kZXhlZExlbmd0aCwg
dWludDMyX3QgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV3JpdGVCYXJyaWVyPEpTU3RyaW5n
PiogcHJvcGVydHlOYW1lc0J1ZmZlciwgdW5zaWduZWQgcHJvcGVydHlOYW1lc1NpemUpCiAgICAg
OiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuZ2V0KCkpCi0g
ICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5TmFtZXNCdWZmZXIpCiAgICAg
LCBtX2NhY2hlZFN0cnVjdHVyZUlEKHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aWQoKSA6IDApCiAg
ICAgLCBtX2luZGV4ZWRMZW5ndGgoaW5kZXhlZExlbmd0aCkKICAgICAsIG1fZW5kU3RydWN0dXJl
UHJvcGVydHlJbmRleChudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzKQogICAgICwgbV9lbmRHZW5l
cmljUHJvcGVydHlJbmRleChwcm9wZXJ0eU5hbWVzU2l6ZSkKICAgICAsIG1fY2FjaGVkSW5saW5l
Q2FwYWNpdHkoc3RydWN0dXJlID8gc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpIDogMCkKKyAg
ICAsIG1fcHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVydHlOYW1lc0J1ZmZlcikKIHsKKyAg
ICBpZiAobV9pbmRleGVkTGVuZ3RoKQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTsKKyAgICBpZiAobV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4KQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGU7CisgICAgaWYgKG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXggLSBtX2VuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkdlbmVyaWNNb2RlOwogfQogCiB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiYm
IGlkZW50aWZpZXJzKQpAQCAtMTQ4LDQgKzE1NCw3MCBAQCB2b2lkIGdldEVudW1lcmFibGVQcm9w
ZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQ
cgogICAgIH0KIH0KIAorSlNTdHJpbmcqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y29tcHV0
ZU5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIHVpbnQz
Ml90JiBpbmRleCwgTW9kZSYgbW9kZSwgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3Ry
aW5nKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoaW5kZXhlZExlbmd0aCgp
IHx8IHNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisKKyAgICBpbmRleCsrOworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgIGNhc2UgSW5pdE1vZGU6IHsKKyAgICAgICAgbW9kZSA9IEluZGV4ZWRNb2Rl
OworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKworICAg
IGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTogeworICAgICAgICB3
aGlsZSAoaW5kZXggPCBpbmRleGVkTGVuZ3RoKCkgJiYgIWJhc2UtPmhhc0VudW1lcmFibGVQcm9w
ZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KSkgeworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9Cisg
ICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisKKyAgICAgICAgaWYgKGluZGV4IDwg
aW5kZXhlZExlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHNob3VsZEFsbG9jYXRlSW5kZXhl
ZE5hbWVTdHJpbmcgPyBqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLnN0
cmluZygpKSA6IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFzaXplT2ZQcm9wZXJ0eU5hbWVzKCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBtb2RlID0gTmFtZWRNb2Rl
OworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKworICAg
IGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGU6CisgICAgY2FzZSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOiB7CisgICAgICAgIEpTU3RyaW5nKiBu
YW1lID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgICAgICAg
ICBpZiAoIW5hbWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaW5k
ZXggPCBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9
PSBjYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUtPnZhbHVlKGdsb2Jh
bE9iamVjdCkpOworICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAg
ICAgICAgIGlmIChiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxscHRyOworICAgICAgICAg
ICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigp
OworCisgICAgICAgIGlmIChpbmRleCA+PSBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgJiYg
aW5kZXggPCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICBtb2RlID0gR2VuZXJp
Y01vZGU7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgK
aW5kZXggMDIwMTFkNDFjN2Y2NmRhZDg4M2FlOGQ3NzBiNWQzZDI4NmNkNTA4Ny4uYTAwOWJiMjkw
MWI0YWExNzBkNzM4YTU5ODYwYTA5YTE1NmQyMDQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKQEAgLTI4
LDcgKzI4LDcgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIK
KyNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcs
NiArMzcsMTcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdz
IHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAorICAgIGVudW0gTW9kZSA6IHVpbnQ4X3QgeworICAg
ICAgICBJbml0TW9kZSA9IDAsCisgICAgICAgIEluZGV4ZWRNb2RlID0gMSA8PCAwLAorICAgICAg
ICBOYW1lZE1vZGUgPSAxIDw8IDEsCisgICAgICAgIEdlbmVyaWNNb2RlID0gMSA8PCAyLAorICAg
ICAgICAvLyBQcm9maWxpbmcgT25seQorICAgICAgICBIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJl
TWlzbWF0Y2ggPSAxIDw8IDMsCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhf
dCBlbnVtZXJhdGlvbk1vZGVNYXNrID0gKEdlbmVyaWNNb2RlIDw8IDEpIC0gMTsKKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRp
YyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKQEAgLTc0LDE2ICs4NSwy
MCBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OyB9CiAgICAgdWludDMyX3QgY2Fj
aGVkSW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZElubGluZUNhcGFjaXR5
OyB9CiAgICAgdWludDMyX3Qgc2l6ZU9mUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGVu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCk7IH0KKyAgICB1aW50MzJfdCBtb2RlU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9tb2RlU2V0OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRTdHJ1Y3R1
cmVJRE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlSUQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRl
eGVkTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciwgbV9pbmRleGVkTGVuZ3RoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgZW5k
U3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9lbmRHZW5l
cmljUHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZElubGluZUNh
cGFjaXR5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90
IG1vZGVTZXRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLCBtX21vZGVTZXQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0K
IAorICAgIEpTU3RyaW5nKiBjb21wdXRlTmV4dChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBi
YXNlLCB1aW50MzJfdCYgY3VycmVudEluZGV4LCBNb2RlJiwgYm9vbCBzaG91bGRBbGxvY2F0ZUlu
ZGV4ZWROYW1lU3RyaW5nID0gdHJ1ZSk7CisKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwog
CiBwcml2YXRlOgpAQCAtOTIsMTMgKzEwNywxNCBAQCBwcml2YXRlOgogICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90LCB1aW50MzJfdCwgV3JpdGVC
YXJyaWVyPEpTU3RyaW5nPiosIHVuc2lnbmVkKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4mJik7CiAKLSAgICBBdXhpbGlhcnlCYXJy
aWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5TmFtZXM7Ci0gICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWluOwogICAgIFN0cnVjdHVyZUlE
IG1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgdWludDMyX3QgbV9pbmRleGVkTGVuZ3RoOwogICAg
IHVpbnQzMl90IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJfdCBtX2Vu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4OwogICAgIHVpbnQzMl90IG1fY2FjaGVkSW5saW5lQ2FwYWNp
dHk7CisgICAgdWludDMyX3QgbV9tb2RlU2V0IHsgMCB9OworICAgIEF1eGlsaWFyeUJhcnJpZXI8
V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1lczsKKyAgICBXcml0ZUJhcnJp
ZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47CiB9OwogCiB2b2lkIGdldEVudW1l
cmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0dXJlUHJv
cGVydHlDb3VudCk7CkBAIC0xMzQsNyArMTUwLDEwIEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
CiAgICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSAwOwogICAgIH0KIAotICAgIGVu
dW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0dXJl
QWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwgbnVtYmVyU3RydWN0dXJl
UHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CisgICAgaWYgKCFpbmRleGVkTGVu
Z3RoICYmICFwcm9wZXJ0eU5hbWVzLnNpemUoKSkKKyAgICAgICAgZW51bWVyYXRvciA9IHZtLmVt
cHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworICAgIGVsc2UKKyAgICAgICAgZW51bWVyYXRv
ciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmVBZnRlckdl
dHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0
aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKICAgICBpZiAoIWluZGV4ZWRMZW5ndGggJiYg
c3VjY2Vzc2Z1bGx5Tm9ybWFsaXplZENoYWluICYmIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3Bl
cnR5TmFtZXMgPT0gc3RydWN0dXJlKSB7CiAgICAgICAgIGVudW1lcmF0b3ItPnNldENhY2hlZFBy
b3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGdsb2JhbE9iamVjdCwg
YmFzZSkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5jYW5DYWNoZVByb3BlcnR5TmFtZUVudW1l
cmF0b3Iodm0pKQpAQCAtMTQzLDQgKzE2Miw2IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAg
ICAgcmV0dXJuIGVudW1lcmF0b3I7CiB9CiAKK3VzaW5nIEVudW1lcmF0b3JNZXRhZGF0YSA9IHN0
ZDo6dW5kZXJseWluZ190eXBlX3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjsKKwog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcApp
bmRleCBjZGNmYTk5ZDQ5YTY5MTc0MDFkNjgzMTY4YmExOWFiZGViYWU5YTRkLi5jN2E4ZTMxZjdl
NDdiZDY5MTFmZTRhYzQ1ZmRmNzdkNjgzOTY0MTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRpbmdG
dXp6ZXJBZ2VudC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0y
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBTcGVjdWxhdGVkVHlwZSBQcmVkaWN0aW9uRmls
ZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRlcm5hbChDb2RlQmxvYwogICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkOgogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKICAg
ICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9w
bmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoKICAgICBjYXNlIG9wX2Nv
bnN0cnVjdDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ugb3BfY2Fs
bDoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggZGFhY2Y5N2Y5NThjODVkYzlmNTJkNGMyZTJlMjhlMzI3Yjg4ODFlZC4uMzE3NzQyZDUyYzQw
OTE0M2VhMzcxYWQwYTJhNmQyNmM1YWNjYzUzZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMS0wNy0yNyAg
S2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBmb3ItaW4g
c2hvdWxkIG9ubHkgZW1pdCBvbmUgbG9vcCBpbiBieXRlY29kZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3OTg5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLWFycmF5LW1vZGUu
anM6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLWJhc2UtcmVhc3Np
Z25lZC1sYXRlci5qczoKKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRl
cmF0aW9uLmpzOgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tdGVzdHMuanM6CisgICAgICAgICog
c3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNz
LmpzOgorICAgICAgICAodGVzdDUpOgorCiAyMDIxLTA3LTI1ICBBbGV4ZXkgU2h2YXlrYSAgPHNo
dmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBQYXJ0bHkgaW1wbGVtZW50IEZ1bmN0aW9u
LnByb3RvdHlwZS57Y2FsbGVyLGFyZ3VtZW50c30gcmVmbGVjdGlvbiBwcm9wb3NhbApkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMgYi9KU1Rlc3RzL3N0cmVz
cy9mb3ItaW4tYXJyYXktbW9kZS5qcwppbmRleCA5MDAyYjk0MGFkNTk2Yjc1NDgxZjAyNTQwZTUw
YWM5ZTljYmI1MDg4Li4zZDJkYTYzOWQ4MTBmOGFiOTdhM2UyNjlmYWUxMDcyMTBiNWNlNzVjIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcworKysgYi9KU1Rl
c3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcwpAQCAtMjYsOCArMjYsOSBAQAogdmFyIGZ1
bmNBcmdBbmRCb2R5U3RyID0KICIoYXJyKSB7IiArICJcbiIgKwogIiAgICB2YXIgc3VtID0gMDsi
ICsgIlxuIiArCi0iICAgIGZvciAodmFyIGkgaW4gYXJyKSIgKyAiXG4iICsKKyIgICAgZm9yICh2
YXIgaSBpbiBhcnIpIHsiICsgIlxuIiArCiAiICAgICAgICBzdW0gKz0gYXJyW2ldOyIgKyAiXG4i
ICsKKyIgICAgfSAiICsKICIgICAgcmV0dXJuIHN1bTsiICsgIlxuIiArCiAifSI7CiAKQEAgLTc1
LDYgKzc2LDcgQEAgZnVuY3Rpb24gdGVzdChuYW1lLCBkYXRhKSB7CiAKICAgICAgICAgaWYgKChh
Y3R1YWwgIT0gZXhwZWN0ZWQpICYmIChhY3R1YWwgIT0gcHJldmlvdXNSZXN1bHQpKSB7CiAgICAg
ICAgICAgICBwcmludCgiRkFJTDogIiArIG5hbWUgKyAiOiBleHBlY3RlZDogIiArIGV4cGVjdGVk
ICsgIiwgYWN0dWFsOiAiICsgYWN0dWFsICsgIiwgc3RhcnRpbmcgQCBsb29wIGl0ZXJhdGlvbiAi
ICsgaSk7CisgICAgICAgICAgICAkdm0uYnJlYWtwb2ludCgpOwogICAgICAgICAgICAgcHJldmlv
dXNSZXN1bHQgPSBhY3R1YWw7CiAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgbnVtYmVyT2ZGYWlsdXJlcysrOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWlu
LWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJl
YXNzaWduZWQtbGF0ZXIuanMKaW5kZXggODMxMTViNDk3M2M4MzdjYTZkM2ZmMDZlYTZmZjEzMWMz
NDUxMWU2Mi4uMDlmODFkOTU2NTNiYWExNTA2ZTVkZGEwNjJmYTJlMzVmMTU4YmYzMSAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qcworKysg
Yi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCkBAIC0xNCw1
ICsxNCw1IEBAIG5vSW5saW5lKGZvbyk7CiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKICAgICB2YXIgcmVzdWx0ID0gZm9vKHswOjAsIDE6MSwgYToyLCBiOjN9KTsKICAgICBpZiAo
cmVzdWx0ICE9IDcpCi0gICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKIH0K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlv
bi5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcwpp
bmRleCA1YWQzNTY2ZmQwZDM2MTAyNWExZTVmMzM2NWQwYmFkMzc0ZDUxMjAyLi5kMTE0NjkzMWIx
NDc1ZDg4YzQ3Mzk0OWVhZGEyZGRhMGZkMzkzMGE1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVz
cy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
Zm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCkBAIC0xMiw4ICsxMiw5IEBACiAgICAg
fTsKICAgICBub0lubGluZShmb28pOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgewotICAgICAgICBpZiAoZm9vKCkgIT09ICIxMjM1IikKLSAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiYmFkIHJlc3VsdCIpOworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09ICIxMjM1IikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
YmFkIHJlc3VsdCBnb3Q6ICIgKyByZXN1bHQpOwogICAgIH0KICAgICBmb28obnVsbCk7CiB9KSgp
OwpAQCAtMzYsOCArMzcsOSBAQAogICAgIH07CiAgICAgbm9JbmxpbmUoZm9vKTsKICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAgaWYgKGZvbygpICE9PSAieHoi
KQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0Iik7CisgICAgICAgIHZh
ciByZXN1bHQgPSBmb28oKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gInh6IikKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiAgICAgfQogfSko
KTsKIChmdW5jdGlvbigpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0
cy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwppbmRleCAyZTRkNmI4NDJhMjQy
ZWI3MTU5ODYwMGVlNTI4YWUxNGI5Yzg5Y2U0Li42ODk2MDk4MTg1MWVlMzQ0ZTNhYTdmNTMyMzE1
MWIyMjUxZjY1ZDkwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMuanMK
KysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCkBAIC0xMDUsNiArMTA1LDcgQEAg
ZnVuY3Rpb24gc2hvdWxkVGhyb3dTeW50YXhFcnJvcihzY3JpcHQpIHsKICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOwogICAgIH0KIH0pKCk7CisKIChmdW5jdGlvbigp
IHsKICAgICB2YXIgZm9vID0gZnVuY3Rpb24oYSwgYikgewogICAgICAgICBmb3IgKHZhciBwIGlu
IGIpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0
dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzIGIvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1w
cm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMKaW5kZXggOTljNTlh
YzEwNTY4Y2U4YTc5MDg1MjI5ODIwNmZkYzdlMGUwZjg5Yy4uZTBhZGUwNzFhMmU0YjhkMDI3OGQ5
NWNjOTMzZTI0ZjE4YmJlZTA1OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1w
cm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMKKysrIGIvSlNUZXN0
cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5l
c3MuanMKQEAgLTEzMiw3ICsxMzIsMTAgQEAgZnVuY3Rpb24gdGVzdDUoKSB7CiAgICAgby5fX3By
b3RvX18gPSBwOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKLSAgICAg
ICAgYXNzZXJ0KGNvdW50KG8pID09PSAwKTsKKyAgICAgICAgdmFyIGMgPSBjb3VudChvKTsKKyAg
ICAgICAgaWYgKGMpCisgICAgICAgICAgICBwcmludChjKTsKKyAgICAgICAgYXNzZXJ0KGMgPT09
IDApOwogICAgIH0KIH0KIHRlc3Q1KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434439</attachid>
            <date>2021-07-28 11:07:57 -0700</date>
            <delta_ts>2021-07-28 11:28:02 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728140756.patch</filename>
            <type>text/plain</type>
            <size>343358</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjkyOGQxOWRlMzIxY2Uw
NjhiNWFkOTIxZWIwNGFiNzIzZmEzZDVmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQzMDQs
NiArNDMwOCw0OSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAg
ICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgaWYg
KGFycmF5TW9kZS5pc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
OworICAgICAgICBlbHNlIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSB8fCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQorICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisK
KyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgp
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+ZW51bWVyYXRvck1ldGFkYXRh
KCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50
OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNh
c2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRv
ckhhc093blByb3BlcnR5OiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdo
ZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAg
ICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgorICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIG1ha2VIZWFwVG9w
Rm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAppbmRleCAxMTExZjg5ZjlkN2I1Yjk3Nzc4YzE2YzhkNTQ2NDBiZWEzNzQ0
MmIyLi5hMDI2YWFkMTg5M2JmMjNjNTcxOTZmY2M2YzkxZmMyMDAwM2M0NTY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKQEAgLTI4OSw2ICsyODksMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNT
YW5lQ2hhaW47CiAgICAgfQogCisgICAgYm9vbCBpc1NhbmVDaGFpbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNJbkJvdW5kc1NhbmVDaGFpbigpIHx8IGlzT3V0T2ZCb3VuZHNTYW5l
Q2hhaW4oKTsKKyAgICB9CisKICAgICBib29sIGlzT3V0T2ZCb3VuZHMoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzIHx8IHNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAKaW5kZXggZGIzN2Y0ZGRkYmY4MGNkNjZlYjU3ODdkN2JhYTJiZjUzYWY4OTA3Ni4uOWRi
ZDBiNDdkOWRmZjRjZjYwMzhhZjUwMDE3OTM0OGJlMGFlYTI5NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwCkBAIC0zOTAsNyArMzkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzICYgfk5vZGVCeXRlY29kZU5lZWRzTmVnWmVybyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAg
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNl
c0FzVmFsdWUpOwogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVy
Z2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhl
ciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCB8IE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApp
bmRleCBhMjk2YzRiODdjODU4ODY0ZmJkZWRkNzRlZjcyN2U1NGQ5NWZkNjk0Li4yYzk4M2JhYzM3
MDBjOGQyOTU3MjMxZGJkZWYyZWJmMzUwZDMwYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtODM4NywxMDMgKzgzODcsMTM2IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9oYXNfcHJpdmF0ZV9icmFuZCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDogewotICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmFi
bGVMZW5ndGgsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVy
ZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBo
KEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSks
Ci0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yPigpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldFBy
b3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5
PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksIGdldChieXRlY29kZS5tX3Byb3Bl
cnR5KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9uZXh0OiB7CisgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JOZXh0PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5
TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogaW5k
ZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAgICAgICAgICBOb2RlKiBlbnVtZXJhdG9y
ID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CisgICAgICAgICAgICBOb2RlKiBtb2RlID0g
Z2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAg
ICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVy
YXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19vd25fc3RydWN0dXJlX3By
b3BlcnR5KTsKLSAgICAgICAgfQorICAgICAgICAgICAgYXV0byBzZWVuTW9kZXMgPSBtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YTsKIAotICAgICAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKEluU3RydWN0dXJlUHJvcGVydHksCi0gICAgICAgICAgICAgICAg
Z2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJv
cGVydHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0g
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIXNlZW5Nb2RlcykKKyAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Ci0gICAgICAgICAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayku
bV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YmFzZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsKLSAgICAgICAgICAgIE5vZGUqIGhhc0l0ZXJhYmxl
UHJvcGVydHkgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSkpOwotICAgICAgICAgICAgbV9leGl0
T0sgPSBmYWxzZTsgLy8gSGFzSW5kZXhlZFByb3BlcnR5IG11c3QgYmUgdHJlYXRlZCBhcyBpZiBp
dCBjbG9iYmVycyBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0IGdlbmVy
aWMuCi0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGhhc0l0ZXJhYmxlUHJvcGVydHkp
OwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChtb2RlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0
b3IpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIHN0b3JhZ2UgZm9y
IEluZGV4ZWRNb2RlIG9ubHkuCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVkSW5kZXhBbmRNb2Rl
ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNlZW5Nb2RlcykpOworCisg
ICAgICAgICAgICBOb2RlKiB1cGRhdGVkTW9kZSA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRF
eHRyYWN0TW9kZSwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9tb2RlLCB1cGRhdGVkTW9kZSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRJbmRl
eCA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIHVwZGF0ZWRJbmRleEFu
ZE1vZGUpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1faW5kZXgsIHVwZGF0ZWRJbmRleCk7
CisKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSwgYWRkVG9HcmFwaChF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9k
ZSwgZW51bWVyYXRvcikpOworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9y
X25leHQpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dERpcmVjdFBuYW1lPigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOwotICAgICAgICAgICAgCisgICAgICAgIGNh
c2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICAg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9h
cnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7CisKICAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHBy
b3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJv
cGVydHlOYW1lID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIE5v
ZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogbW9k
ZSA9IGdldChieXRlY29kZS5tX21vZGUpOwogICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9
IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOwogCisgICAgICAgICAgICBhdXRvIHNlZW5Nb2Rl
cyA9IE9wdGlvblNldDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3KG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVz
KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKworICAgICAgICAg
ICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogYmFkTW9kZSA9IGFkZFRvR3JhcGgoQXJpdGhCaXRB
bmQsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpH
ZW5lcmljTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOworCisg
ICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgQXJpdGhCaXRBbmQgY2Fubm90IGhhdmUgZWZm
ZWN0cyBzbyBpdCdzIG9rIHRvIGV4aXQgaGVyZS4KKyAgICAgICAgICAgICAgICBtX2V4aXRPSyA9
IHRydWU7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOworCisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhqc051bWJlcigwKSkpLCBiYWRNb2RlKTsKKworICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsgLy8g
VXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQgb3B0aW1pemF0aW9ucy4K
KyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gRm9yIHByb3BlcnR5
IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1v
ZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGSVhNRTogQ2hlY2tpbmcgZm9yIGEgQmFkQ29uc3RhbnRWYWx1ZSBjYXVzZXMgdXMgdG8gYWx3
YXlzIHVzZSB0aGUgR2VuZXJpYyB2YXJpYW50IGlmIHdlIHN3aXRjaGVkIGZyb20gSW5kZXhlZE1v
ZGUgLT4gSW5kZXhlZE1vZGUgKyBOYW1lZE1vZGUgZXZlbiB0aG91Z2ggdGhhdCBtaWdodCBiZSBm
aW5lLgorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMuY29udGFpbnNBbnkoeyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhh
c1NlZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG1vZGVUZXN0ID0g
YWRkVG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKSk7Cisg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBo
LmZyZWV6ZVN0cm9uZyhqc0Jvb2xlYW4oZmFsc2UpKSksIG1vZGVUZXN0KTsKKworICAgICAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGluZGV4KTsgLy8gVXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQg
b3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsg
Ly8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KG1vZGUpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAg
ICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcs
IEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhz
cGVjdWxhdGlvbikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChi
YXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChudWxscHRyKTsgLy8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCiAg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChtb2RlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOwotICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0
RGlyZWN0UG5hbWUsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CisgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9y
R2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24p
KSk7CiAKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9kaXJlY3RfcG5hbWUpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKICAgICAgICAg
fQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKLSAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlF
bnVtZXJhdG9yPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBo
KEdldFByb3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLSAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigp
OworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogCi0gICAgICAgIGNhc2Ugb3BfZW51
bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1
Y3R1cmVQbmFtZSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSwK
LSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsKLSAgICAgICAgfQorICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckluQnlWYWws
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEpKSk7CiAKLSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6
IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLAotICAgICAgICAgICAgICAg
IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29k
ZS5tX2luZGV4KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaW5fYnlf
dmFsKTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdG9faW5kZXhf
c3RyaW5nOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoVG9JbmRleFN0cmluZywgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAg
ICAgICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOworCisgICAgICAgIGNhc2Ug
b3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4o
KTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0
YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKworICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5
dGVjb2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBh
ZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckhhc093blByb3BlcnR5LCBPcEluZm8o
YXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRh
KSkpOworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJv
cGVydHkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKaW5kZXggY2MwZDAx
NGRhMjkzMWZmM2VjZGNlOTQyOWNjMjYyNTYxZTJmN2Y3Ni4uMDZkMTlkMTczOTczMDNmNzQxYmU2
YjAyYmYwMTA1N2Y3MjI1NjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQ
aGFzZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGF0YUxv
ZygiICAgRm91bmQgbXVzdC1oYW5kbGUgYmxvY2s6ICIsICpibG9jaywgIlxuIik7CiAgICAgICAg
IAogICAgICAgICAvLyBUaGlzIG1lcmdlcyBzbmFwc2hvdCBvZiBzdGFjayB2YWx1ZXMgd2hpbGUg
Q0ZBIHBoYXNlIHdhbnQgdG8gaGF2ZSBwcm92ZW4gdHlwZXMgYW5kIHZhbHVlcy4gVGhpcyBpcyBz
b21ld2hhdCB0cmlja3kuCi0gICAgICAgIC8vIEJ1dCB0aGlzIGlzIE9LIGFzIGxvbmcgYXMgREZH
IE9TUiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpwcm92ZW4qIEFic3RyYWNWYWx1
ZSB2YWx1ZXMuIEFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzCisgICAgICAgIC8vIEJ1dCB0aGlz
IGlzIE9LIGFzIGxvbmcgYXMgREZHIE9TUiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRo
ICpwcm92ZW4qIEFic3RyYWN0VmFsdWUgdmFsdWVzLiBBbmQgaXQgdHVybnMgb3V0IHRoYXQgdGhp
cwogICAgICAgICAvLyB0eXBlIHdpZGVuaW5nIGlzIGNyaXRpY2FsIHRvIG5hdmllci1zdG9rZXMu
IFdpdGhvdXQgaXQsIG5hdmllci1zdG9rZXMgaGFzIG1vcmUgc3RyaWN0IGNvbnN0cmFpbnQgb24g
T1NSIGVudHJ5IGFuZAogICAgICAgICAvLyBmYWlscyBPU1IgZW50cnkgcmVwZWF0ZWRseS4KICAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAKaW5kZXggYzcxNjRiMzBmNDY0ZWIwZDQzODJlMmNjYTQyZDU2
OTk2NGQxYmY2Ny4uYWM3ODJkOTliNDUzYzUwODI2MWE3ZjNhODc5NTU4ODAwZDAwNWY3NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMjU0
LDE3ICsyNTQsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfaGFzX3By
aXZhdGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgY2FzZSBvcF9nZXRfZnJv
bV9zY29wZToKLSAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKLSAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9w
ZXJ0eToKLSAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ug
b3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToK
ICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgotICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWU6Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5h
bWU6Ci0gICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoK
ICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKICAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVu
YzoKQEAgLTI5OSw2ICsyODksMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChP
cGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNl
IG9wX3NldF9wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3BfY2hlY2tfcHJpdmF0ZV9icmFuZDoK
ICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6
CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJh
dG9yX2luX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eToK
ICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX2NhbGxf
ZXZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOWQx
MDA0ZmU1M2YzZDQ0N2RmMTAzZmFjYTBkMmUxMGVjNGZmNWY0Ni4uNzdhNjhlOGU0MWE3NzkyZTNl
NmI2ZTQ5M2E0MDVjNzVmMzg0Yzk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBjYXNlIENoZWNrQXJyYXlPckVtcHR5
OgogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBj
YXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBj
YXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIEdldFZlY3Rvckxlbmd0aDoKQEAgLTM0
Myw2ICszNDcsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4
dHJhY3RJbmRleDoKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgY2FzZSBHZXRFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7
CkBAIC0zNTAsNiArMzU3LDcyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OiB7CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgaWYgKG5vZGUt
PmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRN
b2RlICYmIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICByZWFkKE5hbWVkUHJvcGVydGllcyk7CisgICAgICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2Rl
LT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihI
YXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGdyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAg
ICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91
YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAg
ICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUo
bm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2xvYmJlclRv
cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6CiAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJl
YWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKQEAgLTcwNSw2ICs3NzgsOCBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29u
c3QgV3JpdGVGdQogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAgY2FzZSBUb1Byb3BlcnR5S2V5
OgogICAgIGNhc2UgSW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNh
c2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgSW5CeUlkOgogICAgIGNhc2Ug
SGFzUHJpdmF0ZU5hbWU6CiAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CkBAIC05MDYsNiArOTgx
LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgZmFyIHRvbyBjb25zZXJ2
YXRpdmUgZm9yIHRoZSBjaGlsZDEoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UgY2FzZS4KKyAgICBj
YXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAg
QXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAppbmRleCA1M2FiZmVhOTFkZjIyNGJkNDgyNTUwZGJlNTc4MmQ1OWNh
ZGQ5OGI1Li41MmE3MzE2NTY1ODYxMjUwNjU2MGUzYmYzZjUxYjk1MTNmM2I5YTdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0zOTUsNiArMzk1LDEwIEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZToKICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6CiAg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAg
Y2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlOgogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6
ZU5ld0ludGVybmFsRmllbGRPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2
YXRpb246CkBAIC01MDQsMTAgKzUwOCwxNSBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2Fz
ZSBHZXRCeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgRW51bWVyYXRvck5l
eHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgIGNhc2Ug
UHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggNDcyMDJkNmRiYWQ5MWM3NmY1OTc4ZGEyOGNh
MWM0OTc3MTU1YTgxOS4uYWNlNGFmNTM0NTcyZjRiZTZhZTc1YTIwZWEzMDE2YjRjNmM3OGY4OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0xMDI0
LDYgKzEwMjQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAg
ICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOwor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgNSkpOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0KKwogICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgewog
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkBAIC0xMDYyLDYgKzEw
NjksMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTcyCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJy
YXlNb2RlKEFycmF5TW9kZShBcnJheTo6R2VuZXJpYywgbm9kZS0+YXJyYXlNb2RlKCkuYWN0aW9u
KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKworCisgICAgICAgICAgICBjYXNlIEFycmF5
OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBmb3JjZSBPU1IgYmVjYXVz
ZSB3ZSBoYXZlIG9ubHkgc2VlbiBOYW1lZE1vZGUuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdFIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLi4uCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKQorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUobm9kZS0+YXJyYXlNb2RlKCkud2l0aFR5cGUoQXJyYXk6
OkdlbmVyaWMpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBA
IC0xMDk2LDcgKzExMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBzb21l
IGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwt
Ymxvd24KICAgICAgICAgICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBzbG93IHBhdGguIFdl
IGNhbiBmaXggdGhhdCB3aXRoOgogICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4Ci0gICAgICAgICAgICAgICAgICAgIAor
CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9m
Qm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVn
YXRpdmVJbmRleCkpCkBAIC0xMTExLDcgKzExMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9u
ID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFn
cygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigp
ID09IEFycmF5OjpJbkJvdW5kcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhv
bGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwgc28gaWYgdGhlIHVzZXIgZG9lc24ndCBjYXJlCkBA
IC0xMTIxLDcgKzExMzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91
dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
TmVnYXRpdmVJbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3Bl
Y3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMTE3OCw3ICsxMTk0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHNldCBhIG5vbi1KU1ZhbHVlIHJlc3VsdCBmb3Ig
RW51bWVyYXRvckdldEJ5VmFsIHNpbmNlIHdlIGNvdWxkIHN0aWxsIGRvIGEgTmFtZWRNb2RlIHBy
b3BlcnR5IGFjY2Vzcy4gV2UgYWxzbyBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8KKyAgICAgICAg
ICAgIC8vIHByb3ZlIHRoZXJlJ3Mgbm8gc3RydWN0dXJlIHByb3BlcnRpZXMgYXQgdGhpcyBwb2lu
dC4KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEVudW1lcmF0b3JHZXRCeVZhbCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGlm
ICghYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKQpAQCAtMjM0NSw2ICsyMzY1LDU4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAgIEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgRWRnZSYgaW5kZXggPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgRWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpOworCisgICAg
ICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPnByZWRpY3Rpb24o
KSkpOworCisgICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihiYXNlKTsKKyAgICAgICAg
ICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGJhc2UsIGluZGV4LCBzdG9yYWdlRWRnZSk7CisK
KyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7
CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5iZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5
KCkpCisgICAgICAgICAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwgYXJy
YXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzID8gQXJyYXk6OkluQm91bmRz
U2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2Vs
bFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgp
OworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAg
ICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCA0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8g
aW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvblR5cGVTZXQgb2YgdGhl
IFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0LgogICAgICAgICAgICAgLy8gQmVj
YXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0
LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKQEAgLTM2OTAsNiArMzc2Miw2NyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJy
YXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAorICAgIHZvaWQgc2V0SlNBcnJheVNhbmVDaGFp
bklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3Bl
Y3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9uOworICAgICAgICBpZiAoYXJyYXlNb2RlLmlz
SlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBp
ZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsgb24gYSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0
aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91
YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJuIHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAg
ICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNoYW5nZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5k
IGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAgICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2Un
ZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBhY3R1YWxseSBoYWQKKyAgICAgICAgICAgIC8v
IGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9tIGEgaG9sZS4gVGhhdCdzIHByZXR0eSBh
bm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2VseSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRo
YXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQgb2YKKyAgICAgICAgICAgIC8vIEluQm91bmRz
U2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVu
ZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5hTiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNj
b3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiwgYW5kIGp1c3QKKyAgICAgICAgICAgIC8v
IHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0IGNhc2UuIFRoaXMgaGFwcGVucyB0byBjYXRj
aCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAyKSBXZSBk
b24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRvIGhhdmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1
c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0byBVbmRlZmluZWQsIHNpbmNlIHRoYXQgd291
bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3YW50IHRvCisgICAgICAgICAgICAvLyBiZSBh
YmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91
bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAvLyBiYXNlZD8KKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0
byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAgICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5m
b3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNoZWNrLiBTZWNvbmQsCisgICAg
ICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRv
IHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAgICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBw
YXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKKworICAgICAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAg
ICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFy
cmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVj
dWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkg
d291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHJldHVybmVkIGFueSBKU1ZhbHVlLCBhbmQg
bm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0aWxsIGRvCisgICAgICAgICAgICAgICAg
Ly8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNs
b3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVj
dWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAgICAg
ICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6
SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJy
YXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24o
KSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9v
ayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0IGNhcmUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5k
IE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAvLyBkbyB0aGlzLgorICAgICAg
ICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVD
aGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUu
c3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNp
dGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4KSkKKyAgICAgICAgICAgICAg
ICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxl
KG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7CisgICAgfQorCiAgICAgdm9pZCBzZXRTYW5l
Q2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlv
bikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBj
ZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQxOTJkMTc1MmQ0NmZkNmRiOWE2MWI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBO
b2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmlu
QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0dXMoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+
aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImVudW1l
cmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpKTsKICAgICBpZiAobm9k
ZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdl
dEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBo
YXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQwZWY0MDMzMGMyMzM0NmM1ZDRjMjNmOWMwLi4x
YmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4OTIyMTUxZTQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXph
dGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBjYXNl
IEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6
OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM4MCw2ICsx
MzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAg
ewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRlYWNo
IHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXguCiAgICAgICAgIGNhc2UgQ2hl
Y2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6
c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwg
UmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJl
bGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG1femVybywgUmVs
YXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4NmQzOTNmZDg3YjY1NTdkMzUyZTNmMGQ0MDZh
YTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTExLDggKzExMSwxMSBAQCBFeGl0
TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3Rh
dGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxs
OgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRl
eCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2ZDBhNDM4ZTVlZDgxLi42OTAzM2Y3OTkxYTM2
N2JhNDU1MTkzNGRmODMxMTZhZGI0NDE3MTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkRlbGV0ZUJ5VmFyaWFudC5oIgogI2lu
Y2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2lu
Y2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5o
IgpAQCAtMTc3Miw2ICsxNzczLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdldEJ5SWREaXJl
Y3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKICAgICAgICAgY2FzZSBUcnlH
ZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIEdl
dFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQzLDg0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFzU3RvcmFnZUNo
aWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNl
IFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBj
YXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
KyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAg
ICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAg
ICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAgICAgICAgY2Fz
ZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NFeGNoYW5nZToK
KyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNzT3I6CisgICAg
ICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6CisgICAgICAg
IGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgIGNhc2Ug
QXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgSGFz
SW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHk6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAg
ICAgIGNhc2UgQXJyYXlJbmRleE9mOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgc3RvcmFnZUNoaWxkSW5kZXgoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc1N0b3JhZ2VDaGlsZCgpKTsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJD
b2RlQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ29kZVBvaW50QXQ6CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgcmV0
dXJuIDI7CisgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlW
YWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgICAgIHJldHVybiAzOwor
ICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAgICAg
ICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NFeGNo
YW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNzT3I6
CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6Cisg
ICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgICAgIHJldHVybiAyICsgbnVtRXh0cmFB
dG9taWNzQXJncyhvcCgpKTsKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBjYXNlIEdldEFycmF5
TGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIDI7CisKKyAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKKyAg
ICAgICAgICAgIHJldHVybiAyOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CisgICAgICAgICAgICByZXR1cm4gNDsKKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBBcnJheUluZGV4T2YgYnV0IGl0IGRvZXMgbm9uLXRy
aXZpYWwgdGhpbmdzIHRvIGRldGVybWluZSBzdG9yYWdlIGVkZ2UuCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBo
YXNVaWRPcGVyYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09IENoZWNrSWRlbnQ7
CkBAIC0yMjA1LDYgKzIyODUsMTAgQEAgcHVibGljOgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgog
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBTdHJpbmdD
aGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAgICAgICAgY2FzZSBTdHJp
bmdDb2RlUG9pbnRBdDoKQEAgLTMxNzQsNiArMzI1OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi41Y2U5YWYzZTQ1MDM0OGVjYWFi
YWMxYjFjODk1YWVjM2UxZjc2OGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MTUsNiArNTE1LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oVG9JbmRleFN0
cmluZywgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oRW51
bWVyYXRvck5leHRFeHRyYWN0TW9kZSwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oRW51
bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEVu
dW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNy
byhFbnVtZXJhdG9yR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEVudW1lcmF0b3JJbkJ5VmFsLCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFy
QXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICAvKiBOb2RlcyBmb3IgSlNNYXAgYW5kIEpT
U2V0ICovIFwKICAgICBtYWNybyhNYXBIYXNoLCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNy
byhOb3JtYWxpemVNYXBLZXksIE5vZGVSZXN1bHRKUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggOGQxNWQ2YWIzNTE2YjVlYjAyYjdmNjNmNDQ4
NjE3OWU5YjhlODQ0ZC4uZmVlYmFiYmE1MGU5NTBlZDIwOTU5OTM5YTczNzczMjg2OWE4NzZkYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yNTA1
LDYgKzI1MDUsMTA3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4
U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgcmV0dXJuIGpzU3Ry
aW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3RyaW5nKCkpOwogfQogCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgYmFzZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZSBtb2RlID0gc3Rh
dGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihtb2RlTnVtYmVyKTsKKyAg
ICBpZiAoSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkuaXNVbmRlZmluZWRPck51bGwoKSkgewor
ICAgICAgICBBU1NFUlQobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluaXRNb2Rl
KTsKKyAgICAgICAgQVNTRVJUKCFpbmRleCk7CisgICAgICAgIEFTU0VSVCghZW51bWVyYXRvci0+
c2l6ZU9mUHJvcGVydHlOYW1lcygpKTsKKyAgICAgICAgbW9kZSA9IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNPYmplY3QqIGJh
c2UgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZVZhbHVlKS50b09iamVjdChnbG9iYWxPYmplY3QpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGNvbnN0
ZXhwciBib29sIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPSBmYWxzZTsKKyAgICAg
ICAgZW51bWVyYXRvci0+Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9k
ZSwgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxKU1ZhbHVlPihzdGF0aWNfY2FzdDx1aW50NjRf
dD4obW9kZSkgPDwgMzIgfCBpbmRleCB8IEpTVmFsdWU6Ok51bWJlclRhZyk7CisjZWxzZQorICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZShtb2RlLCBpbmRleCk7CisjZW5kaWYKKyAgICBBU1NF
UlQocmVzdWx0LmlzTnVtYmVyKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0
VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CisKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgIGlmIChpbmRleCA8IGVudW1lcmF0b3ItPmluZGV4
ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
dm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICB9CisK
KyAgICBKU1N0cmluZyogcmVzdWx0ID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChp
bmRleCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5k
R2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCB1aW50MzJfdCBpbmRleCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1N0cmluZyogc3Ry
aW5nID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7
CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0g
YmFzZS0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUob2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSk7Cit9CisKK0pTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySW5CeVZhbCwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwg
aW50MzJfdCBtb2RlTnVtYmVyKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Zh
bHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZVZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGlmIChtb2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgJiYgYmFzZS5pc09iamVjdCgpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlLmdldE9iamVjdCgpLT5oYXNQcm9wZXJ0
eShnbG9iYWxPYmplY3QsIGluZGV4KSkpOworCisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9
IGpzU2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUocHJvcGVydHlOYW1l
VmFsdWUpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBw
cm9wZXJ0eU5hbWUpKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvckhhc093blByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
cHJvcGVydHlOYW1lVmFsdWUsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSAmJiBiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGJhc2UuZ2V0T2JqZWN0KCktPmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5k
ZXgpKSk7CisKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0ganNTZWN1cmVDYXN0PEpTU3Ry
aW5nKj4odm0sIEpTVmFsdWU6OmRlY29kZShwcm9wZXJ0eU5hbWVWYWx1ZSkpOworICAgIGF1dG8g
aWRlbnRpZmllciA9IHByb3BlcnR5TmFtZS0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3du
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpZGVudGlmaWVyKSkpKTsKK30KKwogSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2Vs
bCosIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIHJlZ2V4cFB0ciwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZExhc3RJbmRleCkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAppbmRl
eCAzMTRlMWZlZGU1OTVkMGZiOGZhODM1ZWY3MjA1ZTZiNjQ1YzMwNDZiLi5kMzZmMzUzYmMzNjEy
Yjk4ODJjYTFkMTgzODQ3M2RkMDkyODU5NDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IERhdGVJbnN0YW5jZTsKIGNsYXNzIEpTQmlnSW50Owogc3RydWN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlOworY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogCiBuYW1lc3BhY2UgREZH
IHsKIApAQCAtMTEwLDYgKzExMSwxMiBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkluU3RydWN0dXJlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYQogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIEpTQ2Vs
bCosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIEpTQ2VsbCosIChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCkp
OworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0
ZUluZGV4QW5kTW9kZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCB1aW50MzJfdCwgaW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90LCBp
bnQzMl90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50
MzJfdCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySGFz
T3duUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgdWludDMyX3QsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciopKTsKKwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4LCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25OZXdBcnJheSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHZvaWQq
LCBzaXplX3QpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3RW1wdHlB
cnJheSwgY2hhciosIChWTSosIFN0cnVjdHVyZSopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5k
ZXggYWE3YzYxZTYwYWY1MDdlYjkxN2UzMDZiYWI4NTM3YzBlODllMmUwZC4uZDJhZWNjMDFhNWYy
OTA0M2FlMjFkZmRmZGNjN2Y1MTA5OTg4YzI4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAg
LTQ3MywxNCArNDczLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1f
Z3JhcGguY2hpbGQobm9kZSwgMCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkMS0+cHJlZGljdGlv
bigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKKwogICAgICAgICAg
ICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBub2RlLAogICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigp
LAogICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAg
IFNwZWNOb25lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9k
ZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAg
ICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQpAQCAtNTAxLDcgKzUwMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0Z1
bGxEb3VibGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZv
ckFyaXRobWV0aWMobm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSkgJiYgbm9kZS0+b3AoKSA9PSBH
ZXRCeVZhbCkKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGht
ZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiAobm9kZS0+b3AoKSA9PSBHZXRCeVZh
bCB8fCBub2RlLT5vcCgpID09IEVudW1lcmF0b3JHZXRCeVZhbCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGVuYWJsZUludDUyKCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQ1MkFueSk7CkBAIC04NjIsNiArODYzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2Ug
QXJyYXlQdXNoOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6CkBAIC0xMjA1LDEwICsxMjA3LDE1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFj
dE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CiAgICAgICAg
IGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgSW5CeVZhbDoKICAgICAgICAgY2FzZSBJbkJ5SWQ6CiAgICAg
ICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CkBAIC0xMjM5LDYgKzEyNDYsMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlOiB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBhY3R1YWxseSByZXR1cm4gYSBKUyBudWxs
IGJ1dCB3ZSBicmFuY2ggb2YgdGhhdCBjYXNlIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrIHNvIHdl
IGRvbid0IHdhbnQgdG8gbWVzcyB3aXRoCisgICAgICAgICAgICAvLyBmaXh1cCdzIGxvZ2ljLgor
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjRnVsbE51bWJlcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZhbHVl
IHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3RyaW5n
LgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDogewog
ICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHByb2R1
Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0IHBy
b2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBjOTYz
N2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi42NTY1MTEwNDE4ZGNhZTllNGZl
ZmZmYTk5NDYyMjcyM2I0MjgwNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKQEAgLTg2LDYgKzg2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGxvd2VyQm91bmRzQ2hlY2sobV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dy
YXBoLmNoaWxkKG1fbm9kZSwgMSksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAg
ICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
Y2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMx
NWRhNzE3MmEzMGY2MTllZTJkMGI5YjQ2MGUyYzUwLi5hMDUxZTc0YTcwNjIxMTU5YzgzYjk2Mjkz
YzgyODZmZTM1NGZkMmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaApAQCAtMzcyLDYgKzM3Miw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAg
ICAgICAgIC8vIHRvIGNhcHR1cmUgInByb2ZpbGluZyIgYXQgdGhlIHBvaW50IGluIGNvbnRyb2wg
ZmxvdyBoZXJlIHRoZSB1c2VyIHB1dCB0aGVtLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAt
NDk2LDYgKzQ5NywxMSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICByZXR1cm4g
aXNTYWZlOwogICAgIH0KIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1v
ZGU6CisgICAgLy8gVGhlc2UgdGVjaG5pY2FsbHkgZG9uJ3QgaGF2ZSBlZmZlY3RzIGJ1dCB0aGV5
J2xsIG9ubHkgZXZlciBmb2xsb3cgYSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSBz
byB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBmYWxzZS4KKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0
RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgogICAgIGNhc2UgVG9UaGlzOgog
ICAgIGNhc2UgQ3JlYXRlVGhpczoKICAgICBjYXNlIENyZWF0ZVByb21pc2U6CkBAIC01OTUsNiAr
NjAxLDggQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIE5ld1N0cmluZ09iamVj
dDoKICAgICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbkJ5SWQ6CisgICAgY2FzZSBFbnVtZXJh
dG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNl
IEhhc1ByaXZhdGVOYW1lOgogICAgIGNhc2UgSGFzUHJpdmF0ZUJyYW5kOgogICAgIGNhc2UgSGFz
T3duUHJvcGVydHk6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1MThhNjA4NzEzNDJkNjQ0ZWQ5NzhiMWU1Yjgu
LjNlM2Y4MTIzZDZiMTBiYTU2MzJmODFlOTZmN2VkMDE4ZTViNWE2MWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsx
NjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVj
dWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkK
ICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVt
cG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRh
ZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCi0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBv
cGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hW
YWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1fcGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5
bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNlbmRpZgogewotICAgIGlmIChyZXN1bHRXb3Jk
ID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShq
aXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0
KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7
Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1w
b3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFn
LCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAgLTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0
SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29w
ZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBw
cmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYw
NCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0g
ICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJl
c3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwot
ICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBz
dGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlz
T3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWdu
ZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBp
bmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hS
ZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhp
cywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0
Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsK
KyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKIAogICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsyNjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2pp
dC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3Rv
dHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0
Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1
ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAgICAgICAgICAg
b3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8
U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAgICAgICAgIG91
dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRo
aXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2Jh
bE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMs
IHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmpl
Y3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAot
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcp
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsK
LSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBt
X2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNj
cmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Z3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0g
RGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1
cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9kZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICsz
MzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJS
ZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcg
cmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3Vs
YXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8
IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBpc1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUp
ID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChzaG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlz
VUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIo
KSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3Rl
ZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJz
b2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0
LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0
UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzVUludDMyKSB7CisgICAgICAgIEFTU0VSVChl
bGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJ
bnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7
CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUp
IHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcs
IFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50
VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAg
ICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFy
cmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExh
bWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZl
cnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAK
QEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3Jt
YXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1pdFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2Rl
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAgbG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcsIHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlw
ZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCks
IHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0
SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxh
dGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5
cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKQEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJh
c2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5
cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBT
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1h
dCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUp
KTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQog
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9
IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwogICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRB
cnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyAr
MzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVn
LCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICBtX2pp
dC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0
ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2Rl
LCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcwMyw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBH
UFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBu
b2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1h
dD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0
cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNo
UmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3lt
Ym9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5v
ZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBh
cmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJn
MUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSks
IGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwg
YXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0
MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZz
ZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50
cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJl
Y3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1
bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjpp
Z25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgwODIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSogbm9kZSwgY29u
c3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
Ly8gVE9ETzogQXJlIGJvdGggb2YgdGhlc2UgbmVjZXNzYXJ5Pz8KICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVn
cygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcg
c2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybjsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKTsKQEAgLTEzNDgyLDYgKzEzNDg3LDMxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKiBub2RlKQogICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKE5vZGUqIG5vZGUpCit7CisgICAgRWRnZSBiYXNl
RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisKKyAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7CisgICAgR1BS
UmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgaWYgKG5vZGUtPmVu
dW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpIHsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBSZXVzZSwgaW5kZXgpOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKDApKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGluY3JlbWVudExvb3A7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmU7Cisg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJS
ZWc+KCk+KFsmXSB7CisKKyAgICAgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2gu
Z3ByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5pdE1vZGUgPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1vZGVHUFIpOworCisgICAgICAg
ICAgICBpbmNyZW1lbnRMb29wID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaC5ncHIoKSk7CisKKyAgICAgICAgICAgIGluaXRN
b2RlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRM
ZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNjcmF0
Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSkpOworICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKS5saW5rVG8oaW5jcmVtZW50TG9vcCwgJm1faml0KTsKKworICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSA8PCAzMiksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgbV9qaXQub3I2NChzY3JhdGNoLmdwcigpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSwgcmVzdWx0UmVncy50YWdH
UFIoKSk7CisjZW5kaWYKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRh
ZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIGJhc2VFZGdl
LnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisKKyAgICAgICAgLy8gSGFzIHRo
ZSBzYW1lIHN0cnVjdHVyZSBhcyB0aGUgZW51bWVyYXRvci4KKyAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
bW9kZVNldE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TmFtZWRNb2RlKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpKTsKKworICAg
ICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluaXRNb2RlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBtb2RlR1BSKTsKKworICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisK
KyAgICAgICAgaW5pdE1vZGUubGluaygmbV9qaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIG1faml0Lm9yNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkgPDwgMzIp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSksIHJlc3VsdFJl
Z3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2UodGhpcywgYmFzZUVkZ2UpOworICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5yZWdz
KCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNl
UmVncywgaW5kZXhHUFIsIG1vZGVHUFIsIGVudW1lcmF0b3JHUFIpOworICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KE5v
ZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1
ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IHBhaXJSZWdzLnBheWxvYWRHUFIoKTsK
KworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXlsb2FkR1BSLCByZXN1bHRHUFIpOworCisg
ICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKK3sK
KyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5qc1ZhbHVlUmVncygpOworICAg
IEdQUlJlZyBwYWlyR1BSID0gaXM2NEJpdCgpID8gcGFpclJlZ3MucGF5bG9hZEdQUigpIDogcGFp
clJlZ3MudGFnR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IG1faml0LnJzaGlmdDY0KHBhaXJHUFIsIFRydXN0ZWRJbW0zMigzMiksIHJlc3VsdEdQUik7Cisj
ZWxzZQorICAgIG1faml0Lm1vdmUocGFpckdQUiwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgIG1f
aml0LmFuZDMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0
aW9uTW9kZU1hc2spLCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIGluZGV4T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGVPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yT3BlcmFuZCh0aGlzLCBub2Rl
LT5jaGlsZDMoKSk7CisKKyAgICBHUFJSZWcgaW5kZXggPSBpbmRleE9wZXJhbmQuZ3ByKCk7Cisg
ICAgR1BSUmVnIG1vZGUgPSBtb2RlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRv
ciA9IGVudW1lcmF0b3JPcGVyYW5kLmdwcigpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAg
ICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpOworICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbChOb2Rl
KiBub2RlKQoreworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApOworICAgIGF1dG8gZ2VuZXJhdGUgPSBbJl0gKEdQUlJlZyBiYXNlQ2VsbEdQUikgeworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICBKU1ZhbHVl
UmVnc1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZVNsb3dQYXRoOworCisgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbChub2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCkgeworICAgICAg
ICAgICAgRWRnZSBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlOworICAgICAgICAgICAgaWYgKHN0b3Jh
Z2VFZGdlKQorICAgICAgICAgICAgICAgIHN0b3JhZ2UuZW1wbGFjZSh0aGlzLCBzdG9yYWdlRWRn
ZSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgbW9kZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCA1KSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBtb2RlR1BSID0g
bW9kZS5ncHIoKTsKKyAgICAgICAgICAgIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAg
ICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKworICAgICAgICAgICAgcmVz
dWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICByZXN1bHRSZWdz
ID0gcmVzdWx0LnJlZ3MoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCk7CisKKyAgICAgICAgICAgIGJvb2wgaGF2ZVN0b3JhZ2UgPSAhIXN0
b3JhZ2VFZGdlOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VUZW1wb3Jhcnk7Cisg
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKKyAgICAgICAgICAgIGlmICghaGF2ZVN0b3Jh
Z2UpIHsKKyAgICAgICAgICAgICAgICBzdG9yYWdlVGVtcG9yYXJ5ID0gR1BSVGVtcG9yYXJ5KHRo
aXMsIFJldXNlLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gc3Rv
cmFnZVRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgbm90RmFzdE5hbWVkQ2FzZXM7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgZ2VuZXJhdGUgdGhpcyBjb2RlIGlmIHdlIGtub3cgYmFzZSBpcyBub3QgYW4g
b2JqZWN0LgorICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbW9kZUdQUiwgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlKSkpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgYmFzZSBpcyBhIGNlbGwgaGVyZSBzaW5j
ZSB3ZSB3b24ndCBnZW5lcmF0ZSBOYW1lZE1vZGUgcHJvcGVydGllcyBmb3Igbm9uLW9iamVjdHMu
CisgICAgICAgICAgICAgICAgLy8gVE9ETzogcHV0IEFzc2VydCBoZXJlPworCisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBrbm93IHRoZXJlJ3Mgb25seSBvbmUgc3RydWN0dXJlIGZvciBiYXNlIHdlIGNhbiBqdXN0
IGVtYmVkIGl0IGhlcmUuCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKworICAgICAgICAgICAgICAgIGF1dG8gYmFkU3RydWN0dXJlID0gbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ug
c2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHJlcHJlc2VudCBJbmRleGVkK05hbWVkPworICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLm5vZGUoKSA9PSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
YmFkU3RydWN0dXJlU2xvd1BhdGggPSBiYWRTdHJ1Y3R1cmU7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQoYmFkU3RydWN0
dXJlKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICAg
ICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlQ2VsbEdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmVD
YXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgICAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5uZWczMihz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdlKQor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VDZWxsR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsK
KyAgICAgICAgICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRWYWx1ZShN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBEYXRhRm9ybWF0SlMp
OworICAgICAgICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVseSBvbiBjb21waWxlR2V0QnlWYWwg
dG8gY2FsbCBqc1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
a2luZGEgaGFja3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZvKG5vZGUpLmpzVmFs
dWVSZWdzKCkgPT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9uSW5mbyhub2RlKS5yZWdpc3RlckZv
cm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgaWYgKGJhZFN0cnVjdHVyZVNsb3dQ
YXRoLmlzU2V0KCkpCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENh
bGwoYmFkU3RydWN0dXJlU2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVy
TmFtZUFuZEdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZUNlbGxHUFIsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BSKSk7CisKKyAgICAgICAgZG9uZUNh
c2VzLmxpbmsoJm1faml0KTsKKyAgICB9OworCisgICAgaWYgKGlzQ2VsbChiYXNlRWRnZS51c2VL
aW5kKCkpKSB7CisgICAgICAgIC8vIFVzZSBtYW51YWwgb3BlcmFuZCBzcGVjdWxhdGlvbiBzaW5j
ZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQgYSBVc2VLaW5kIG1vcmUgcmVzdHJpY3RpdmUgdGhhbiBD
ZWxsVXNlLgorICAgICAgICBzcGVjdWxhdGUobm9kZSwgYmFzZUVkZ2UpOworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRnZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2VPcGVyYW5kKHRoaXMsIGJhc2VF
ZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAgIH0KK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5vZGUqIG5vZGUsIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBi
YXNlUmVncywgR1BSUmVnIGJhc2VDZWxsR1BSKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHBy
b3BlcnR5TmFtZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsK
KworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eU5hbWVSZWdzID0gcHJvcGVydHlOYW1lLnJl
Z3MoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBtb2RlR1BSID0gbW9kZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIg
PSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG9wZXJhdGlvbkNhc2VzOworCisg
ICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2UpLm1fdHlwZSAmIH5TcGVjQ2VsbCkK
KyAgICAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwo
YmFzZVJlZ3MpKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRo
aXMgY29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGEgY2VsbC4KKyAgICAgICAgb3BlcmF0aW9u
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9k
ZUdQUiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkp
OworCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2Vs
bEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVn
cyk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisK
KyAgICAgICAgb3BlcmF0aW9uQ2FzZXMubGluaygmbV9qaXQpOworCisgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oc2xvd1BhdGhGdW5jdGlvbiwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eU5hbWVS
ZWdzLCBpbmRleEdQUiwgbW9kZUdQUik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgYmxlc3NlZEJvb2xlYW5S
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVk
Z2UudXNlS2luZCgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZS5ncHIoKSwgYmFzZS5ncHIoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7
CisgICAgICAgIGdlbmVyYXRlKGJhc2UucmVncygpLCBiYXNlLnBheWxvYWRHUFIoKSk7CisgICAg
fQorfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckluQnlWYWwoTm9k
ZSogbm9kZSkKK3sKKyAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG5vZGUsIG9wZXJh
dGlvbkVudW1lcmF0b3JJbkJ5VmFsKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVt
ZXJhdG9ySGFzUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5
KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5SWRGbHVzaChOb2RlKiBu
b2RlKQogewogICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsKQEAgLTE0
OTM0LDI4ICsxNTI0NywyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVO
ZXdBcnJheVdpdGhTaXplKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplYwogICAgICAgICBzaXpl
R1BSLCBzdG9yYWdlR1BSKSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3Bl
cmF0aW9uKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShO
b2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24sIGNvbnN0IFNj
b3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KQogewogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgR1BSUmVnIGluZGV4R1BS
ID0gaW5kZXguZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICBHUFJSZWcgaW5kZXhHUFIgPSBJbnZhbGlkR1BSUmVnOworICAgIEdQUlJlZyByZXN1bHRHUFIg
PSBJbnZhbGlkR1BSUmVnOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgIHN3aXRjaCAo
bW9kZS50eXBlKCkpIHsKICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGls
ZEluZGV4KCkpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJl
c3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRP
ZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGlu
ZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkp
CkBAIC0xNDk4MywxMiArMTUyOTYsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhh
c0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICBBU1NF
UlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAg
QVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRl
eCgpKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEZQUlRl
bXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0
Y2guZnByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAor
ICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogCiAg
ICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE1MDEyLDEzICsxNTMyNywxNSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUs
IFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0
b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CiAKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5k
ZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIGlmIChtb2RlLmlzSW5C
b3VuZHMoKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFs
dWVSZWdzKCksIG51bGxwdHIsIG91dE9mQm91bmRzKTsKQEAgLTE1MDQ3LDE0ICsxNTM2NCwxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5v
ZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgLy8gRklY
TUU6IE9wdGltaXplIFR5cGVkQXJyYXlzIGluIEhhc0luZGV4ZWRQcm9wZXJ0eSBJQwogICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAg
ICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CiAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
IH0KIAogICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRo
aXMsIHNsb3dQYXRoT3BlcmF0aW9uLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBpbmRleEdQUikpOwotCi0gICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RGly
ZWN0UG5hbWUoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAppbmRleCA5OGM3NjE2YjhmZDJmYmY1YzRkZDhhNTc3MTUwOGFkMjY3OWY5
OWQxLi41YmI2ZGUxYjllZjZjNjRjNzQ0ZGE1Nzc1OWFlNDQ2Y2FhNTgxOGExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC00Nyw2ICs0Nyw3
IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdQUlRlbXBvcmFy
eTsKK2NsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBj
bGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMjQ2LDYg
KzI0Nyw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgR1BSUmVnIGFsbG9jYXRlKEdQUlJlZyBzcGVj
aWZpYykKICAgICB7CisgICAgICAgIGlmIChzcGVjaWZpYyA9PSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICAgICAgYWxsb2NhdGUoKTsKICNpZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05f
VkFMSURBVElPTikKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxvY2F0aW9uQXRPZmZzZXQo
bV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKQEAgLTEzNDUsMTIgKzEzNDgsMTUgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3Jh
cnksIG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICB9CiAgICAgCisgICAgLy8gV2UgdXNlIGEgc2Nv
cGVkTGFtYmRhIHRvIHBsYWNhdGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2YWxpZGF0aW9uLgorICAg
IHZvaWQgY29tcGlsZUdldEJ5VmFsKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYg
cHJlZml4KTsKKwogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSopOwotICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsT25TdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVS
ZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwog
ICAgIHZvaWQgY29tcGlsZUZyb21DaGFyQ29kZShOb2RlKik7IAogCi0gICAgdm9pZCBjb21waWxl
R2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlW
YWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRp
cmVjdEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7
CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiwgY29uc3Qg
U2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3Jt
YXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRQcml2
YXRlTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJpdmF0ZU5hbWVCeUlkKE5vZGUq
KTsKQEAgLTE0MjQsMTIgKzE0MzAsMTIgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpKdW1w
IGp1bXBGb3JUeXBlZEFycmF5SXNEZXRhY2hlZElmT3V0T2ZCb3VuZHMoTm9kZSosIEdQUlJlZyBi
YXNlR1BSLCBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyk7CiAgICAgdm9pZCBlbWl0VHlw
ZWRBcnJheUJvdW5kc0NoZWNrKE5vZGUqLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIGluZGV4R1BS
KTsKICAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChOb2RlKik7Ci0gICAg
dm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBl
KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRB
cnJheVR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRh
Rm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQg
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3Bl
cnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25G
bG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JG
bG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVk
QXJyYXlUeXBlKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmco
Tm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2Rl
Kik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKE5vZGUqLCBj
b25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0
YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+
JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcoTm9k
ZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQg
Y29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRn
ZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aFRo
aXMoTm9kZSopOwpAQCAtMTQ1OCw3ICsxNDY0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAg
IEVkZ2UgdmFsdWVVc2UpOwogICAgIHZvaWQgbG9hZEZyb21JbnRUeXBlZEFycmF5KEdQUlJlZyBz
dG9yYWdlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJy
YXlUeXBlKTsKLSAgICB2b2lkIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqLCBHUFJS
ZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUpOworICAgIHZv
aWQgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MsIFR5cGVkQXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSwgYm9vbCBzaG91bGRCb3gpOwog
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9u
Q29tbW9uKEdQUlJlZywgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgR1BSUmVnLCBHUFJSZWcsIEdQUlJl
ZywgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Jiwgc2l6ZV90LCBGdW5jdGlvbkV4ZWN1dGFibGUq
KTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
U2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKQEAgLTE1MjgsNiArMTUzNCwxNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZVRvSW5kZXhTdHJpbmcoTm9kZSopOworCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5v
ZGUqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoTm9kZSosIFNsb3dQYXRoRnVuY3Rpb25U
eXBlKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqKTsKKwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7CkBAIC0xNTY4LDcgKzE1ODUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQ2FsbE51bWJlckNvbnN0cnVjdG9yKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5UYWlsKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSosIFNfSklUT3BlcmF0aW9uX0dDWik7CisgICAgdm9p
ZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1osIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KTsK
ICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlQ2xlYXJDYXRjaExvY2FscyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHJvZmlsZVR5cGUo
Tm9kZSopOwpAQCAtMTkzNyw2ICsxOTU0LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIEpTVmFsdWVSZWdzKGdwcigpKTsKICAgICB9CisgICAgSlNWYWx1ZVJlZ3MgcmVncygpIHsg
cmV0dXJuIGpzVmFsdWVSZWdzKCk7IH0KICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgYm9v
bCBpc0RvdWJsZSgpIHsgcmV0dXJuIG1faXNEb3VibGU7IH0KIApAQCAtMTk2NSw3ICsxOTgzLDcg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRH
UFIoKSk7CiAgICAgfQogCi0gICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCkKKyAg
ICBHUFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoID0gUGF5bG9hZFdvcmQpCiAgICAgewog
ICAgICAgICByZXR1cm4ganNWYWx1ZVJlZ3MoKS5ncHIod2hpY2gpOwogICAgIH0KQEAgLTIwMDMs
MjEgKzIwMjEsMjAgQEAgcHJpdmF0ZToKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBTdG9yYWdlT3BlcmFuZCgpID0gZGVm
YXVsdDsKKwogICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQs
IEVkZ2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVkZ2Up
CiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVk
VXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIGlmIChqaXQt
PmlzRmlsbGVkKG5vZGUoKSkpCi0gICAgICAgICAgICBncHIoKTsKKyAgICAgICAgZW1wbGFjZShq
aXQsIGVkZ2UpOwogICAgIH0KICAgICAKICAgICB+U3RvcmFnZU9wZXJhbmQoKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBt
X2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlk
ICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZh
bGlkKTsKICAgICB9CiAgICAgCiAgICAgRWRnZSBlZGdlKCkgY29uc3QKQEAgLTIwMzYsNiArMjA1
MywxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxs
U3RvcmFnZShlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQor
CisgICAgdm9pZCBlbXBsYWNlKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKKyAgICB7
CisgICAgICAgIG1faml0ID0gaml0OworICAgICAgICBtX2VkZ2UgPSBlZGdlOworICAgICAgICBB
U1NFUlQobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VSVCht
X2ppdCk7CisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVk
Z2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVk
KG5vZGUoKSkpCisgICAgICAgICAgICBncHIoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB1c2Uo
KQogICAgIHsKQEAgLTIwNDMsOSArMjA3MSw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2
YXRlOgotICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9q
aXQgeyBudWxscHRyIH07CiAgICAgRWRnZSBtX2VkZ2U7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZh
bGlkOworICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZCB7IEludmFsaWRHUFJSZWcgfTsKIH07CiAK
IApAQCAtMjEzNCwxMSArMjE2MiwxOSBAQCBjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB7CiBw
dWJsaWM6CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJVCopOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0
aXZlSklUKiwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZp
Y1BheWxvYWQsIEdQUlJlZyBzcGVjaWZpY1RhZyk7CisjZW5kaWYKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1c2VU
YWcsIFQmIG9wZXJhbmQsIFdoaWNoVmFsdWVXb3JkIHJlc3VsdFJlZ1dvcmQgPSBQYXlsb2FkV29y
ZCk7CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywg
SlNWYWx1ZU9wZXJhbmQmKTsKICAgICB+SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICAKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gISFyZWdzKCk7IH0KKworICAgIEpT
VmFsdWVSZWdzVGVtcG9yYXJ5JiBvcGVyYXRvcj0oSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmJikgPSBk
ZWZhdWx0OworCiAgICAgSlNWYWx1ZVJlZ3MgcmVncygpOwogCiBwcml2YXRlOgpAQCAtMjE1MCw2
ICsyMTg2LDI2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hW
YWx1ZVdvcmQpCisgICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQoreworfQorI2Vsc2UK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NU
ZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdoaWNo
VmFsdWVXb3JkIHJlc3VsdFdvcmQpCit7CisgICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdv
cmQpIHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9w
ZXJhbmQpOworICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgICAgICBt
X3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKKyAgICB9Cit9Cisj
ZW5kaWYKKwogY2xhc3MgRlBSVGVtcG9yYXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDlkNDAzNjk2MTBkODllNDFlNTE2ZjZjNGE0MjVlNWZk
NzEwMmExYmUuLjUwM2IzNDE0MjFmYzY5MWViMGIzZjBlZWQwZjU2M2YxODkwZWM5ZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcApAQCAtMTgxMiw2ICsxODEyLDMzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q29udGlndW91c1B1dEJ5VmFsKE5vZGUqIG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZQogICAg
IG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7ICAgIAogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9k
ZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Cisg
ICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworI2lmIENPTVBJTEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQor
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2Us
IEpTVmFsdWVSZWdzKCksIDApOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJy
YXk6OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5k
ZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgR1BSUmVn
IGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERh
dGFGb3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkp
KTsKKworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAo
bV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYg
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQo
KSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9y
T2JqZWN0V2l0aFN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBj
ZWxsLiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mg
cHJvcGVydHlSZWdzID0gcHJvcGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENl
bGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9w
ZXJ0eVJlZ3MpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgIEpTVmFsdWVSZWdzIGJh
c2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0
eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHBy
ZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1f
aml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5l
ZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BS
KCkpKTsKKworICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBiYXNlUmVn
cywgcHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKKworICAgICAgICBp
ZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShT
cGVjU3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5n
ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0
YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1i
b2wpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OworCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIs
IGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MpOworCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdl
biwgc2xvd1BhdGguZ2V0KCkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3Zl
KHNsb3dQYXRoKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
KworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAg
ICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1h
dDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRJbnQzMiA6
IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3Vu
ZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIGlm
IChmb3JtYXQgPT0gRGF0YUZvcm1hdEludDMyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFu
b2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpOworCisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIEpT
VmFsdWVSZWdzKCksIDAsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAg
ICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
CisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVz
dWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRKUyk7
CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAorICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAg
ICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwg
UGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4o
KSkgeworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5i
cmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soCisgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwg
bnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRS
ZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShy
ZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6
b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAg
ICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsK
KyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAg
ICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IGZvcm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2Fk
RnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIo
KSkpOworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAg
ICAgICAgICBib3hEb3VibGUocmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYg
IXJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVn
IHRlbXBSZWcgPSB0ZW1wLmZwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7
CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRh
Rm9ybWF0SlMpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAg
IGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzKTsKKworICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAg
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0
eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2Fz
ZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlN
b2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRp
ZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9y
TGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9q
aXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworCisg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBz
dGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7Cisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsK
KyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlW
YWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OiB7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUo
KS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
bm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKQEAg
LTIyMzMsNyArMjU2MiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24gU3Ry
aW5nQ2hhckF0IG5vZGUgaGF2aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0gICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHNj
b3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0
IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAg
ICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBy
ZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAg
ICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIyNjUsMzI2ICsyNTk5LDI3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAg
ICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0jaWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NP
REUpCi0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRl
Q292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBpbmRl
eCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLQotICAg
ICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNlKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7Ci0K
LSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBu
b2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgaWYg
KG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhT
eW1ib2wobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8v
IFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0
LgotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBw
cm9wZXJ0eS5qc1ZhbHVlUmVncygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MpOwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOwotCi0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAg
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFRhZyh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFRhZ1dvcmQpOwotICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcywgUmV1c2UsIHByb3BlcnR5LCBQ
YXlsb2FkV29yZCk7Ci0KLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5q
c1ZhbHVlUmVncygpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJv
cGVydHkuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mo
cmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKLQotICAgICAgICAgICAgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICAgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVF
eGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6
ZSgpKTsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2Vk
UmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdzLnRhZ0dQUigpKSk7Ci0KLSAgICAg
ICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNz
VHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAgICAgYmFzZVJlZ3Ms
IHByb3BlcnR5UmVncywgcmVzdWx0UmVncywgSW52YWxpZEdQUlJlZyk7Ci0KLSAgICAgICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBl
KFNwZWNTdHJpbmcpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlz
U3RyaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAg
ICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSkuaXNUeXBlKFNwZWNTeW1ib2wpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5w
cm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKLQotICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgobV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdl
bi5zbG93UGF0aEp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0
aEdlbmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAg
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJh
c2VSZWdzLCBwcm9wZXJ0eVJlZ3MpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5h
ZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAg
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
ID09IEFycmF5OjpJbnQzMikgewotICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAg
ICAgICAgT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRQ
YXlsb2FkLmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVz
dWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKLSAg
ICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgVGFnT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGFnLmdwcigp
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxvYWRPZmZz
ZXQpLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRQYXlsb2FkLmdwcigpKTsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFu
Y2hJZk5vdEVtcHR5KHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZy5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRQYXlsb2FkLmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2pp
dCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1
ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBub2RlKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkganNWYWx1ZVJlc3VsdDsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IG9uZVJlZ1Jlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNj
b3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0
IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAg
ICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2ggKHBy
ZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5
bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZ1JlZykpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0
aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0
QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRh
Z1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3Vs
dC5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91
bmRzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9h
ZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHQuZnBy
KCkpKTsKLSAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsK
KyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDoKKyAgICAgICAgICAgICAgICBvbmVSZWdSZXN1bHQgPSBHUFJUZW1wb3Jhcnko
dGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShvbmVSZWdSZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0
aGlzKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIEZQ
UlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7
Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcp
KTsKLSAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcpOwotCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
ICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFs
dWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQ
YXlsb2FkKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2pp
dC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBh
eWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICAg
ICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0g
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0ID0gSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IGpzVmFsdWVS
ZXN1bHQucmVncygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAg
ICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotCi0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBh
eWxvYWQodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFn
LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXls
b2FkLmdwcigpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9
IG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQot
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCByZXN1bHRUYWdSZWcpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9
IG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBh
eWxvYWRSZWcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7
Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOwotICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAot
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxv
YWRSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAgICAg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25E
aXJlY3RBcmd1bWVudHMobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
cnJheTo6U2NvcGVkQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDog
ewotICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5
cGVkQXJyYXlUeXBlKCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFy
cmF5KG5vZGUsIHR5cGUpOwotICAgICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsKKyAg
ICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC00MTMzLDExICs0MTY4
LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAgIGNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
KTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShu
b2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3By
KCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7CisgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVz
ZSwgaW5kZXgpOworCisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3Bl
cmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVw
bGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5n
cHIoKSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOiB7CkBAIC00MTU3LDYgKzQyMDAsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0
ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVy
YXRvck5leHRFeHRyYWN0TW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0SW5kZXgobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVy
YXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvckdl
dEJ5VmFsKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0
b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBQcm9maWxlVHlwZTogewogICAgICAgICBjb21w
aWxlUHJvZmlsZVR5cGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggYjVlMWNjM2U0MmQy
ZmI0YzlkNGYxMzEwN2U5OGVmZTBiMjA1ZTVjNy4uNjJmZTIyM2VhYTkwYzQ4YmEzMjQyZjQ4ZDRh
ZTQ5OTgyYTQwN2I5NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0yMjQ2LDYgKzIyNDYsMzcwIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3Rk
Ojp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3Jt
YXQpPiYgcHJlZml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7
CisgICAgY2FzZSBBcnJheTo6QW55VHlwZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4
aXQ6CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6CisgICAgY2FzZSBBcnJh
eTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgor
ICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5
cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7
CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVz
dWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKKyAgICAg
ICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCBy
ZXN1bHRSZWdzLmdwcigpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJh
eToKKyAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKKyAgICBjYXNlIEFycmF5OjpHZW5l
cmljOiB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUp
KSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5k
KCkgPT0gT2JqZWN0VXNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9s
VXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhT
eW1ib2wobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
YmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAg
R1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQ
Uik7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworCisg
ICAgICAgIEdQUlRlbXBvcmFyeSBzdHViSW5mbzsKKyAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpERkdKSVQpKSB7CisgICAgICAgICAgICBzdHViSW5mbyA9IEdQUlRlbXBvcmFyeSh0aGlzKTsK
KyAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8uZ3ByKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Cisg
ICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKwor
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRS
ZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5n
T1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBS
ZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0
ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkp
CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKSk7CisKKyAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAg
bV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUs
IEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVz
dWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICBlbHNl
IGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBl
KFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJ
bnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICBnZW4u
c3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkRGR0pJVCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBz
bG93UGF0aDsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQp
KSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAorICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAgICAgICAg
ICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2Rl
T3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7
CisgICAgICAgIH0KKworICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdl
dCgpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwor
CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAg
IHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpT
KTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBub3RIb2xl
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQsIG5vZGUsIGZvcm1hdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJl
c3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQpLCByZXN1bHRSZWcpOworCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5j
aElmTm90RW1wdHkocmVzdWx0UmVnKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwg
cHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywg
cHJvcGVydHlSZWcpKTsKKyAgICAgICAgfQorCisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWcsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5OjpE
b3VibGU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewor
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmZwcigpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAg
ICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBm
b3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXREb3VibGUpOworCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0KSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9h
ZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1
bHRSZWcpKTsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKSB7CisgICAg
ICAgICAgICAgICAgYm94RG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVncyk7CisgICAgICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlICYm
ICFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzU2FuZUNoYWluKCkgJiYgIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3Ro
ZXIpOworCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAg
ICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIHN0ZDo6dGllKHJl
c3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgocmVzdWx0SXNVbmJveGVkID8gRGF0YUZvcm1hdERv
dWJsZSA6IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7
CisKKyAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBS
ZWcpOworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFp
bigpKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQ
TmFOOworICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFO
KSwgdGVtcFJlZyk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKCFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1
bHQodGVtcFJlZywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAg
ICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZl
SW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
KSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWdzLmdwcigpKTsKKyAg
ICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0
ZW1wUmVnKSk7CisgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVncy5ncHIo
KSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBz
bG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MuZ3By
KCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwor
ICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZToKKyAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
ICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0UmVncy5ncHIo
KTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5
U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKworICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xl
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdEdQUikp
OworCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHBy
ZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVn
cy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFu
Y2hJZkVtcHR5KHJlc3VsdFJlZykpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVn
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKwor
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
U3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRp
cmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMo
bm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBw
cmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAg
IGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJy
YXk6CisgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDMy
QXJyYXk6CisgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZs
b2F0NjRBcnJheTogeworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlN
b2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFy
cmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgfSB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7
CkBAIC0yNzEzLDcgKzMwNzcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6IHsKICAgICAgICAgLy8gUmVsaWVzIG9u
IFN0cmluZ0NoYXJBdCBub2RlIGhhdmluZyBzYW1lIGJhc2ljIGxheW91dCBhcyBHZXRCeVZhbAot
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2Rl
LCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZv
cm1hdCBwcmVmZXJyZWRGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7
CisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAg
ICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTIHx8IHByZWZlcnJl
ZEZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKQEAgLTI3NDYsMzQ1ICszMTE1LDIxIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFs
OiB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkFueVR5cGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKLSAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVu
cHJvZmlsZWQ6Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJh
ZCBhcnJheSBtb2RlIHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKLSAgICAgICAgICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDApKSk7Ci0KLSAgICAgICAgICAgIHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKLSAgICAgICAgICAgIGluZGV4LnVzZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQp
LCByZXN1bHRHUFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFy
cmF5OjpCaWdVaW50NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkg
PT0gT2JqZWN0VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9
PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZv
ck9iamVjdFdpdGhTeW1ib2wobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3Bl
cnR5LmdwcigpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7Ci0gICAgICAgICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMp
OwotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3Vs
dC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHN0dWJJbmZvOwotICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHByb3BlcnR5
KTsKLQotICAgICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxpZEdQUlJlZzsKLSAg
ICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewotICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgc3R1
YkluZm9HUFIgPSBzdHViSW5mby0+Z3ByKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKLQotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0
ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4
aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7Ci0KLSAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBpZiAo
IW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3Bl
Y0NlbGwpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZO
b3RDZWxsKGJhc2VHUFIpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNv
ZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywK
LSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVy
dHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICAgICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTdHJpbmcpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzU3RyaW5nID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAg
ICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygp
LT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKLQotICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgobV9qaXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVz
ZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNs
b3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VE
YXRhSUMoSklUVHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xv
d1BhdGhJQ0NhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0
dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIs
IFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdl
dEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBzdHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2Fs
bCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4p
KSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2Vu
LCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZN
b3ZlKHNsb3dQYXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkludDMyOgotICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBt
X2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBB
cnJheTo6Q29udGlndW91cyk7Ci0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhv
bGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2hJZkVtcHR5KHJlc3VsdC5ncHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBj
b21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3Ms
IERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0
IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNl
IERhdGFGb3JtYXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQu
Z3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQ
dWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZG9u
ZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBz
bG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7Ci0g
ICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1
bHRSZWcpKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcs
IHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAg
ICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBG
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwotCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKLQotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlN
b2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJh
bmNoSWZOYU4ocmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3Vs
dFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRP
ZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNB
c090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJSZWc+
IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmVn
ID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJv
eGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVn
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1
bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAqcmVzdWx0UmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwg
KnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
ICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAg
Ym94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1f
aml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICBk
ZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBEYXRh
Rm9ybWF0SlMgfHwgcHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludDMyKTsKKyAgICAg
ICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQ
UlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJl
c3VsdC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAKLSAgICAgICAgICAgIG1faml0LmxvYWQ2NChN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3Vs
dFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0UmVnKSk7Ci0gICAgCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAg
ICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3Bl
cnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50
czoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoK
LSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKLSAgICAgICAg
Y2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWlu
dDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAg
ICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFy
cmF5OgotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6IHsKLSAgICAgICAgICAgIFR5
cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwot
ICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsK
LSAgICAgICAgfSB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHJlc3VsdFJlZ3MsIHByZWZlcnJlZEZvcm1hdCk7CisgICAgICAgIH0pKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNTgxLDcgKzM2MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSBmYWxzZTsKLSAgICAgICAgc2V0
SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0R1BSLCB0eXBlLCBjYW5TcGVjdWxh
dGUpOworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRCb3ggPSBmYWxzZTsKKyAgICAgICAg
c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
dHlwZSwgY2FuU3BlY3VsYXRlLCBzaG91bGRCb3gpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtNTI5MSwxMSArNTMzNywxOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9w
ZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOworCisgICAgICAgIGNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5
LCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKGluZGV4LmdwcigpLCByZXN1bHQuZ3ByKCkpOyB9KSk7CisgICAgICAg
IHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFi
bGVJbmRleGVkUHJvcGVydHkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1
cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAg
ICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewpAQCAtNTMxNSw2ICs1MzY5
LDQyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Y29tcGlsZVRvSW5kZXhTdHJpbmcobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAg
Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAg
Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7Cisg
ICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAg
ICAgICAgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbChub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAgICBjb21waWxlRW51
bWVyYXRvckluQnlWYWwobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBi
ZWYxZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRkMDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJl
Y3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAgLTM1Miw2ICszNTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5k
ZXggMmUyZjA3ZGZjN2U4YzEzZGRiMGVkZDVhMmQwN2E1ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcy
MzBlMGUxYmQ0NDVmMzA2MjM0MzdmY2Q2MzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTExNCw2ICsxMTQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
bW9kZVNldE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVT
dHJpbmc6Om9mZnNldE9mRmxhZ3MoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19sZW5ndGgs
IEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmlu
Z19maWJlcjAsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGExYTVmZDI0NGNmMjEx
MDMyNjQxOTdhNzZhZTMwYzdmNjBmNzllNjQuLjZlNWQxMGQ0MzM3YzdhM2RhNjEyM2IzNTBlNjhl
Mjc5ZjEwYjViNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKQEAgLTI5OCw2ICsyOTgsMTMgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6
CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgogICAgIGNhc2UgVG9JbmRleFN0
cmluZzoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgIGNh
c2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6Cisg
ICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoK
KyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEJvdHRvbVZhbHVl
OgogICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlv
bjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRl
eCA2ZmUyOWQ5OWZhNDQxNDljMTQ2YjIxYWI0MTA0YzQwODAzNjlmMzcxLi45ZmMyYzZmZjc0ZTAw
NDUyOTViNDMwOTZmOTM1ZjA2NDdhMWVkZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMDIsNiArMTAyLDggQEAKICNpbmNsdWRlIDx3
dGYvUmVjdXJzYWJsZUxhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRVbm9yZGVyZWRTZXQuaD4K
IAorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgorCiAjdW5kZWYgUkVMRUFTRV9BU1NFUlQKICNk
ZWZpbmUgUkVMRUFTRV9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKICAgICBpZiAoIShhc3NlcnRp
b24pKSB7IFwKQEAgLTE1NTgsNiArMTU2MCwyNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6CiAgICAgICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1v
ZGU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFj
dEluZGV4OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVy
dHlOYW1lOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlO
YW1lKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlW
YWw6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIGNv
bXBpbGVFbnVtZXJhdG9ySW5CeVZhbCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0
b3JIYXNPd25Qcm9wZXJ0eSgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJ
bW1lZGlhdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTAyMCw3ICs1MDQzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgLy8gd2UgZG9taW5hdGUgdGhlbS4KICAgICB9CiAgICAgCi0gICAgdm9p
ZCBjb21waWxlR2V0QnlWYWwoKQorICAgIExWYWx1ZSBjb21waWxlR2V0QnlWYWxJbXBsKCkKICAg
ICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTUwNDcsOCArNTA3MCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50
IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAgICAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKQEAgLTUwODAsOCArNTEwMiw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3Rv
cmFnZSBhbGl2ZS4KICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9
PSBBcnJheTo6Q29udGlndW91cykKICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShiYXNlKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVz
dWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewpAQCAtNTEwMCw4ICs1
MTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwg
bm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91Ymxl
Tm90RXF1YWxPclVub3JkZXJlZChyZXN1bHQsIHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKKworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbV9ub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzU2FuZUNoYWluKCkgJiYgIShtX25vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVV
c2VzQXNPdGhlcik7CkBAIC01MTQxLDE4ICs1MTYyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwog
ICAgICAgICAgICAgaWYgKHJlc3VsdElzVW5ib3hlZCkKLSAgICAgICAgICAgICAgICBzZXREb3Vi
bGUobV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShEb3VibGUsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOworCisg
ICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogewogICAgICAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEpKTsKIAogICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCksIG1f
bm9kZSwgbV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKQEAgLTUxNjksOCArNTE4OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVl
KCksIG51bGxwdHIsIGlzT3V0T2ZCb3VuZHMpOwogICAgICAgICAgICAgICAgIFR5cGVkUG9pbnRl
ciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBtX2hlYXBz
LkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSk7
Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzcykpOwotICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9hZDY0
KGFkZHJlc3MpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJv
dW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01MTkyLDggKzUyMTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFs
dWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJy
YXk6OlNjb3BlZEFyZ3VtZW50czogewpAQCAtNTI0Niw4ICs1MjYzLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93UmVzdWx0
KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKElu
dDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKQEAgLTUyNTYsMjQgKzUyNzIs
MjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNv
bnRhaW5zKG1fbm9kZSkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3RyaW5nLCB3ZWFrUG9pbnRlcihn
bG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTdHJpbmcobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMCkpLCBsb3dTdHJpbmcobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSk7CiAgICAg
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0
aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCAwKSksIGxvd1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N5bWJvbCht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAor
ICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgICAgIEludDY0
LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAg
ICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBs
b3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDApKSwgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fbm9k
ZTsKQEAgLTUzNzMsOCArNTM4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSk7CiAg
ICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBwYXRjaHBvaW50OwogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgpAQCAtNTM5MCw4ICs1NDAy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCBu
b1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwogICAgICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9y
YWdlIGFsaXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwot
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTQx
NywxMyArNTQyOCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFz
ZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1
bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5n
OiB7Ci0gICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0KCk7Ci0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKTsKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKQEAgLTU0
NDgsOSArNTQ1Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBsb2FkRnJvbUludFR5cGVkQXJyYXkocG9pbnRlciwgdHlwZSk7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMgc3Rv
cmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFz
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IHRy
dWU7Ci0gICAgICAgICAgICAgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KHJlc3Vs
dCwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKQEAgLTU0Njks
OCArNTQ3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFs
aXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAg
ICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
QEAgLTU0ODAsOCArNTQ4NiwyNCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpTZWxl
Y3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgogICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
Y29tcGlsZUdldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBjb21waWxl
R2V0QnlWYWxJbXBsKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkgewor
ICAgICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KHJlc3VsdCwgdHlwZSwgY2FuU3BlY3VsYXRl
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQt
PnR5cGUoKSA9PSBEb3VibGUpCisgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtODU3MSw3ICs4NTkzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQs
IGVtcHR5UmVzdWx0LCBzbG93UmVzdWx0KSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGls
ZVN0cmluZ0NoYXJBdCgpCisgICAgTFZhbHVlIGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKCkKICAg
ICB7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93U3RyaW5nKG1fZ3JhcGguY2hpbGQobV9ub2Rl
LCAwKSk7CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGguY2hpbGQobV9u
b2RlLCAxKSk7CkBAIC04Njc5LDcgKzg3MDEsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIC8vIFdlIGhhdmUgdG8g
a2VlcCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMgc3RvcmFnZSBhbGl2ZS4KICAgICAgICAg
ZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KEludDY0LCByZXN1bHRzKSk7CisgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIHJlc3Vs
dHMpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJBdCgpCisgICAgeworICAg
ICAgICBzZXRKU1ZhbHVlKGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKCkpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCkKQEAgLTEyOTA2LDE3ICsxMjkzMywx
NiBAQCBwcml2YXRlOgogICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoU19KSVRPcGVyYXRpb25fR0Na
IHNsb3dQYXRoT3BlcmF0aW9uKQorICAgIExWYWx1ZSBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
SW1wbChMVmFsdWUgaW5kZXgsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbikK
ICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNlID0g
bG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwotICAgICAgICBMVmFsdWUg
aW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogICAgICAg
ICBBcnJheU1vZGUgbW9kZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCk7CiAKICAgICAgICAgc3dpdGNo
IChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgTFZhbHVl
IHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Cisg
ICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogCiAgICAgICAgICAgICBJ
bmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8K
ICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBz
LmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKQEAgLTEyOTUxLDExICsxMjk3NywxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50
MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3Jh
Z2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5z
dG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEluZGV4ZWRB
YnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzOwogICAg
ICAgICAgICAgCkBAIC0xMjk4OSwxMiArMTMwMTQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29s
ZWFuKG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBjaGVj
a0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJh
eTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3Jh
Z2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5z
dG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlv
biA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMzAyNiwxNyArMTMwNTAsMjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29s
ZWFuKG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNoZWNr
SG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIHNs
b3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82
NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmpl
Y3QpLCBiYXNlLCBpbmRleCkpOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2
b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRo
T3BlcmF0aW9uKQorICAgIHsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgc2V0Qm9vbGVhbihjb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5SW1wbChpbmRleCwgc2xvd1BhdGhPcGVyYXRpb24pKTsKKyAgICB9CisK
ICAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKQogICAgIHsKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
b3JpZ2luLnNlbWFudGljKTsKQEAgLTEzMjE3LDYgKzEzMjQ1LDI0NyBAQCBwcml2YXRlOgogICAg
ICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHdlYWtQb2lu
dGVyKGdsb2JhbE9iamVjdCksIGluZGV4KSk7CiAgICAgfQorCisgICAgdm9pZCBjb21waWxlRW51
bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoKQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNl
bWFudGljKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxv
d0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKworICAgICAgICBpZiAobV9u
b2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwg
bV9ub2RlLCBtX291dC5ub3RaZXJvMzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSkpOworCisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBpbmNyZW1lbnQgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tIYXNQcm9wZXJ0eSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygp
OworCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5kZXggPSBtX291dC5hbmNo
b3IoaW5kZXgpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5pdGlhbEluZGV4Rm9ySGFz
UHJvcGVydHkgPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmlzWmVybzMyKG1vZGUpLCB1bnN1cmUoY2hlY2tIYXNQcm9wZXJ0eSksIHVuc3VyZShp
bmNyZW1lbnQpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5jcmVtZW50KTsKKyAg
ICAgICAgICAgIExWYWx1ZSBpbmRleFBoaSA9IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4
KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYWRkKGluZGV4
UGhpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNyZW1l
bnRlZEluZGV4UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGluY3JlbWVudGVkSW5kZXgpOworICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgZmluYWxJbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9y
KGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lmxlc3NU
aGFuKGluY3JlbWVudGVkSW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCkpLCB1bnN1cmUoY2hlY2tIYXNQcm9w
ZXJ0eSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY2hlY2tIYXNQcm9wZXJ0eSk7CisgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHlJbmRleCA9
IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4Rm9ySGFzUHJvcGVydHksIGluY3JlbWVudGVk
SW5kZXhSZXN1bHQpOworICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShpbmRleFBo
aSwgbV9vdXQuYW5jaG9yKHByb3BlcnR5SW5kZXgpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZpbmFsUHJvcGVydHlJbmRleCA9IG1fb3V0LmFuY2hvcihwcm9wZXJ0eUluZGV4KTsKKyAg
ICAgICAgICAgIExWYWx1ZSBoYXNQcm9wZXJ0eSA9IGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJ
bXBsKHByb3BlcnR5SW5kZXgsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkp
OworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGhhc1Byb3BlcnR5LCB1bnN1cmUoY29udGludWF0
aW9uKSwgdW5zdXJlKGluY3JlbWVudCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIGZpbmFsSW5kZXggPSBtX291dC5waGko
SW50MzIsIGZpbmFsSW5jcmVtZW50ZWRJbmRleCwgZmluYWxQcm9wZXJ0eUluZGV4KTsKKyAgICAg
ICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQuemVyb0V4dChmaW5hbEluZGV4LCBJ
bnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8
dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIDw8IDMyKSkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgRWRnZSYgYmFzZUVk
Z2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAgIGlmIChtX25vZGUt
PmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRN
b2RlICYmIGJhc2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICBMVmFs
dWUgYmFzZSA9IGxvd0NlbGwoYmFzZUVkZ2UpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENh
Y2hlLCBub1ZhbHVlKCksIG1fbm9kZSwgbV9vdXQubm90RXF1YWwobV9vdXQubG9hZDMyKGJhc2Us
IG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSkpOworCisg
ICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5u
b3RFcXVhbChtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfbW9kZVNldCksIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluY3JlbWVudCA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFs
SW5kZXggPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmlzWmVybzMyKG1vZGUpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGluY3JlbWVu
dCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgaW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFuY2hvcihtX291dC5h
ZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgICAgICBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4LCBpbmNyZW1l
bnRlZEluZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQuemVy
b0V4dChpbmRleCwgSW50NjQpLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Ok51bWJlclRhZyB8
IHN0YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9k
ZSkgPDwgMzIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBM
VmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBzZXRKU1ZhbHVlKHZt
Q2FsbChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKQor
ICAgIHsKKyAgICAgICAgTFZhbHVlIGJveGVkUGFpciA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSk7CisKKyAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRvSW50MzIoYm94ZWRQYWlyKSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpCisg
ICAgeworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKKworICAgICAgICBMVmFsdWUgaGlnaEJpdHMgPSBtX291dC5jYXN0VG9JbnQzMihtX291
dC5sU2hyKGJveGVkUGFpciwgbV9vdXQuY29uc3RJbnQzMigzMikpKTsKKyAgICAgICAgc2V0SW50
MzIobV9vdXQuYml0QW5kKGhpZ2hCaXRzLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBtZXRob2Qgb2YgdmFsdWUgcmVjb3ZlcnkgZm9y
IHRoaXMgbm9kZSBzaW5jZSBpdCdzICJlZmZlY3QiIGZyZWUgYnV0IGFsd2F5cyBsaXZlIGluIGJ5
dGVjb2RlLgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1l
KCkKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExWYWx1ZSBpbmRl
eCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxv
d0NlbGwobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcikpOworICAgIH0KKworICAg
IHZvaWQgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCisgICAgeworICAgICAgICBFZGdlIGJh
c2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICBFZGdlIHBy
b3BlcnR5TmFtZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSk7CisgICAgICAg
IEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMik7CisgICAg
ICAgIEVkZ2UgaW5kZXhFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpOworCisg
ICAgICAgIExWYWx1ZSBiYXNlID0gREZHOjppc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSA/IGxv
d0NlbGwoYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikgOiBsb3dKU1ZhbHVlKGJh
c2VFZGdlKTsKKworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IHN0b3JhZ2VFZGdlID8gbG93U3Rv
cmFnZShzdG9yYWdlRWRnZSkgOiBudWxscHRyOworICAgICAgICAvLyBXZSBoYXZlIHRvIG1hdGVy
aWFsaXplIHRoZSBwcm9wZXJ0eU5hbWUgaGVyZSBpbiBjYXNlIGl0IHJlcXVpcmVzIGJveGluZyBz
aW5jZSB0aGUgSUMgcGF0aCB3b24ndCBkb21pbmF0ZSBzdWJzZXF1ZW50IHVzZXMgaW4gc3Vic2Vx
dWVudCBub2Rlcy4KKyAgICAgICAgLy8gSWYgaXQncyBhbiBJbnQzMiBhbmQgd2UgdXNlIGl0IGFz
IHN1Y2ggdGhpcyBib3hpbmcgd2lsbCBiZSBEQ0UnZCBieSBiMyBsYXRlciBhbnl3YXkuCisgICAg
ICAgIGxvd0pTVmFsdWUocHJvcGVydHlOYW1lRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKKworCisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKGluZGV4RWRnZSk7CisgICAg
ICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQp
KTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCA1KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tTdHJ1Y3R1cmVCbG9j
ayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrSW5saW5lT3JP
dXRPZkxpbmVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlu
bGluZUxvYWRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG91
dE9mTGluZUxvYWRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGdlbmVyaWNJQ0Jsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUgaXNOb3RO
YW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpHZW5lcmljTW9kZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROYW1lZCwgdW5zdXJl
KGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNrU3RydWN0dXJlQmxvY2spKTsKKworICAgICAg
ICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgLy8gVE9ETyBj
aGVjayBjZWxsPworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8gc3Ry
dWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUub25s
eVN0cnVjdHVyZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlKQorICAgICAgICAgICAgc3RydWN0
dXJlSUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlND
ZWxsX3N0cnVjdHVyZUlEKTsKKworICAgICAgICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVjdHVy
ZSA9IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9o
ZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKKworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdDsKKyAgICAgICAg
aWYgKGluZGV4RWRnZS5ub2RlKCkgPT0gcHJvcGVydHlOYW1lRWRnZS5ub2RlKCkpIHsKKyAgICAg
ICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVj
dEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBiYWRTdHJ1
Y3R1cmVTbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBtX291dC5icmFu
Y2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZMaW5l
QmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oYmFkU3RydWN0dXJlU2xvd1BhdGgpOworICAgICAgICAgICAgYmFkU3RydWN0dXJlU2xv
d1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVtZXJh
dG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFz
ZSwgaW5kZXgsIGVudW1lcmF0b3IpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX291
dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0
T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spOworICAgICAgICBMVmFsdWUgaW5s
aW5lQ2FwYWNpdHkgPSBudWxscHRyOworICAgICAgICBib29sIGhhc05vT3V0T2ZMaW5lUHJvcGVy
dGllcyA9IGZhbHNlOworICAgICAgICBpZiAoc3RydWN0dXJlKSB7CisgICAgICAgICAgICBoYXNO
b091dE9mTGluZVByb3BlcnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwor
ICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpbmxpbmVDYXBhY2l0
eSkKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQubG9hZDMyKGVudW1lcmF0b3Is
IG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KTsK
KyAgICAgICAgTFZhbHVlIGlzSW5saW5lID0gaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID8gbV9v
dXQuaW50MzJPbmUgOiBtX291dC5iZWxvdyhpbmRleCwgaW5saW5lQ2FwYWNpdHkpOworICAgICAg
ICBtX291dC5icmFuY2goaXNJbmxpbmUsIHVuc3VyZShpbmxpbmVMb2FkQmxvY2spLCB1bnN1cmUo
b3V0T2ZMaW5lTG9hZEJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5saW5lTG9h
ZEJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKAorICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnBy
b3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwKKyAgICAgICAgICAgICAgICBiYXNlLCBtX291dC56ZXJv
RXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0
b3JhZ2UoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG91dE9mTGluZUxvYWRCbG9jayk7CisgICAgICAgIGlmICghc3RvcmFn
ZSkKKyAgICAgICAgICAgIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNP
YmplY3RfYnV0dGVyZmx5KTsKKworICAgICAgICBMVmFsdWUgcmVhbEluZGV4ID0gbV9vdXQuc2ln
bkV4dDMyVG82NCgKKyAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291dC5zdWIoaW5kZXgsIGlubGlu
ZUNhcGFjaXR5KSkpOworICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRP
ZkxpbmVSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9v
dXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBzdG9yYWdlLCBy
ZWFsSW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSkpKTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGdlbmVy
aWNJQ0Jsb2NrKTsKKyAgICAgICAgTFZhbHVlIGdlbmVyaWNSZXN1bHQgPSBjb21waWxlR2V0QnlW
YWxJbXBsKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBtX25vZGUtPmFycmF5TW9k
ZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAg
ICAgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgNCB8fCBpc1NpZ25lZCh0eXBlKSkKKyAgICAg
ICAgICAgICAgICBnZW5lcmljUmVzdWx0ID0gYm94SW50MzIoZ2VuZXJpY1Jlc3VsdCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IHN0cmljdEludDUy
VG9KU1ZhbHVlKGdlbmVyaWNSZXN1bHQpOworICAgICAgICB9IGVsc2UgaWYgKGdlbmVyaWNSZXN1
bHQtPnR5cGUoKSA9PSBEb3VibGUpCisgICAgICAgICAgICBnZW5lcmljUmVzdWx0ID0gYm94RG91
YmxlKGdlbmVyaWNSZXN1bHQpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGdlbmVyaWNJQ1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcihnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJQ1Jlc3VsdCwg
b3V0T2ZMaW5lUmVzdWx0LCBpbmxpbmVSZXN1bHQpOworICAgICAgICBpZiAoYmFkU3RydWN0dXJl
U2xvd1BhdGhSZXN1bHQpCisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHJlc3Vs
dCwgYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+
CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KFNsb3dQYXRoRnVuY3Rpb25U
eXBlIHNsb3dQYXRoRnVuY3Rpb24pCisgICAgeworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwor
ICAgICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOwor
ICAgICAgICBMVmFsdWUgYmFzZSA9IGJhc2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlID8gbG93
Q2VsbChiYXNlRWRnZSkgOiBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAgICAgICAgTFZhbHVlIHBy
b3BlcnR5TmFtZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsK
KyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMykpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc05h
bWVkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxC
bG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG1hdGNoZXNTdHJ1
Y3R1cmVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJh
dGlvbkJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
dGVzdE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6TmFtZWRNb2RlKSksIHVuc3VyZShpc05hbWVkQmxvY2spLCB1bnN1cmUob3BlcmF0aW9u
QmxvY2spKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNOYW1lZEJsb2NrKTsKKworICAgICAg
ICBtX291dC5icmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5cGUoYmFzZUVkZ2UpKSwgdW5zdXJl
KGlzQ2VsbEJsb2NrKSwgdW5zdXJlKG9wZXJhdGlvbkJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNDZWxsQmxvY2spOworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291
dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBtX291
dC5icmFuY2gobV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9y
LCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAor
ICAgICAgICAgICAgdXN1YWxseShtYXRjaGVzU3RydWN0dXJlQmxvY2spLCByYXJlbHkob3BlcmF0
aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhtYXRjaGVzU3RydWN0dXJlQmxv
Y2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBuYW1lZFJlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhvcGVyYXRpb25CbG9jayk7CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIG9wZXJhdGlvblJlc3VsdCA9IG1fb3V0LmFuY2hvcih1bmJveEJvb2xlYW4odm1DYWxs
KEludDY0LCBzbG93UGF0aEZ1bmN0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNl
LCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBtb2RlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAg
ICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIG5hbWVkUmVzdWx0LCBvcGVyYXRpb25SZXN1
bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbCgpCisgICAg
eworICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0
b3JJbkJ5VmFsKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHkoKQorICAgIHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShvcGVy
YXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpOworICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpCiAgICAgewpAQCAtMTczNDQsNyArMTc2MTMs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAobV9ub2RlLT5zaG91
bGRTcGVjdWxhdGVJbnQzMigpICYmIGNhblNwZWN1bGF0ZSkgewogICAgICAgICAgICAgc3BlY3Vs
YXRlKAogICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0
Lmxlc3NUaGFuKHJlc3VsdCwgbV9vdXQuaW50MzJaZXJvKSk7CkBAIC0yMDI5Niw2ICsyMDU2NSwy
NyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KIAorICAg
IC8vIFRoaXMgb25seSB3b3JrcyBmb3IgaW50cyByaWdodCBub3cuCisgICAgUGF0Y2hwb2ludFZh
bHVlKiBkYXRhTG9nRm9yRGVidWdnaW5nKGNvbnN0IGNoYXIqIHByZWZpeCwgTFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBv
aW50KFZvaWQpOworICAgICAgICByZXN1bHQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IHRy
dWU7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKHZhbHVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86
OnJlZ1QwKSk7CisgICAgICAgIFR5cGUgdmFsdWVUeXBlID0gdmFsdWUtPnR5cGUoKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hS
ZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICBqaXQucHJvYmVE
ZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgaWYg
KHZhbHVlVHlwZSA9PSBJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZp
eCwgY29udGV4dC5ncHI8aW50MzJfdD4oR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3By
PEpTVmFsdWU+KEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBBdmFpbGFiaWxpdHlNYXAm
IGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2
YWlsYWJpbGl0eTsgfQogICAgIAogICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgppbmRleCA3MzE3MTAwOTZjZjNl
MjQ5OGFlNDVkZGEyNmFhODJlNzljZDQ2YTRlLi42OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0
MDlmNGY1MTliMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAt
MTM4LDYgKzEzOCw3IEBAIG1vZHVsZSBEU0wKICNpbmNsdWRlICJHZXRCeVZhbEhpc3RvcnkuaCIK
ICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvbk1vZGVNZXRhZGF0
YS5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9w
Y29kZS5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRC
eUlkU3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0
ZXIvUmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
ci5oCmluZGV4IDQ0NDYzNWU5ODBkOTBhZjgzN2ViZDYzYjk2MmZhZWRlMmVjNTM1MDMuLmQ4Nzlj
OTBiZTMxMTc4NjIzM2Y1MjZiMTgzZWRmMWNiM2M3YmIzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZy
YW1lKik7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxv
Y2sqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTU2NvcGUq
KTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7
CisgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU0NlbGwqKTsKICAg
ICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEVuY29kZWRKU1ZhbHVlKTsK
IAogICAgICAgICBpbnQzMl90IGkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaAppbmRleCBjNTZlZjVlNDU1NGNiMTAz
YWJlYmU3MmU2Mjk4ZjhjNDhhYWQ5ODYwLi41OTNlZjY2NjhkZTJlMDNhNjU5YjM5ZjMxYWY2MGY4
OGMyNzgzOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
UmVnaXN0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L1JlZ2lzdGVySW5saW5lcy5oCkBAIC02Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0
ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCi1BTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9
KEpTT2JqZWN0KiBvYmplY3QpCitBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3Bl
cmF0b3I9KEpTQ2VsbCogb2JqZWN0KQogewogICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShvYmplY3QpKTsKICAgICByZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhYzhiNTEzN2Q4NTM1NDUwNmFlZWRjZWRi
ZDFjNWJkNzcyNTc5YzAxLi40MTU5ZTdlNTA0OTY5MzdlZTFlNTZhZmI3YzIwYWU5Y2YyYTg5ZWU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTg4
OSw3ICs4ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAg
ICAgQmVsb3csIEFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0
aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBpbmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUo
R1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJhbmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCA0MmI4Y2FmNWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0
Li4zYTg0NWFhYjdjMjYxZjI1NTQ2YjYwNzZjNjU5YjYxOGNhOTRmM2YxIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC0zMDgsMTAgKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3By
ZWFkKQogICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBE
RUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJh
YmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpCiAgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAg
ICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCisgICAgICAgIERFRklORV9TTE9X
X09QKGVudW1lcmF0b3JfbmV4dCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMpCiAgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1l
bnRzKQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKQEAg
LTM2NSw2ICszNjMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgIERFRklORV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Ao
b3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisg
ICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCisgICAgICAgIERFRklO
RV9PUChvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1l
cmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcml2YXRl
X25hbWUpCiAgICAgICAgIERFRklORV9PUChvcF9zZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAg
REVGSU5FX09QKG9wX2NoZWNrX3ByaXZhdGVfYnJhbmQpCkBAIC00NzMsMTQgKzQ3NCw2IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dl
dF9mcm9tX2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX09QKG9wX3B1dF90b19hcmd1bWVudHMp
CiAKLSAgICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
Ci0gICAgICAgIERFRklORV9PUChvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkp
Ci0gICAgICAgIERFRklORV9PUChvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAg
ICAgREVGSU5FX09QKG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09Q
KG9wX2dldF9kaXJlY3RfcG5hbWUpCi0gICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZSkKLSAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2VuZXJpY19w
bmFtZSkKLSAgICAgICAgICAgIAogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Rh
aWwpCiAKQEAgLTU3OCw2ICs1NzEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2Fz
ZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAg
IERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NB
U0VfT1Aob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X3ByaXZhdGVfbmFtZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3Nl
dF9wcml2YXRlX2JyYW5kKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfcHJp
dmF0ZV9icmFuZCkKQEAgLTYwOSw3ICs2MDMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVT
bG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX3N1YikKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVt
ZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKQEAg
LTY0MiwxMSArNjM1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Aobm90KQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChzdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobnN0
cmljdGVxKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChnZXRfZGlyZWN0X3BuYW1l
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChnZXRfcHJvdG90eXBlX29mKQotICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHkpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJl
X3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVf
cHJvcGVydHkpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAppbmRleCA0ODdhNWFjNWI4ZTVkOGE5ZDgwYjJjNmQzMDZlMDgxNTIxYjgyODE0Li40ZmM5
YTAyYjcyOWEzMjk0NWI3NTg0Zjc4YTE2MzVkZTZhOGIyZjExIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKQEAgLTY3MCwyMSArNjcwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3BfdW5leHBlY3RlZF9sb2FkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3BDb2RlVHlwZT4KLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJv
cGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1
cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dl
dF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAg
IHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFk
b3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAorICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgorICAgICAgICB2b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjb25zdCBPcGNvZGVUeXBlJiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OworCisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1Bh
dGhGdW5jdGlvblR5cGU+CisgICAgICAgIHZvaWQgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0
eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBPcGNvZGVUeXBlJiwgU2xvd1BhdGhGdW5j
dGlvblR5cGUpOworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaGFzX293
bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpAQCAtNzM1LDcgKzczNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY2ZGIzZjU5YzRhYTRlMDI3YTE1NjExZWRiYmEy
NjFjYWQ4ZWZlZDYuLjliYTEwZWQ2NzcyZmFlYzNmMjBlNjM0YmFiZTE0YWRkOWExMDg5MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTY5Miw0NiArMTY5
MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OwotCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJv
cGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0
cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5T
dHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAor
CiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0
aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUsIG51bGxwdHIpOwpAQCAtMTczOSw3ICsxNzA1LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBl
LCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAKQEAgLTE3NDgsNyArMTcxNCw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwg
SklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9w
ZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9j
aykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewogICAgICAgICBi
eVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAg
ICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5R2VuZXJpYzsKQEAgLTE3NTgsMTcxICsxNzI0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHQKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLQotICAgIC8v
IFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4g
aW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNo
ZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JM
ZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWdu
ZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNl
IHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRH
YikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4
dGVuZGluZyB0aGUgdmFsdWUKLSAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBp
dCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhl
ciB0aGFuIHNpZ24KLSAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRv
IHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dv
cmQocmVnVDEsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdU
MiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwg
cmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmls
ZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5k
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9u
LCBtb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotCi0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExh
YmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLQotICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1f
Ynl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBuZXh0SG90UGF0aCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1l
cmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGJ5VmFsSW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQpPihBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYnlW
YWxJbmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAg
bV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Rp
cmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBj
ZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVz
RWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgLy8g
T3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlz
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIo
cmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJf
dCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1
dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0g
ICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0
KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
LCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qx
LCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
LQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5h
bWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAs
IHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCks
IHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IDRkNzQxMjZiZTFlM2RlNDMw
ZDNhNmQ5Y2I3ZmRkYjZkYzg2ZjdlYjQuLjJhZTNhMDRhM2M1ZmQyZjY5NDAyYzI1YTNlZTNmNzQ0
ODI0Yzk3N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKQEAgLTExNDIsMjI3ICsxMTQyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlw
ZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVt
ZXJhdG9yLCByZWdUMSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVt
aXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5Pihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOwotICAgIAotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMg
bGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVt
aXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBl
LCBudWxscHRyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29k
ZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgCi0gICAgcGF0
Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0K
LSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0KLSAg
ICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAg
ICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAg
ICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50
YWdnZWRWYWx1ZSgpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlW
YWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJU
YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRy
ZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5R2VuZXJpYykpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9p
bmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJh
YmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4
KTsKLSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKLQotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdU
MywgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLQot
ICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRp
bmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8v
IFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92
ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdh
cyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXgg
KHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0
aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAo
YW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBz
aW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5k
IHJhdGhlciB0aGFuIHNpZ24KLSAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFz
aWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5k
MzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRl
eGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3Nl
QXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLQotICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQg
QXJndW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
LSAgICAKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotCi0gICAgTGFiZWwgbmV4dEhv
dFBhdGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5k
KEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFi
bGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLSAg
ICAKLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHByb3Bl
cnR5LCByZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MiksIGJ5VmFsSW5mbyk7Ci0KLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21w
aWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxs
OwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVj
dFBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNl
IGlzIGEgY2VsbAotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAg
IC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDIp
OwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9m
TGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkp
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVnVDApOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAg
ICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgIAotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIG5lZzMyKHJlZ1QyKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQzMihC
YXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBs
b2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVn
VDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwotICAg
IGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9
IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5k
cy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMik7Ci0KLSAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91
bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJv
dW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDAp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMik7Ci0gICAg
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7
Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDE1ZTFkMzQ1NzliNmQ0YzhjMTcwZDIzNTBj
NmMzNjQ0M2ZmZWE0MTUuLmQ1OTQ1NjIyNTg4OTE1ZTc4ODY5OTRkMjZiMDhjOTY3MjNmNzRhY2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNp
bmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgor
I2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgi
CkBAIC04NiwxMCArODcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBP
cGNvZGVUeXBlPgordm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNv
ZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKQEAgLTEzNiw2ICsxMzcsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICB9CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZh
bFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSwgaXRlcik7Cit9
CisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxK
SVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0
b3IoVk0mIHZtKQogewpAQCAtMzU0MCw2ICszNTQ2LDEzNiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBi
YWRUeQogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXgg
PSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBi
eXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CisKKyAgICBh
dXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIG9yOChy
ZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOwor
ICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCisgICAgSnVtcCBp
c05vdE5hbWVkTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDApKTsKKworICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOworICAgIEp1bXAgc3RydWN0
dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisg
ICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3In
cyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAg
SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5
T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklu
bGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVn
VDEpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVz
dWx0R1BSKTsKKworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIE90aGVy
d2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBy
ZWdUMCk7CisgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1Qx
KTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGludDMyX3Qgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJm
bHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAg
bG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSksIHJlc3VsdEdQUik7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisg
ICAgc3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21h
dGNoKSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKworICAgIGlzTm90TmFtZWRN
b2RlLmxpbmsodGhpcyk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSk7CisgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKworICAgIGlzTm90SW5kZXhlZC5s
aW5rKHRoaXMpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDIsIHByb2ZpbGUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBy
ZWdUMSk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJs
b2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBD
YWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdU
Mik7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29kZTo6
dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAg
bV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7CisKKyAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKKwor
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQ
UikpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdldEJ5VmFsPigpLCBpdGVyKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE9wY29k
ZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51
bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBn
ZW5lcmFsQ2FzZSkKK3sKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Cisg
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJl
Z2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKKyAgICBvcjgocmVn
VDAsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1l
cmF0b3IsIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgc2xvd0Nhc2Vz
LmxpbmsodGhpcyk7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgZ2VuZXJhbENhc2UpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
CisKKyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckluQnlWYWw+KCksIHNsb3dfcGF0aF9l
bnVtZXJhdG9yX2luX2J5X3ZhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
aGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlv
biwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKSwg
c2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IDU4ZTVkNTJmZTVi
MDhhZTI5ZTNlNWRkZGUzZDc0Njc5NjdmMjMwMTkuLjI1N2NhZWEyNzg2ODgzYmJhMDhjN2EyYzRi
MjM4ZDUwNDRlNzI5NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtMTUwNSw2ICsxNTA1LDI1IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0
QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7CiAKKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxs
IHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJh
dG9yX2luX2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJv
cGVydHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCAzN2I2ZGYzMGYxMGMz
YTAwMWE1NjU1ZWExYmIxZGI1OTU3M2NmNjA4Li5lNzE4M2E3MmEzNjhmMWEyODA0Njg0ZDJiMDc2
NDdmMjIwNjhmMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xOTkyLDE5ICsxOTkyLDE0IEBAIHNsb3dQYXRoT3Ao
Y3JlYXRlX2dlbmVyYXRvcikKIHNsb3dQYXRoT3AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKIHNs
b3dQYXRoT3AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQogc2xvd1BhdGhPcChkZWZpbmVfZGF0
YV9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQotc2xvd1Bh
dGhPcChlbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKIHNsb3dQYXRoT3AoZ2V0X2J5X3ZhbF93
aXRoX3RoaXMpCi1zbG93UGF0aE9wKGdldF9kaXJlY3RfcG5hbWUpCi1zbG93UGF0aE9wKGdldF9l
bnVtZXJhYmxlX2xlbmd0aCkKIHNsb3dQYXRoT3AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi1z
bG93UGF0aE9wKGhhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi1zbG93UGF0aE9wKGhh
c19lbnVtZXJhYmxlX3Byb3BlcnR5KQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX25leHQpCitzbG93
UGF0aE9wKGVudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9pbl9i
eV92YWwpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKIAogaWYgbm90
IEpTVkFMVUU2NAotICAgIHNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3Bl
cnR5KQotICAgIHNsb3dQYXRoT3AoaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xv
d1BhdGhPcChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgc2xvd1BhdGhPcChnZXRfcHJvdG90
eXBlX29mKQogZW5kCiAKQEAgLTIwMjEsNyArMjAxNiw2IEBAIHNsb3dQYXRoT3AocmVzb2x2ZV9z
Y29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiBzbG93UGF0aE9wKHNwcmVhZCkK
IHNsb3dQYXRoT3Aoc3RyY2F0KQogc2xvd1BhdGhPcCh0aHJvd19zdGF0aWNfZXJyb3IpCi1zbG93
UGF0aE9wKHRvX2luZGV4X3N0cmluZykKIHNsb3dQYXRoT3AodHlwZW9mKQogc2xvd1BhdGhPcCh0
eXBlb2ZfaXNfb2JqZWN0KQogc2xvd1BhdGhPcCh0eXBlb2ZfaXNfZnVuY3Rpb24pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CmluZGV4IGJkODg1NWViZmQ2ZmMxOWIxNWMxYjU4ODZkNGZhNTU2NDM4MmQ4N2QuLjhhNWY3ZDIz
ZTY0NzYzYmEyNTllMWIyYzVkODdmOGQxNmI4MjlhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0zMTQxLDM0
ICszMTQxLDYgQEAgbGxpbnRPcChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCwgT3BMb2dTaGFk
b3dDaGlja2VuVGFpbCwgbWFjcm8gKHNpemUsIGdldCwgZGkKICAgICBkaXNwYXRjaCgpCiBlbmQp
CiAKLW1hY3JvIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCBy
ZXR1cm4sIHNsb3dQYXRoQ2FsbCkKLSAgICBnZXQobV9iYXNlLCB0MCkKLSAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKLSAgICBidHFueiB0MSwgbm90Q2VsbE1hc2ssIC5z
bG93UGF0aAotCi0gICAgbG9hZFZhcmlhYmxlKGdldCwgbV9lbnVtZXJhdG9yLCB0MCkKLSAgICBs
b2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDFdLCB0MQotICAgIGJpbmVxIHQxLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Om1fY2FjaGVkU3RydWN0dXJlSURbdDBdLCAuc2xvd1BhdGgKLQot
ICAgIHJldHVybihWYWx1ZVRydWUpCi0KLS5zbG93UGF0aDoKLSAgICBjYWxsU2xvd1BhdGgoc2xv
d1BhdGhDYWxsKQotICAgIGRpc3BhdGNoKCkKLWVuZAotCi1sbGludE9wV2l0aFJldHVybihvcF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVy
ZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGhhc1N0
cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xvd19w
YXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdp
dGhSZXR1cm4ob3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSGFzT3duU3RydWN0dXJl
UHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3Ry
dWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3Bh
dGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi1lbmQpCi0KLWxsaW50T3BXaXRoUmV0dXJu
KG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BJblN0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1w
bChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xvd19wYXRoX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eSkKLWVuZCkKLQogb3AoZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludCwg
bWFjcm8gKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKICAgICBsb2FkcCBDb2RlQmxv
Y2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IDExMjk1NGJiOWI2ZTUwMTM2ODgzYjc0
NTZjYjFlODMxOGZiNWE1MTEuLmIxNWQzNTQ4MDE5YjcyZWQxZDY4Mzc3NTNmMzAyNjAyNjBlYTNk
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcApAQCAtOTYyLDE2MSArOTYyLDEzNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX3RvX3Byb3BlcnR5X2tleSkKICAgICBSRVRVUk4oR0VUX0MoYnl0ZWNvZGUu
bV9zcmMpLmpzVmFsdWUoKS50b1Byb3BlcnR5S2V5VmFsdWUoZ2xvYmFsT2JqZWN0KSk7CiB9CiAK
LUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVu
Z3RoKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlf
ZW51bWVyYXRvcikKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpOwotICAgIEpTVmFsdWUgZW51bWVyYXRvclZhbHVlID0g
R0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKGVudW1lcmF0b3JWYWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBSRVRVUk4oanNOdW1iZXIoMCkpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAg
ICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTih2bS5l
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CiAKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oZW51
bWVyYXRvclZhbHVlLmFzQ2VsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50
b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgUkVU
VVJOKGpzTnVtYmVyKGVudW1lcmF0b3ItPmluZGV4ZWRMZW5ndGgoKSkpOworICAgIFJFVFVSTihw
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVG
SU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jf
bmV4dCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BFbnVtZXJhdG9yTmV4dD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jayk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jh
c2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElP
TigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNW
YWx1ZSgpOwotICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmUoYmFz
ZS0+c3RydWN0dXJlKHZtKSk7Ci0gICAgQVNTRVJUKHByb3BlcnR5LmlzVUludDMyQXNBbnlJbnQo
KSk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xv
YmFsT2JqZWN0LCBwcm9wZXJ0eS5hc1VJbnQzMkFzQW55SW50KCkpKSk7Ci19CisgICAgUmVnaXN0
ZXImIG1vZGVSZWdpc3RlciA9IEdFVChieXRlY29kZS5tX21vZGUpOworICAgIFJlZ2lzdGVyJiBp
bmRleFJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpOworICAgIFJlZ2lzdGVyJiBuYW1l
UmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpOwogCi1KU0NfREVGSU5FX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0
eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhi
eXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENI
RUNLX0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5n
KCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRl
Y29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgaWYgKGJhc2UtPnN0
cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAg
ICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKLSAgICBKU1N0cmluZyogc3Ry
aW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5n
LT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAg
ICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSkpKTsKLX0KKyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KG1vZGVSZWdpc3Rlci5qc1ZhbHVlKCkuYXNVSW50
MzIoKSk7CisgICAgdWludDMyX3QgaW5kZXggPSBpbmRleFJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJ
bnQzMigpOwogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25f
c3RydWN0dXJlX3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIEpTVmFsdWUgYmFzZSA9
IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1
ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS5pc0NlbGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUodm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0g
ICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlmCisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBi
YXNlVmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKCFi
YXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNl
VmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKKyAg
ICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZS0+c3RydWN0
dXJlSUQoKSk7CiAKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsK
LSAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJv
cGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBKU1N0
cmluZyogbmFtZSA9IGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9iamVjdCwgYmFzZSwg
aW5kZXgsIG1vZGUpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgUkVUVVJOKGpzQm9v
bGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHBy
b3BlcnR5TmFtZSkpKTsKKyAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0
aWNfY2FzdDx1aW50OF90Pihtb2RlKTsKKyAgICBtb2RlUmVnaXN0ZXIgPSBqc051bWJlcihzdGF0
aWNfY2FzdDx1aW50OF90Pihtb2RlKSk7CisgICAgaW5kZXhSZWdpc3RlciA9IGpzTnVtYmVyKGlu
ZGV4KTsKKyAgICBuYW1lUmVnaXN0ZXIgPSBuYW1lID8gbmFtZSA6IGpzTnVsbCgpOworICAgIEVO
RCgpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51
bWVyYXRvcl9nZXRfYnlfdmFsKQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VU
X0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFz
Q2VsbCgpKTsKLSAgICBpZiAoYmFzZS5pc0NlbGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUodm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAgICAg
IFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlmCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9
IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
cHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0
aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2UsIGFzU3RyaW5nKHByb3BlcnR5KSkpKTsK
LX0KKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOwor
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7
CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAg
IGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4o
R0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRh
Lm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworCisg
ICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7
CisgICAgdW5zaWduZWQgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFz
SW50MzIoKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOiB7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5
UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJ
RCgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSkpOworICAgICAgICB9CisgICAgICAg
IGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGU6IHsKKyAgICAgICAgICAg
IGlmIChiYXNlVmFsdWUuaXNDZWxsKCkgJiYgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJ
RCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSdsbCBvbmx5IG1hdGNoIHRoZSBzdHJ1Y3R1cmUgSUQgaWYgdGhlIGJhc2UgaXMgYW4g
b2JqZWN0LgorICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IGVudW1lcmF0b3ItPmVuZFN0
cnVjdHVyZVByb3BlcnR5SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVE
KGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+Z2V0RGlyZWN0KGluZGV4IDwgZW51bWVyYXRvci0+Y2Fj
aGVkSW5saW5lQ2FwYWNpdHkoKSA/IGluZGV4IDogaW5kZXggLSBlbnVtZXJhdG9yLT5jYWNoZWRJ
bmxpbmVDYXBhY2l0eSgpICsgZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVk
TW9kZVN0cnVjdHVyZU1pc21hdGNoKTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAg
ICB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFi
bGVfcHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wSGFzRW51bWVyYWJsZVByb3BlcnR5PigpOwotICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0Mo
Ynl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBD
SEVDS19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0g
ICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJv
cGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSk7Ci19CisgICAgICAgIGNhc2UgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTogeworICAgICAgICAgICAgaWYgKGJh
c2VWYWx1ZS5pc0NlbGwoKSAmJiBtb2RlICE9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFt
ZWRNb2RlKQorICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVT
dHJ1Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAgICAgICAg
ICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFt
ZSkuanNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50
b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIC8vIFRPRE8gRG9lcyB0aGlz
IGFjdHVhbGx5IGV2ZXIgdGhyb3c/IElzbid0IHN0cmluZyBiYWNrZWQgYnkgYSBVVUlEPworICAg
ICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQo
YmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpOworICAgICAgICB9CiAK
LUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkK
LXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXREaXJlY3RQ
bmFtZT4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSku
anNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuanNWYWx1ZSgpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1N0
cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJ
T04oKTsKLSAgICBSRVRVUk4oYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFt
ZSkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH07CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcikKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKTsKICAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIGlmIChiYXNl
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVy
dHlOYW1lRW51bWVyYXRvcigpKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFk
YXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50
MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8
dWludDhfdD4obW9kZSk7CiAKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVj
dChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIGlmIChhdXRv
KiBiYXNlID0gYmFzZVZhbHVlLmdldE9iamVjdCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkg
PT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgIFJFVFVSTihq
c0Jvb2xlYW4odHJ1ZSkpOwogCi0gICAgUkVUVVJOKHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xv
YmFsT2JqZWN0LCBiYXNlKSk7Ci19Ci0KLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXND
ZWxsKCkpOwotICAgIHVpbnQzMl90IGluZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFs
dWUoKS5hc1VJbnQzMkFzQW55SW50KCk7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFu
KGJhc2UtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpz
VmFsdWUoKS5hc1VJbnQzMigpKSkpOworICAgIH0KIAotICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5h
bWUgPSBudWxscHRyOwotICAgIGlmIChpbmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXgoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVy
dHlOYW1lQXRJbmRleChpbmRleCk7Ci0gICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5
TmFtZSA6IGpzTnVsbCgpKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5
dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN0cmlu
ZywgJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlKSkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKK0pTQ19ERUZJTkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQog
ewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JH
ZW5lcmljUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1l
cmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0
ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpOworICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0
byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9k
ZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVj
b2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOwogCi0gICAgSlNTdHJp
bmcqIHByb3BlcnR5TmFtZSA9IG51bGxwdHI7Ci0gICAgaWYgKGVudW1lcmF0b3ItPmVuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXgoKSA8PSBpbmRleCAmJiBpbmRleCA8IGVudW1lcmF0b3ItPmVuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4KCkpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9IGVudW1lcmF0b3It
PnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOwotICAgIFJFVFVSTihwcm9wZXJ0eU5hbWUgPyBw
cm9wZXJ0eU5hbWUgOiBqc051bGwoKSk7Ci19CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRl
Y29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNl
VmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9y
LT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVl
KSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3Ry
aW5nKQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvSW5k
ZXhTdHJpbmc+KCk7Ci0gICAgSlNWYWx1ZSBpbmRleFZhbHVlID0gR0VUKGJ5dGVjb2RlLm1faW5k
ZXgpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQoaW5kZXhWYWx1ZS5pc1VJbnQzMkFzQW55SW50KCkp
OwotICAgIFJFVFVSTihqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXhWYWx1
ZS5hc1VJbnQzMkFzQW55SW50KCkpLnN0cmluZygpKSk7CisgICAgICAgIGlmIChtb2RlID09IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4o
anNCb29sZWFuKGJhc2UtPmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2Rl
Lm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpKSkpOworICAgIH0KKworICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUo
KSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxP
YmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIFJFVFVSTihqc0Jvb2xlYW4ob2Jq
ZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHByb3Bl
cnR5TmFtZSkpKTsKIH0KIAogSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9w
cm9maWxlX3R5cGVfY2xlYXJfbG9nKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuaAppbmRleCBkOGQxNTAxZmIzNWJhYzI3OTRjNmQ5NDEwMjcxYmI2
OGY0Y2MwNTdlLi5hNWUwMTVkNTNhNjllNjA1M2FmNGRiYjMxYjJjOGYyNTdjMGRiMWUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaApAQCAt
MjU0LDE3ICsyNTQsMTEgQEAgSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
aXNfY29uc3RydWN0b3IpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
c3RyY2F0KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3ByaW1p
dGl2ZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0
eV9rZXkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1l
cmFibGVfbGVuZ3RoKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19E
RUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5
KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0
dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2lu
X3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsKLUpTQ19ERUNMQVJF
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk7Ci1K
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOwor
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsK
K0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9y
X2luX2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVt
ZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfcHJvZmlsZV90eXBlX2NsZWFyX2xvZyk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF91bnJlYWNoYWJsZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKaW5k
ZXggZTJjYTE2MmUwYjU0ZTI1Y2YwNjllZWE4Yzg3ZTFlZWEyZTRjZDViZS4uMWIwMzEzMGYwYTVj
MDdjMzM1Y2M1ODU2ODNiYjY0NWVlNTNlMDhiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcApAQCAtOTAsNyArOTAs
NiBAQCBTcGVjdWxhdGVkVHlwZSBGaWxlQmFzZWRGdXp6ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbklu
dGVybmFsKENvZGVCbG9jayogY29kZUJsb2NrLAogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgog
ICAgIGNhc2Ugb3BfY29uc3RydWN0OgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcAppbmRleCBmMTM5ZDRh
NDQ3YjI3MGY5ZWQzM2Y3ZGZkMzVlMDJhZmZjMzFjNzAzLi5jMjZjMDAzNzQwMzkwYzdiMzgzNjA3
NjBlM2MyMjljMWZkMWI4OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBP
cGNvZGVJRCBGaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2U6Om9wY29kZUFsaWFzRm9yTG9va3VwS2V5
KGNvbnN0IE9wY29kZUlEJiBvcGNvZAogewogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9jYWxsX3Zh
cmFyZ3MgfHwgb3Bjb2RlSWQgPT0gb3BfY2FsbF9ldmFsIHx8IG9wY29kZUlkID09IG9wX3RhaWxf
Y2FsbCB8fCBvcGNvZGVJZCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKICAgICAgICAgcmV0dXJu
IG9wX2NhbGw7Ci0gICAgaWYgKG9wY29kZUlkID09IG9wX2dldF9kaXJlY3RfcG5hbWUgfHwgb3Bj
b2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCisgICAgaWYgKG9wY29kZUlkID09IG9w
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCB8fG9wY29kZUlkID09IG9wX2dldF9ieV92YWxfd2l0aF90
aGlzKQogICAgICAgICByZXR1cm4gb3BfZ2V0X2J5X3ZhbDsKICAgICBpZiAob3Bjb2RlSWQgPT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MpCiAgICAgICAgIHJldHVybiBvcF9jb25zdHJ1Y3Q7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXgg
MjRmY2YwODE1ZTI1MDQ5NWUwMzE3OTRhMDZlNGIzMTA1Yzc4NGZiNC4uMTVmNWIwNjRlY2JmYzY1
OGE5OTBkMmViNTk2MzViZjJiZGJlODg4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTQ2MSw2ICsxNDYxLDEwIEBAIGNhcGl0
YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJl
RmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgIH0pOwogI2VuZGlmCiAKKyAgICBtX2xpbmtUaW1l
Q29uc3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50OjplbXB0eVBy
b3BlcnR5TmFtZUVudW1lcmF0b3IpXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpT
Q2VsbD4mIGluaXQpIHsKKyAgICAgICAgaW5pdC5zZXQoaW5pdC52bS5lbXB0eVByb3BlcnR5TmFt
ZUVudW1lcmF0b3IoKSk7CisgICAgfSk7CisKICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlUHJvZmls
ZXJzT25HbG9iYWxPYmplY3QoKSkgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAg
ICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sICJfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIiKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZt
LCB0aGlzLCAxLCBTdHJpbmcoKSwgZW5hYmxlU2FtcGxpbmdQcm9maWxlciksIFByb3BlcnR5QXR0
cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVy
dHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCmluZGV4IDIxYzcwYTI3
YjY5MWJlMDU2OTBhMmZhZTc3YzY5OTEyYWVlYzExOWQuLmNmMGE0YTUxMzRmODJkZWU5OWFhYjI1
YjY2MzU5OGU1N2RjZTJjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcApAQCAtNDksMTMgKzQ5LDE5
IEBAIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
cmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVp
bnQzMl90IGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMs
IFdyaXRlQmFycmllcjxKU1N0cmluZz4qIHByb3BlcnR5TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHBy
b3BlcnR5TmFtZXNTaXplKQogICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9w
ZXJ0eU5hbWVzQnVmZmVyKQogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUgPyBz
dHJ1Y3R1cmUtPmlkKCkgOiAwKQogICAgICwgbV9pbmRleGVkTGVuZ3RoKGluZGV4ZWRMZW5ndGgp
CiAgICAgLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgobnVtYmVyU3RydWN0dXJlUHJvcGVy
dGllcykKICAgICAsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgocHJvcGVydHlOYW1lc1NpemUp
CiAgICAgLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aW5s
aW5lQ2FwYWNpdHkoKSA6IDApCisgICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3Bl
cnR5TmFtZXNCdWZmZXIpCiB7CisgICAgaWYgKG1faW5kZXhlZExlbmd0aCkKKyAgICAgICAgbV9t
b2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGU7CisgICAgaWYg
KG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOworICAgIGlmIChtX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4IC0gbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVT
ZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTsKIH0KIAogdm9pZCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUmVmUHRyPFBy
b3BlcnR5TmFtZUFycmF5RGF0YT4mJiBpZGVudGlmaWVycykKQEAgLTE0OCw0ICsxNTQsNzAgQEAg
dm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogYmFzZSwgUHIKICAgICB9CiB9CiAKK0pTU3RyaW5nKiBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCYgaW5kZXgsIE1vZGUmIG1vZGUsIGJvb2wgc2hvdWxk
QWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
QVNTRVJUKGluZGV4ZWRMZW5ndGgoKSB8fCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpOworCisgICAg
aW5kZXgrKzsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEluaXRNb2RlOiB7CisgICAg
ICAgIG1vZGUgPSBJbmRleGVkTW9kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGU6IHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpICYmICFi
YXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpIHsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAg
aW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwor
CisgICAgICAgIGlmIChpbmRleCA8IGluZGV4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVy
biBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nID8ganNTdHJpbmcodm0sIElkZW50aWZp
ZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSkgOiBudWxscHRyOworCisgICAgICAgIGlmICgh
c2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgbW9kZSA9IE5hbWVkTW9kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFt
ZWRNb2RlOgorICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTog
eworICAgICAgICBKU1N0cmluZyogbmFtZSA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgaWYgKGluZGV4IDwgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYm
IGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gY2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCBuYW1lLT52YWx1ZShnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIHNjb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBpZiAoYmFzZS0+aGFzRW51bWVyYWJsZVByb3Bl
cnR5KGdsb2JhbE9iamVjdCwgaWQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBuYW1l
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgc2Nv
cGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgICAgICBpZiAoaW5kZXggPj0gZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCgpICYmIGluZGV4IDwgc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAg
ICAgICAgICAgbW9kZSA9IEdlbmVyaWNNb2RlOworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
cGVydHlOYW1lRW51bWVyYXRvci5oCmluZGV4IDAyMDExZDQxYzdmNjZkYWQ4ODNhZThkNzcwYjVk
M2QyODZjZDUwODcuLmEwMDliYjI5MDFiNGFhMTcwZDczOGE1OTg2MGEwOWExNTZkMjA0NWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCi0j
aW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKQEAgLTM3LDYgKzM3LDE3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNl
ID0gSlNDZWxsOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKKyAgICBlbnVt
IE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgSW5pdE1vZGUgPSAwLAorICAgICAgICBJbmRleGVk
TW9kZSA9IDEgPDwgMCwKKyAgICAgICAgTmFtZWRNb2RlID0gMSA8PCAxLAorICAgICAgICBHZW5l
cmljTW9kZSA9IDEgPDwgMiwKKyAgICAgICAgLy8gUHJvZmlsaW5nIE9ubHkKKyAgICAgICAgSGFz
U2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoID0gMSA8PCAzLAorICAgIH07CisKKyAgICBz
dGF0aWMgY29uc3RleHByIHVpbnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9k
ZSA8PCAxKSAtIDE7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VB
Y2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkK
ICAgICB7CkBAIC03NCwxNiArODUsMjAgQEAgcHVibGljOgogICAgIHVpbnQzMl90IGVuZEdlbmVy
aWNQcm9wZXJ0eUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lbmRHZW5lcmljUHJvcGVydHlJbmRl
eDsgfQogICAgIHVpbnQzMl90IGNhY2hlZElubGluZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4g
bV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsgfQogICAgIHVpbnQzMl90IHNpemVPZlByb3BlcnR5TmFt
ZXMoKSBjb25zdCB7IHJldHVybiBlbmRHZW5lcmljUHJvcGVydHlJbmRleCgpOyB9CisgICAgdWlu
dDMyX3QgbW9kZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZVNldDsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3QgY2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZUlEKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhlZExlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1faW5kZXhlZExlbmd0aCk7IH0KICAg
ICBzdGF0aWMgcHRyZGlmZl90IGVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2VuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBlbmRHZW5lcmljUHJv
cGVydHlJbmRleE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkpOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBtb2RlU2V0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9tb2RlU2V0KTsgfQogICAgIHN0YXRp
YyBwdHJkaWZmX3QgY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpCiAgICAgewogICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9w
cm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKKyAgICBKU1N0cmluZyogY29tcHV0ZU5leHQoSlNHbG9i
YWxPYmplY3QqLCBKU09iamVjdCogYmFzZSwgdWludDMyX3QmIGN1cnJlbnRJbmRleCwgTW9kZSYs
IGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyA9IHRydWUpOworCiAgICAgREVD
TEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKQEAgLTkyLDEzICsxMDcsMTQgQEAgcHJp
dmF0ZToKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50
MzJfdCwgdWludDMyX3QsIFdyaXRlQmFycmllcjxKU1N0cmluZz4qLCB1bnNpZ25lZCk7CiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+JiYp
OwogCi0gICAgQXV4aWxpYXJ5QmFycmllcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9w
ZXJ0eU5hbWVzOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVD
aGFpbjsKICAgICBTdHJ1Y3R1cmVJRCBtX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIHVpbnQzMl90
IG1faW5kZXhlZExlbmd0aDsKICAgICB1aW50MzJfdCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXg7CiAgICAgdWludDMyX3QgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJf
dCBtX2NhY2hlZElubGluZUNhcGFjaXR5OworICAgIHVpbnQzMl90IG1fbW9kZVNldCB7IDAgfTsK
KyAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5
TmFtZXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWlu
OwogfTsKIAogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCos
IEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwg
dWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpOwpAQCAtMTM0LDcgKzE1MCwxMCBAQCBp
bmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVz
ID0gMDsKICAgICB9CiAKLSAgICBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjcmVhdGUodm0sIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMsIGluZGV4ZWRM
ZW5ndGgsIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdURk1vdmUocHJvcGVydHlOYW1lcykp
OworICAgIGlmICghaW5kZXhlZExlbmd0aCAmJiAhcHJvcGVydHlOYW1lcy5zaXplKCkpCisgICAg
ICAgIGVudW1lcmF0b3IgPSB2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKKyAgICBl
bHNlCisgICAgICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0
ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwg
bnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CiAgICAg
aWYgKCFpbmRleGVkTGVuZ3RoICYmIHN1Y2Nlc3NmdWxseU5vcm1hbGl6ZWRDaGFpbiAmJiBzdHJ1
Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzID09IHN0cnVjdHVyZSkgewogICAgICAgICBl
bnVtZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5wcm90b3R5
cGVDaGFpbihnbG9iYWxPYmplY3QsIGJhc2UpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2Fu
Q2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtKSkKQEAgLTE0Myw0ICsxNjIsNiBAQCBpbmxp
bmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBlbnVtZXJhdG9yOwogfQogCit1c2luZyBF
bnVtZXJhdG9yTWV0YWRhdGEgPSBzdGQ6OnVuZGVybHlpbmdfdHlwZV90PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TW9kZT47CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFn
ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3Jl
YXRpbmdGdXp6ZXJBZ2VudC5jcHAKaW5kZXggY2RjZmE5OWQ0OWE2OTE3NDAxZDY4MzE2OGJhMTlh
YmRlYmFlOWE0ZC4uYzdhOGUzMWY3ZTQ3YmQ2OTExZmU0YWM0NWZkZjc3ZDY4Mzk2NDEwNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVh
dGluZ0Z1enplckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgU3BlY3Vs
YXRlZFR5cGUgUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50OjpnZXRQcmVkaWN0aW9u
SW50ZXJuYWwoQ29kZUJsb2MKICAgICBjYXNlIG9wX2dldF9ieV9pZDoKICAgICBjYXNlIG9wX2dl
dF9ieV9pZF93aXRoX3RoaXM6CiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKLSAg
ICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9i
eV92YWw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFy
YXJnczoKICAgICBjYXNlIG9wX2NhbGw6CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBi
L0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IGRhYWNmOTdmOTU4Yzg1ZGM5ZjUyZDRjMmUyZTI4ZTMy
N2I4ODgxZWQuLjMxNzc0MmQ1MmM0MDkxNDNlYTM3MWFkMGEyYTZkMjZjNWFjY2M1M2YgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTggQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5j
b20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0ZWNv
ZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzk4
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3Ry
ZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzOgorICAgICAgICAodGVzdCk6CisgICAgICAgICogc3Ry
ZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanM6CisgICAgICAgICogc3RyZXNzL2Zv
ci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qczoKKyAgICAgICAgKiBzdHJlc3MvZm9yLWlu
LXRlc3RzLmpzOgorICAgICAgICAqIHN0cmVzcy9oYXMtb3duLXByb3BlcnR5LXN0cnVjdHVyZS1m
b3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qczoKKyAgICAgICAgKHRlc3Q1KToKKwogMjAyMS0wNy0y
NSAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgUGFy
dGx5IGltcGxlbWVudCBGdW5jdGlvbi5wcm90b3R5cGUue2NhbGxlcixhcmd1bWVudHN9IHJlZmxl
Y3Rpb24gcHJvcG9zYWwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1hcnJheS1t
b2RlLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKaW5kZXggOTAwMmI5
NDBhZDU5NmI3NTQ4MWYwMjU0MGU1MGFjOWU5Y2JiNTA4OC4uM2QyZGE2MzlkODEwZjhhYjk3YTNl
MjY5ZmFlMTA3MjEwYjVjZTc1YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFy
cmF5LW1vZGUuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKQEAg
LTI2LDggKzI2LDkgQEAKIHZhciBmdW5jQXJnQW5kQm9keVN0ciA9CiAiKGFycikgeyIgKyAiXG4i
ICsKICIgICAgdmFyIHN1bSA9IDA7IiArICJcbiIgKwotIiAgICBmb3IgKHZhciBpIGluIGFyciki
ICsgIlxuIiArCisiICAgIGZvciAodmFyIGkgaW4gYXJyKSB7IiArICJcbiIgKwogIiAgICAgICAg
c3VtICs9IGFycltpXTsiICsgIlxuIiArCisiICAgIH0gIiArCiAiICAgIHJldHVybiBzdW07IiAr
ICJcbiIgKwogIn0iOwogCkBAIC03NSw2ICs3Niw3IEBAIGZ1bmN0aW9uIHRlc3QobmFtZSwgZGF0
YSkgewogCiAgICAgICAgIGlmICgoYWN0dWFsICE9IGV4cGVjdGVkKSAmJiAoYWN0dWFsICE9IHBy
ZXZpb3VzUmVzdWx0KSkgewogICAgICAgICAgICAgcHJpbnQoIkZBSUw6ICIgKyBuYW1lICsgIjog
ZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZCArICIsIGFjdHVhbDogIiArIGFjdHVhbCArICIsIHN0YXJ0
aW5nIEAgbG9vcCBpdGVyYXRpb24gIiArIGkpOworICAgICAgICAgICAgJHZtLmJyZWFrcG9pbnQo
KTsKICAgICAgICAgICAgIHByZXZpb3VzUmVzdWx0ID0gYWN0dWFsOwogICAgICAgICAgICAgZmFp
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIG51bWJlck9mRmFpbHVyZXMrKzsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMgYi9KU1Rlc3Rz
L3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCmluZGV4IDgzMTE1YjQ5NzNj
ODM3Y2E2ZDNmZjA2ZWE2ZmYxMzFjMzQ1MTFlNjIuLjA5ZjgxZDk1NjUzYmFhMTUwNmU1ZGRhMDYy
ZmEyZTM1ZjE1OGJmMzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJl
YXNzaWduZWQtbGF0ZXIuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3Np
Z25lZC1sYXRlci5qcwpAQCAtMTQsNSArMTQsNSBAQCBub0lubGluZShmb28pOwogZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyh7MDowLCAxOjEs
IGE6MiwgYjozfSk7CiAgICAgaWYgKHJlc3VsdCAhPSA3KQotICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJl
c3VsdDogIiArIHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4t
ZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRl
LWR1cmluZy1pdGVyYXRpb24uanMKaW5kZXggNWFkMzU2NmZkMGQzNjEwMjVhMWU1ZjMzNjVkMGJh
ZDM3NGQ1MTIwMi4uZDExNDY5MzFiMTQ3NWQ4OGM0NzM5NDllYWRhMmRkYTBmZDM5MzBhNSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpz
CisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcwpA
QCAtMTIsOCArMTIsOSBAQAogICAgIH07CiAgICAgbm9JbmxpbmUoZm9vKTsKICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAgaWYgKGZvbygpICE9PSAiMTIzNSIp
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGZvbygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAiMTIzNSIpCisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQgZ290OiAiICsgcmVzdWx0KTsKICAgICB9
CiAgICAgZm9vKG51bGwpOwogfSkoKTsKQEAgLTM2LDggKzM3LDkgQEAKICAgICB9OwogICAgIG5v
SW5saW5lKGZvbyk7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAg
ICAgIGlmIChmb28oKSAhPT0gInh6IikKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFk
IHJlc3VsdCIpOworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgICAgIGlmIChyZXN1
bHQgIT09ICJ4eiIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIg
KyByZXN1bHQpOwogICAgIH0KIH0pKCk7CiAoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMu
anMKaW5kZXggMmU0ZDZiODQyYTI0MmViNzE1OTg2MDBlZTUyOGFlMTRiOWM4OWNlNC4uNjg5NjA5
ODE4NTFlZTM0NGUzYWE3ZjUzMjMxNTFiMjI1MWY2NWQ5MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9z
dHJlc3MvZm9yLWluLXRlc3RzLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5q
cwpAQCAtMTA1LDYgKzEwNSw3IEBAIGZ1bmN0aW9uIHNob3VsZFRocm93U3ludGF4RXJyb3Ioc2Ny
aXB0KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKICAgICB9
CiB9KSgpOworCiAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGZvbyA9IGZ1bmN0aW9uKGEsIGIpIHsK
ICAgICAgICAgZm9yICh2YXIgcCBpbiBiKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9o
YXMtb3duLXByb3BlcnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qcyBiL0pT
VGVzdHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJl
Y3RuZXNzLmpzCmluZGV4IDk5YzU5YWMxMDU2OGNlOGE3OTA4NTIyOTgyMDZmZGM3ZTBlMGY4OWMu
LmUwYWRlMDcxYTJlNGI4ZDAyNzhkOTVjYzkzM2UyNGYxOGJiZWUwNTggMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJl
Y3RuZXNzLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJl
LWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzCkBAIC0xMzIsNyArMTMyLDEwIEBAIGZ1bmN0aW9u
IHRlc3Q1KCkgewogICAgIG8uX19wcm90b19fID0gcDsKIAogICAgIGZvciAobGV0IGkgPSAwOyBp
IDwgMTAwMDsgKytpKSB7Ci0gICAgICAgIGFzc2VydChjb3VudChvKSA9PT0gMCk7CisgICAgICAg
IHZhciBjID0gY291bnQobyk7CisgICAgICAgIGlmIChjKQorICAgICAgICAgICAgcHJpbnQoYyk7
CisgICAgICAgIGFzc2VydChjID09PSAwKTsKICAgICB9CiB9CiB0ZXN0NSgpOwo=
</data>
<flag name="commit-queue"
          id="456937"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434442</attachid>
            <date>2021-07-28 11:26:20 -0700</date>
            <delta_ts>2021-07-28 12:03:58 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728142619.patch</filename>
            <type>text/plain</type>
            <size>343357</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjkyOGQxOWRlMzIxY2Uw
NjhiNWFkOTIxZWIwNGFiNzIzZmEzZDVmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQzMDQs
NiArNDMwOCw0OSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBicmVhazsKICAg
ICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgaWYg
KGFycmF5TW9kZS5pc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
OworICAgICAgICBlbHNlIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSB8fCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQorICAgICAgICAgICAgY2xvYmJlcldvcmxkKCk7CisK
KyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCeXRlY29kZU51bWJlcik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZTogeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgp
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+ZW51bWVyYXRvck1ldGFkYXRh
KCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50
OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNh
c2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVG
b3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRv
ckhhc093blByb3BlcnR5OiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdo
ZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAg
ICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgorICAgICAgICBjbG9iYmVyV29ybGQoKTsKKyAgICAg
ICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIG1ha2VIZWFwVG9w
Rm9yTm9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuaAppbmRleCAxMTExZjg5ZjlkN2I1Yjk3Nzc4YzE2YzhkNTQ2NDBiZWEzNzQ0
MmIyLi5hMDI2YWFkMTg5M2JmMjNjNTcxOTZmY2M2YzkxZmMyMDAwM2M0NTY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKQEAgLTI4OSw2ICsyODksMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNT
YW5lQ2hhaW47CiAgICAgfQogCisgICAgYm9vbCBpc1NhbmVDaGFpbigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNJbkJvdW5kc1NhbmVDaGFpbigpIHx8IGlzT3V0T2ZCb3VuZHNTYW5l
Q2hhaW4oKTsKKyAgICB9CisKICAgICBib29sIGlzT3V0T2ZCb3VuZHMoKSBjb25zdAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzIHx8IHNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAKaW5kZXggZGIzN2Y0ZGRkYmY4MGNkNjZlYjU3ODdkN2JhYTJiZjUzYWY4OTA3Ni4uOWRi
ZDBiNDdkOWRmZjRjZjYwMzhhZjUwMDE3OTM0OGJlMGFlYTI5NCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwCkBAIC0zOTAsNyArMzkwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG5vZGUtPmNoaWxk
MigpLT5tZXJnZUZsYWdzKGZsYWdzICYgfk5vZGVCeXRlY29kZU5lZWRzTmVnWmVybyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAg
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNl
c0FzVmFsdWUpOwogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS0+bWVy
Z2VGbGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNOdW1iZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhl
ciB8IE5vZGVCeXRlY29kZVVzZXNBc0ludCB8IE5vZGVCeXRlY29kZVVzZXNBc0FycmF5SW5kZXgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApp
bmRleCBhMjk2YzRiODdjODU4ODY0ZmJkZWRkNzRlZjcyN2U1NGQ5NWZkNjk0Li4yYzk4M2JhYzM3
MDBjOGQyOTU3MjMxZGJkZWYyZWJmMzUwZDMwYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtODM4NywxMDMgKzgzODcsMTM2IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9oYXNfcHJpdmF0ZV9icmFuZCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDogewotICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmFi
bGVMZW5ndGgsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBv
cF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVy
ZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBo
KEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSks
Ci0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Cisg
ICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKKyAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yPigpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldFBy
b3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKKyAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5
PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksIGdldChieXRlY29kZS5tX3Byb3Bl
cnR5KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9uZXh0OiB7CisgICAg
ICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0
b3JOZXh0PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5
TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAgICAg
Tm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOworICAgICAgICAgICAgTm9kZSogaW5k
ZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAgICAgICAgICBOb2RlKiBlbnVtZXJhdG9y
ID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CisgICAgICAgICAgICBOb2RlKiBtb2RlID0g
Z2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAg
ICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0
ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVy
YXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19vd25fc3RydWN0dXJlX3By
b3BlcnR5KTsKLSAgICAgICAgfQorICAgICAgICAgICAgYXV0byBzZWVuTW9kZXMgPSBtZXRhZGF0
YS5tX2VudW1lcmF0b3JNZXRhZGF0YTsKIAotICAgICAgICBjYXNlIG9wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKEluU3RydWN0dXJlUHJvcGVydHksCi0gICAgICAgICAgICAgICAg
Z2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJv
cGVydHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0g
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIXNlZW5Nb2RlcykKKyAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgICAgICAg
ICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Ci0gICAgICAgICAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayku
bV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5
ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YmFzZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7Ci0gICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsKLSAgICAgICAgICAgIE5vZGUqIGhhc0l0ZXJhYmxl
UHJvcGVydHkgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSkpOwotICAgICAgICAgICAgbV9leGl0
T0sgPSBmYWxzZTsgLy8gSGFzSW5kZXhlZFByb3BlcnR5IG11c3QgYmUgdHJlYXRlZCBhcyBpZiBp
dCBjbG9iYmVycyBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0IGdlbmVy
aWMuCi0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGhhc0l0ZXJhYmxlUHJvcGVydHkp
OwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChtb2RlKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0
b3IpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIHN0b3JhZ2UgZm9y
IEluZGV4ZWRNb2RlIG9ubHkuCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVkSW5kZXhBbmRNb2Rl
ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNlZW5Nb2RlcykpOworCisg
ICAgICAgICAgICBOb2RlKiB1cGRhdGVkTW9kZSA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRF
eHRyYWN0TW9kZSwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9tb2RlLCB1cGRhdGVkTW9kZSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRJbmRl
eCA9IGFkZFRvR3JhcGgoRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIHVwZGF0ZWRJbmRleEFu
ZE1vZGUpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1faW5kZXgsIHVwZGF0ZWRJbmRleCk7
CisKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSwgYWRkVG9HcmFwaChF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9k
ZSwgZW51bWVyYXRvcikpOworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9y
X25leHQpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dERpcmVjdFBuYW1lPigpOwotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOwotICAgICAgICAgICAgCisgICAgICAgIGNh
c2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICAg
ICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAg
ICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9h
cnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNw
ZWN1bGF0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7CisKICAgICAgICAgICAg
IE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHBy
b3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJv
cGVydHlOYW1lID0gZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIE5v
ZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogbW9k
ZSA9IGdldChieXRlY29kZS5tX21vZGUpOwogICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9
IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOwogCisgICAgICAgICAgICBhdXRvIHNlZW5Nb2Rl
cyA9IE9wdGlvblNldDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3KG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVz
KQorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKKworICAgICAgICAg
ICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogYmFkTW9kZSA9IGFkZFRvR3JhcGgoQXJpdGhCaXRB
bmQsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpH
ZW5lcmljTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOworCisg
ICAgICAgICAgICAgICAgLy8gV2Uga25vdyB0aGUgQXJpdGhCaXRBbmQgY2Fubm90IGhhdmUgZWZm
ZWN0cyBzbyBpdCdzIG9rIHRvIGV4aXQgaGVyZS4KKyAgICAgICAgICAgICAgICBtX2V4aXRPSyA9
IHRydWU7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOworCisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZVN0
cm9uZyhqc051bWJlcigwKSkpLCBiYWRNb2RlKTsKKworICAgICAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsgLy8g
VXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQgb3B0aW1pemF0aW9ucy4K
KyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gRm9yIHByb3BlcnR5
IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1v
ZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBGSVhNRTogQ2hlY2tpbmcgZm9yIGEgQmFkQ29uc3RhbnRWYWx1ZSBjYXVzZXMgdXMgdG8gYWx3
YXlzIHVzZSB0aGUgR2VuZXJpYyB2YXJpYW50IGlmIHdlIHN3aXRjaGVkIGZyb20gSW5kZXhlZE1v
ZGUgLT4gSW5kZXhlZE1vZGUgKyBOYW1lZE1vZGUgZXZlbiB0aG91Z2ggdGhhdCBtaWdodCBiZSBm
aW5lLgorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMuY29udGFpbnNBbnkoeyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhh
c1NlZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAgICAgICAgICAgICAgICYmICFt
X2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4
LCBCYWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG1vZGVUZXN0ID0g
YWRkVG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoc3RhdGljX2Nh
c3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKSk7Cisg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBo
LmZyZWV6ZVN0cm9uZyhqc0Jvb2xlYW4oZmFsc2UpKSksIG1vZGVUZXN0KTsKKworICAgICAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGluZGV4KTsgLy8gVXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQg
b3B0aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsg
Ly8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KG1vZGUpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAg
ICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcs
IEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhz
cGVjdWxhdGlvbikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChi
YXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChudWxscHRyKTsgLy8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCiAg
ICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChtb2RlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOwotICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0
RGlyZWN0UG5hbWUsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CisgICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9y
R2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24p
KSk7CiAKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9kaXJlY3RfcG5hbWUpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKICAgICAgICAg
fQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKLSAgICAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlF
bnVtZXJhdG9yPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBo
KEdldFByb3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLSAgICAgICAgfQor
ICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigp
OworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogCi0gICAgICAgIGNhc2Ugb3BfZW51
bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1
Y3R1cmVQbmFtZSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSwK
LSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsKLSAgICAgICAgfQorICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckluQnlWYWws
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEpKSk7CiAKLSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6
IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLAotICAgICAgICAgICAgICAg
IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29k
ZS5tX2luZGV4KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaW5fYnlf
dmFsKTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdG9faW5kZXhf
c3RyaW5nOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoVG9JbmRleFN0cmluZywgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAg
ICAgICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOworCisgICAgICAgIGNhc2Ug
b3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4o
KTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0
YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKworICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5
dGVjb2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBh
ZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckhhc093blByb3BlcnR5LCBPcEluZm8o
YXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRh
KSkpOworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJv
cGVydHkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKaW5kZXggY2MwZDAx
NGRhMjkzMWZmM2VjZGNlOTQyOWNjMjYyNTYxZTJmN2Y3Ni4uMDZkMTlkMTczOTczMDNmNzQxYmU2
YjAyYmYwMTA1N2Y3MjI1NjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQ
aGFzZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGF0YUxv
ZygiICAgRm91bmQgbXVzdC1oYW5kbGUgYmxvY2s6ICIsICpibG9jaywgIlxuIik7CiAgICAgICAg
IAogICAgICAgICAvLyBUaGlzIG1lcmdlcyBzbmFwc2hvdCBvZiBzdGFjayB2YWx1ZXMgd2hpbGUg
Q0ZBIHBoYXNlIHdhbnQgdG8gaGF2ZSBwcm92ZW4gdHlwZXMgYW5kIHZhbHVlcy4gVGhpcyBpcyBz
b21ld2hhdCB0cmlja3kuCi0gICAgICAgIC8vIEJ1dCB0aGlzIGlzIE9LIGFzIGxvbmcgYXMgREZH
IE9TUiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpwcm92ZW4qIEFic3RyYWNWYWx1
ZSB2YWx1ZXMuIEFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzCisgICAgICAgIC8vIEJ1dCB0aGlz
IGlzIE9LIGFzIGxvbmcgYXMgREZHIE9TUiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRo
ICpwcm92ZW4qIEFic3RyYWN0VmFsdWUgdmFsdWVzLiBBbmQgaXQgdHVybnMgb3V0IHRoYXQgdGhp
cwogICAgICAgICAvLyB0eXBlIHdpZGVuaW5nIGlzIGNyaXRpY2FsIHRvIG5hdmllci1zdG9rZXMu
IFdpdGhvdXQgaXQsIG5hdmllci1zdG9rZXMgaGFzIG1vcmUgc3RyaWN0IGNvbnN0cmFpbnQgb24g
T1NSIGVudHJ5IGFuZAogICAgICAgICAvLyBmYWlscyBPU1IgZW50cnkgcmVwZWF0ZWRseS4KICAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAKaW5kZXggYzcxNjRiMzBmNDY0ZWIwZDQzODJlMmNjYTQyZDU2
OTk2NGQxYmY2Ny4uYWM3ODJkOTliNDUzYzUwODI2MWE3ZjNhODc5NTU4ODAwZDAwNWY3NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMjU0
LDE3ICsyNTQsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9w
Y29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfaGFzX3By
aXZhdGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgY2FzZSBvcF9nZXRfZnJv
bV9zY29wZToKLSAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKLSAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9w
ZXJ0eToKLSAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ug
b3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToK
ICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgotICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWU6Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5h
bWU6Ci0gICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoK
ICAgICBjYXNlIG9wX25ld19mdW5jX2V4cDoKICAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVu
YzoKQEAgLTI5OSw2ICsyODksMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChP
cGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNl
IG9wX3NldF9wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3BfY2hlY2tfcHJpdmF0ZV9icmFuZDoK
ICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6
CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJh
dG9yX2luX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eToK
ICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX2NhbGxf
ZXZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOWQx
MDA0ZmU1M2YzZDQ0N2RmMTAzZmFjYTBkMmUxMGVjNGZmNWY0Ni4uNzdhNjhlOGU0MWE3NzkyZTNl
NmI2ZTQ5M2E0MDVjNzVmMzg0Yzk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyaXplLmgKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUK
ICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBjYXNlIENoZWNrQXJyYXlPckVtcHR5
OgogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBj
YXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBj
YXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIEdldFZlY3Rvckxlbmd0aDoKQEAgLTM0
Myw2ICszNDcsOSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4
dHJhY3RJbmRleDoKICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgY2FzZSBHZXRFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU6CiAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7
CkBAIC0zNTAsNiArMzU3LDcyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OiB7CisgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgaWYgKG5vZGUt
PmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRN
b2RlICYmIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICByZWFkKE5hbWVkUHJvcGVydGllcyk7CisgICAgICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2Rl
LT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihI
YXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGdyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAg
ICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91
YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAg
ICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUo
bm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2xvYmJlclRv
cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6CiAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJl
YWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKQEAgLTcwNSw2ICs3NzgsOCBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29u
c3QgV3JpdGVGdQogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAgY2FzZSBUb1Byb3BlcnR5S2V5
OgogICAgIGNhc2UgSW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNh
c2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgSW5CeUlkOgogICAgIGNhc2Ug
SGFzUHJpdmF0ZU5hbWU6CiAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CkBAIC05MDYsNiArOTgx
LDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJl
YWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICB3cml0ZShBYnN0cmFj
dEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorCisgICAgLy8gRklYTUU6IFRoaXMgaXMgZmFyIHRvbyBjb25zZXJ2
YXRpdmUgZm9yIHRoZSBjaGlsZDEoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UgY2FzZS4KKyAgICBj
YXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAg
QXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAppbmRleCA1M2FiZmVhOTFkZjIyNGJkNDgyNTUwZGJlNTc4MmQ1OWNh
ZGQ5OGI1Li41MmE3MzE2NTY1ODYxMjUwNjU2MGUzYmYzZjUxYjk1MTNmM2I5YTdmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0zOTUsNiArMzk1LDEwIEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZToKICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6CiAg
ICAgY2FzZSBUb0luZGV4U3RyaW5nOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAg
Y2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlOgogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6
ZU5ld0ludGVybmFsRmllbGRPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2
YXRpb246CkBAIC01MDQsMTAgKzUwOCwxNSBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiAKICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2Fz
ZSBHZXRCeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6U3RyaW5nKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGNhc2UgRW51bWVyYXRvck5l
eHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgIGNhc2Ug
UHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggNDcyMDJkNmRiYWQ5MWM3NmY1OTc4ZGEyOGNh
MWM0OTc3MTU1YTgxOS4uYWNlNGFmNTM0NTcyZjRiZTZhZTc1YTIwZWEzMDE2YjRjNmM3OGY4OCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0xMDI0
LDYgKzEwMjQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAg
ICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOwor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgNSkpOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0KKwogICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICBpZiAoIW5vZGUtPnByZWRpY3Rpb24oKSkgewog
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCkBAIC0xMDYyLDYgKzEw
NjksMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTcyCiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0QXJy
YXlNb2RlKEFycmF5TW9kZShBcnJheTo6R2VuZXJpYywgbm9kZS0+YXJyYXlNb2RlKCkuYWN0aW9u
KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKworCisgICAgICAgICAgICBjYXNlIEFycmF5
OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBmb3JjZSBPU1IgYmVjYXVz
ZSB3ZSBoYXZlIG9ubHkgc2VlbiBOYW1lZE1vZGUuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdFIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLi4uCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKQorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUobm9kZS0+YXJyYXlNb2RlKCkud2l0aFR5cGUoQXJyYXk6
OkdlbmVyaWMpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBA
IC0xMDk2LDcgKzExMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBzb21l
IGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwt
Ymxvd24KICAgICAgICAgICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBzbG93IHBhdGguIFdl
IGNhbiBmaXggdGhhdCB3aXRoOgogICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4Ci0gICAgICAgICAgICAgICAgICAgIAor
CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9m
Qm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVn
YXRpdmVJbmRleCkpCkBAIC0xMTExLDcgKzExMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9u
ID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFn
cygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigp
ID09IEFycmF5OjpJbkJvdW5kcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhv
bGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwgc28gaWYgdGhlIHVzZXIgZG9lc24ndCBjYXJlCkBA
IC0xMTIxLDcgKzExMzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91
dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
TmVnYXRpdmVJbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3Bl
Y3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMTE3OCw3ICsxMTk0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHNldCBhIG5vbi1KU1ZhbHVlIHJlc3VsdCBmb3Ig
RW51bWVyYXRvckdldEJ5VmFsIHNpbmNlIHdlIGNvdWxkIHN0aWxsIGRvIGEgTmFtZWRNb2RlIHBy
b3BlcnR5IGFjY2Vzcy4gV2UgYWxzbyBkb24ndCBoYXZlIGEgZ29vZCB3YXkgdG8KKyAgICAgICAg
ICAgIC8vIHByb3ZlIHRoZXJlJ3Mgbm8gc3RydWN0dXJlIHByb3BlcnRpZXMgYXQgdGhpcyBwb2lu
dC4KKyAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEVudW1lcmF0b3JHZXRCeVZhbCkKKyAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUo
KSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGlm
ICghYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKQpAQCAtMjM0NSw2ICsyMzY1LDU4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAgIEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgRWRnZSYgaW5kZXggPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAgRWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpOworCisgICAg
ICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5
TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnByZWRpY3Rpb24oKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSktPnByZWRpY3Rpb24o
KSkpOworCisgICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihiYXNlKTsKKyAgICAgICAg
ICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGJhc2UsIGluZGV4LCBzdG9yYWdlRWRnZSk7CisK
KyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7
CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5iZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5
KCkpCisgICAgICAgICAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwgYXJy
YXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzID8gQXJyYXk6OkluQm91bmRz
U2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2Vs
bFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgp
OworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAg
ICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCA0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8g
aW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVjdGlvblR5cGVTZXQgb2YgdGhl
IFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0LgogICAgICAgICAgICAgLy8gQmVj
YXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0
LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKQEAgLTM2OTAsNiArMzc2Miw2NyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJy
YXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAorICAgIHZvaWQgc2V0SlNBcnJheVNhbmVDaGFp
bklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3Bl
Y3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9uOworICAgICAgICBpZiAoYXJyYXlNb2RlLmlz
SlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAvLyBDaGVjayBp
ZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsgb24gYSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0
aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91
YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJuIHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAg
ICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNoYW5nZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5k
IGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAgICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2Un
ZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBhY3R1YWxseSBoYWQKKyAgICAgICAgICAgIC8v
IGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9tIGEgaG9sZS4gVGhhdCdzIHByZXR0eSBh
bm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2VseSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRo
YXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQgb2YKKyAgICAgICAgICAgIC8vIEluQm91bmRz
U2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVu
ZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5hTiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNj
b3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiwgYW5kIGp1c3QKKyAgICAgICAgICAgIC8v
IHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0IGNhc2UuIFRoaXMgaGFwcGVucyB0byBjYXRj
aCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAyKSBXZSBk
b24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRvIGhhdmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1
c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0byBVbmRlZmluZWQsIHNpbmNlIHRoYXQgd291
bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3YW50IHRvCisgICAgICAgICAgICAvLyBiZSBh
YmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91
bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAvLyBiYXNlZD8KKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0
byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAgICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5m
b3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNoZWNrLiBTZWNvbmQsCisgICAg
ICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRv
IHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAgICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBw
YXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKKworICAgICAgICAgICAgc3dpdGNoIChh
cnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAg
ICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFy
cmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2Vt
YW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVj
dWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAg
ICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkg
d291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHJldHVybmVkIGFueSBKU1ZhbHVlLCBhbmQg
bm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0aWxsIGRvCisgICAgICAgICAgICAgICAg
Ly8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNs
b3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVj
dWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAgICAg
ICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAg
ICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6
SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJy
YXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+Zmxh
Z3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24o
KSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9v
ayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0IGNhcmUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5k
IE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAvLyBkbyB0aGlzLgorICAgICAg
ICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVD
aGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUu
c3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNp
dGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4KSkKKyAgICAgICAgICAgICAg
ICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAo
c2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxl
KG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7CisgICAgfQorCiAgICAgdm9pZCBzZXRTYW5l
Q2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlv
bikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBj
ZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQxOTJkMTc1MmQ0NmZkNmRiOWE2MWI1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBO
b2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmludChjb21tYSwgKm5vZGUtPmlu
QnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRTdGF0dXMoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+
aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgImVudW1l
cmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpKTsKICAgICBpZiAobm9k
ZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdl
dEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBo
YXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQwZWY0MDMzMGMyMzM0NmM1ZDRjMjNmOWMwLi4x
YmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4OTIyMTUxZTQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXph
dGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBjYXNl
IEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6
OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM4MCw2ICsx
MzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAg
ewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRlYWNo
IHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXguCiAgICAgICAgIGNhc2UgQ2hl
Y2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6
c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwg
UmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAgICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJl
bGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG1femVybywgUmVs
YXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4NmQzOTNmZDg3YjY1NTdkMzUyZTNmMGQ0MDZh
YTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2NjRkMGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTExLDggKzExMSwxMSBAQCBFeGl0
TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3Rh
dGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNr
UHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVz
OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxs
OgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRl
eCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2ZDBhNDM4ZTVlZDgxLi42OTAzM2Y3OTkxYTM2
N2JhNDU1MTkzNGRmODMxMTZhZGI0NDE3MTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkRlbGV0ZUJ5VmFyaWFudC5oIgogI2lu
Y2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2lu
Y2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5o
IgpAQCAtMTc3Miw2ICsxNzczLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdldEJ5SWREaXJl
Y3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKICAgICAgICAgY2FzZSBUcnlH
ZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBH
ZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIEdl
dFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQzLDg0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFzU3RvcmFnZUNo
aWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNl
IFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBj
YXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
KyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKKyAg
ICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAg
ICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAgICAgICAgY2Fz
ZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NFeGNoYW5nZToK
KyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNzT3I6CisgICAg
ICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6CisgICAgICAg
IGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgIGNhc2Ug
QXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGNhc2UgSGFz
SW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHk6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAg
ICAgIGNhc2UgQXJyYXlJbmRleE9mOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgdW5zaWduZWQgc3RvcmFnZUNoaWxkSW5kZXgoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGhhc1N0b3JhZ2VDaGlsZCgpKTsKKyAgICAgICAgc3dpdGNoIChvcCgp
KSB7CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJD
b2RlQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ29kZVBvaW50QXQ6CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgcmV0
dXJuIDI7CisgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlW
YWw6CisgICAgICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgICAgIHJldHVybiAzOwor
ICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAgICAg
ICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NFeGNo
YW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNzT3I6
CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6Cisg
ICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgICAgIHJldHVybiAyICsgbnVtRXh0cmFB
dG9taWNzQXJncyhvcCgpKTsKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKworICAgICAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBjYXNlIEdldEFycmF5
TGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIDI7CisKKyAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6CisgICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKKyAg
ICAgICAgICAgIHJldHVybiAyOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CisgICAgICAgICAgICByZXR1cm4gNDsKKworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBBcnJheUluZGV4T2YgYnV0IGl0IGRvZXMgbm9uLXRy
aXZpYWwgdGhpbmdzIHRvIGRldGVybWluZSBzdG9yYWdlIGVkZ2UuCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBo
YXNVaWRPcGVyYW5kKCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09IENoZWNrSWRlbnQ7
CkBAIC0yMjA1LDYgKzIyODUsMTAgQEAgcHVibGljOgogICAgICAgICBjYXNlIFB1dEJ5VmFsOgog
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBTdHJpbmdD
aGFyQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKICAgICAgICAgY2FzZSBTdHJp
bmdDb2RlUG9pbnRBdDoKQEAgLTMxNzQsNiArMzI1OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi41Y2U5YWYzZTQ1MDM0OGVjYWFi
YWMxYjFjODk1YWVjM2UxZjc2OGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MTUsNiArNTE1LDEzIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oVG9JbmRleFN0
cmluZywgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oRW51
bWVyYXRvck5leHRFeHRyYWN0TW9kZSwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oRW51
bWVyYXRvck5leHRFeHRyYWN0SW5kZXgsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEVu
dW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNy
byhFbnVtZXJhdG9yR2V0QnlWYWwsIE5vZGVSZXN1bHRKUyB8IE5vZGVIYXNWYXJBcmdzIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEVudW1lcmF0b3JJbkJ5VmFsLCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFy
QXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICAvKiBOb2RlcyBmb3IgSlNNYXAgYW5kIEpT
U2V0ICovIFwKICAgICBtYWNybyhNYXBIYXNoLCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNy
byhOb3JtYWxpemVNYXBLZXksIE5vZGVSZXN1bHRKUykgXApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKaW5kZXggOGQxNWQ2YWIzNTE2YjVlYjAyYjdmNjNmNDQ4
NjE3OWU5YjhlODQ0ZC4uZmVlYmFiYmE1MGU5NTBlZDIwOTU5OTM5YTczNzczMjg2OWE4NzZkYSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCkBAIC0yNTA1
LDYgKzI1MDUsMTA3IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4
U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhCiAgICAgcmV0dXJuIGpzU3Ry
aW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3RyaW5nKCkpOwogfQogCitKU0Nf
REVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGUsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5j
b2RlZEpTVmFsdWUgYmFzZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVy
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVf
Q0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZSBtb2RlID0gc3Rh
dGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihtb2RlTnVtYmVyKTsKKyAg
ICBpZiAoSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkuaXNVbmRlZmluZWRPck51bGwoKSkgewor
ICAgICAgICBBU1NFUlQobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluaXRNb2Rl
KTsKKyAgICAgICAgQVNTRVJUKCFpbmRleCk7CisgICAgICAgIEFTU0VSVCghZW51bWVyYXRvci0+
c2l6ZU9mUHJvcGVydHlOYW1lcygpKTsKKyAgICAgICAgbW9kZSA9IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNPYmplY3QqIGJh
c2UgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZVZhbHVlKS50b09iamVjdChnbG9iYWxPYmplY3QpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisgICAgICAgIGNvbnN0
ZXhwciBib29sIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPSBmYWxzZTsKKyAgICAg
ICAgZW51bWVyYXRvci0+Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9k
ZSwgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyk7CisgICAgICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBK
U1ZhbHVlIHJlc3VsdCA9IGJpdHdpc2VfY2FzdDxKU1ZhbHVlPihzdGF0aWNfY2FzdDx1aW50NjRf
dD4obW9kZSkgPDwgMzIgfCBpbmRleCB8IEpTVmFsdWU6Ok51bWJlclRhZyk7CisjZWxzZQorICAg
IEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZShtb2RlLCBpbmRleCk7CisjZW5kaWYKKyAgICBBU1NF
UlQocmVzdWx0LmlzTnVtYmVyKCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0
KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0
VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZt
KTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNh
bGxGcmFtZSk7CisKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgIGlmIChpbmRleCA8IGVudW1lcmF0b3ItPmluZGV4
ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmco
dm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICB9CisK
KyAgICBKU1N0cmluZyogcmVzdWx0ID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChp
bmRleCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5k
R2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCB1aW50MzJfdCBpbmRleCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1N0cmluZyogc3Ry
aW5nID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7
CisgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICBKU09iamVjdCogb2JqZWN0ID0g
YmFzZS0+dG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworCisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUob2JqZWN0LT5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSk7Cit9CisKK0pTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySW5CeVZhbCwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwg
aW50MzJfdCBtb2RlTnVtYmVyKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Zh
bHVlIGJhc2UgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZVZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGlmIChtb2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgJiYgYmFzZS5pc09iamVjdCgpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihiYXNlLmdldE9iamVjdCgpLT5oYXNQcm9wZXJ0
eShnbG9iYWxPYmplY3QsIGluZGV4KSkpOworCisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9
IGpzU2VjdXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUocHJvcGVydHlOYW1l
VmFsdWUpKTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBw
cm9wZXJ0eU5hbWUpKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvckhhc093blByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUg
cHJvcGVydHlOYW1lVmFsdWUsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQor
eworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxG
cmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTVmFsdWUgYmFzZSA9IEpTVmFsdWU6OmRl
Y29kZShiYXNlVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSAmJiBiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGJhc2UuZ2V0T2JqZWN0KCktPmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5k
ZXgpKSk7CisKKyAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0ganNTZWN1cmVDYXN0PEpTU3Ry
aW5nKj4odm0sIEpTVmFsdWU6OmRlY29kZShwcm9wZXJ0eU5hbWVWYWx1ZSkpOworICAgIGF1dG8g
aWRlbnRpZmllciA9IHByb3BlcnR5TmFtZS0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3du
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpZGVudGlmaWVyKSkpKTsKK30KKwogSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2Vs
bCosIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIHJlZ2V4cFB0ciwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZExhc3RJbmRleCkpCiB7CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAppbmRl
eCAzMTRlMWZlZGU1OTVkMGZiOGZhODM1ZWY3MjA1ZTZiNjQ1YzMwNDZiLi5kMzZmMzUzYmMzNjEy
Yjk4ODJjYTFkMTgzODQ3M2RkMDkyODU5NDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuaApAQCAtMzYsNiArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNz
IERhdGVJbnN0YW5jZTsKIGNsYXNzIEpTQmlnSW50Owogc3RydWN0IFVubGlua2VkU3RyaW5nSnVt
cFRhYmxlOworY2xhc3MgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwogCiBuYW1lc3BhY2UgREZH
IHsKIApAQCAtMTEwLDYgKzExMSwxMiBAQCBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkluU3RydWN0dXJlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYQogSlNDX0RF
Q0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIEpTQ2Vs
bCosIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIEpTQ2VsbCosIChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3Bl
cmF0aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgaW50MzJfdCkp
OworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0
ZUluZGV4QW5kTW9kZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRK
U1ZhbHVlLCB1aW50MzJfdCwgaW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOwor
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIHVpbnQzMl90LCBp
bnQzMl90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCB1aW50MzJfdCwgaW50
MzJfdCkpOworSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJhdG9ySGFz
T3duUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgdWludDMyX3QsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciopKTsKKwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25OZXdSZWdleHBXaXRoTGFzdEluZGV4LCBKU0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25OZXdBcnJheSwgY2hhciosIChKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSosIHZvaWQq
LCBzaXplX3QpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3RW1wdHlB
cnJheSwgY2hhciosIChWTSosIFN0cnVjdHVyZSopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5k
ZXggYWE3YzYxZTYwYWY1MDdlYjkxN2UzMDZiYWI4NTM3YzBlODllMmUwZC4uZDJhZWNjMDFhNWYy
OTA0M2FlMjFkZmRmZGNjN2Y1MTA5OTg4YzI4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAg
LTQ3MywxNCArNDczLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBFZGdlIGNoaWxkMSA9IG1f
Z3JhcGguY2hpbGQobm9kZSwgMCk7CiAgICAgICAgICAgICBpZiAoIWNoaWxkMS0+cHJlZGljdGlv
bigpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKKwogICAgICAgICAg
ICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIDEpOwogICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLCBub2RlLAogICAgICAgICAgICAgICAgIGNoaWxkMS0+cHJlZGljdGlvbigp
LAogICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAg
IFNwZWNOb25lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9k
ZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAg
ICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQpAQCAtNTAxLDcgKzUwMiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0Z1
bGxEb3VibGUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6Ci0gICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbkZv
ckFyaXRobWV0aWMobm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSkgJiYgbm9kZS0+b3AoKSA9PSBH
ZXRCeVZhbCkKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGht
ZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAmJiAobm9kZS0+b3AoKSA9PSBHZXRCeVZh
bCB8fCBub2RlLT5vcCgpID09IEVudW1lcmF0b3JHZXRCeVZhbCkpCiAgICAgICAgICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGVuYWJsZUludDUyKCkpCiAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQ1MkFueSk7CkBAIC04NjIsNiArODYzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2Ug
QXJyYXlQdXNoOgogICAgICAgICBjYXNlIFJlZ0V4cEV4ZWM6CkBAIC0xMjA1LDEwICsxMjA3LDE1
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFj
dE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CiAgICAgICAg
IGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk6CiAgICAgICAgIGNhc2UgSW5CeVZhbDoKICAgICAgICAgY2FzZSBJbkJ5SWQ6CiAgICAg
ICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CkBAIC0xMjM5LDYgKzEyNDYsMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlOiB7CisgICAgICAgICAgICAvLyBUaGlzIGNhbiBhY3R1YWxseSByZXR1cm4gYSBKUyBudWxs
IGJ1dCB3ZSBicmFuY2ggb2YgdGhhdCBjYXNlIGluIHRoZSBzYW1lIGJhc2ljIGJsb2NrIHNvIHdl
IGRvbid0IHdhbnQgdG8gbWVzcyB3aXRoCisgICAgICAgICAgICAvLyBmaXh1cCdzIGxvZ2ljLgor
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjRnVsbE51bWJlcik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZhbHVl
IHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3RyaW5n
LgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDogewog
ICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHByb2R1
Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0IHBy
b2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBjOTYz
N2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi42NTY1MTEwNDE4ZGNhZTllNGZl
ZmZmYTk5NDYyMjcyM2I0MjgwNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKQEAgLTg2LDYgKzg2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGxvd2VyQm91bmRzQ2hlY2sobV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dy
YXBoLmNoaWxkKG1fbm9kZSwgMSksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAg
ICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
Y2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMx
NWRhNzE3MmEzMGY2MTllZTJkMGI5YjQ2MGUyYzUwLi5hMDUxZTc0YTcwNjIxMTU5YzgzYjk2Mjkz
YzgyODZmZTM1NGZkMmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaApAQCAtMzcyLDYgKzM3Miw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAg
ICAgICAgIC8vIHRvIGNhcHR1cmUgInByb2ZpbGluZyIgYXQgdGhlIHBvaW50IGluIGNvbnRyb2wg
ZmxvdyBoZXJlIHRoZSB1c2VyIHB1dCB0aGVtLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNhc2Ug
R2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAt
NDk2LDYgKzQ5NywxMSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICByZXR1cm4g
aXNTYWZlOwogICAgIH0KIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1v
ZGU6CisgICAgLy8gVGhlc2UgdGVjaG5pY2FsbHkgZG9uJ3QgaGF2ZSBlZmZlY3RzIGJ1dCB0aGV5
J2xsIG9ubHkgZXZlciBmb2xsb3cgYSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSBz
byB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBmYWxzZS4KKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0
RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgogICAgIGNhc2UgVG9UaGlzOgog
ICAgIGNhc2UgQ3JlYXRlVGhpczoKICAgICBjYXNlIENyZWF0ZVByb21pc2U6CkBAIC01OTUsNiAr
NjAxLDggQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIE5ld1N0cmluZ09iamVj
dDoKICAgICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbkJ5SWQ6CisgICAgY2FzZSBFbnVtZXJh
dG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNl
IEhhc1ByaXZhdGVOYW1lOgogICAgIGNhc2UgSGFzUHJpdmF0ZUJyYW5kOgogICAgIGNhc2UgSGFz
T3duUHJvcGVydHk6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1MThhNjA4NzEzNDJkNjQ0ZWQ5NzhiMWU1Yjgu
LmZhMzQxNDRkMWEyNTg1NjNhNTA5YWI1NjEyN2UyYzQyZWE1M2YwNzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsx
NjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVj
dWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkK
ICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVt
cG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRh
ZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCi0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBv
cGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQot
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hW
YWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1fcGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5
bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNlbmRpZgogewotICAgIGlmIChyZXN1bHRXb3Jk
ID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShq
aXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0
KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7
Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1w
b3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFn
LCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAgLTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0
SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29w
ZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBw
cmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYw
NCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBv
cmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0g
ICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJl
c3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwot
ICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBz
dGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlz
T3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJS
ZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWdu
ZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBp
bmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hS
ZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhp
cywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0
Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsK
KyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
LCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKIAogICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsyNjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2pp
dC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3Rv
dHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0
Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBV
U0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1
ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAgICAgICAgICAg
b3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8
U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAgICAgICAgIG91
dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRo
aXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2Jh
bE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMs
IHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBz
Y3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmpl
Y3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAg
ICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAot
ICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcp
LCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNl
UmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJl
Z3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsK
LSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBt
X2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNj
cmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Z3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0g
RGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1
cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9kZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICsz
MzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJS
ZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcg
cmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3Vs
YXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8
IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBpc1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUp
ID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChzaG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlz
VUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIo
KSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3Rl
ZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJz
b2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigp
KTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIG1faml0
LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0
UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzVUludDMyKSB7CisgICAgICAgIEFTU0VSVChl
bGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJ
bnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7
CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUp
IHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcs
IFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50
VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAg
ICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFy
cmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExh
bWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZl
cnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAK
QEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3Jt
YXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1pdFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2Rl
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAgbG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcsIHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlw
ZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCks
IHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0
SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxh
dGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5
cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKQEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJh
c2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5
cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBT
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1h
dCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUp
KTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQog
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9
IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwogICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRB
cnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyAr
MzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVn
LCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICBtX2pp
dC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0
ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBu
b2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2Rl
LCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcwMyw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBH
UFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBu
b2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1h
dD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAK
KyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0
cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNo
UmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4
Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3lt
Ym9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5v
ZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBh
cmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJn
MUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSks
IGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwg
YXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0
MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZz
ZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50
cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJl
Y3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1
bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjpp
Z25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAg
ICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgwODIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkKICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSogbm9kZSwgY29u
c3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
Ly8gVE9ETzogQXJlIGJvdGggb2YgdGhlc2UgbmVjZXNzYXJ5Pz8KICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9
IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVn
cygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcg
c2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybjsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKTsKQEAgLTEzNDgyLDYgKzEzNDg3LDMxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKiBub2RlKQogICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKE5vZGUqIG5vZGUpCit7CisgICAgRWRnZSBiYXNl
RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisKKyAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKKyAgICBHUFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7CisgICAgR1BS
UmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgaWYgKG5vZGUtPmVu
dW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpIHsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzLCBSZXVzZSwgaW5kZXgpOworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKDApKSk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGluY3JlbWVudExvb3A7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmU7Cisg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJS
ZWc+KCk+KFsmXSB7CisKKyAgICAgICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2gu
Z3ByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5pdE1vZGUgPSBtX2pp
dC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1vZGVHUFIpOworCisgICAgICAg
ICAgICBpbmNyZW1lbnRMb29wID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaC5ncHIoKSk7CisKKyAgICAgICAgICAgIGluaXRN
b2RlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRM
ZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNjcmF0
Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSkpOworICAgICAg
ICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKS5saW5rVG8oaW5jcmVtZW50TG9vcCwgJm1faml0KTsKKworICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSA8PCAzMiksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgbV9qaXQub3I2NChzY3JhdGNoLmdwcigpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSwgcmVzdWx0UmVncy50YWdH
UFIoKSk7CisjZW5kaWYKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRh
ZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIGJhc2VFZGdl
LnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisKKyAgICAgICAgLy8gSGFzIHRo
ZSBzYW1lIHN0cnVjdHVyZSBhcyB0aGUgZW51bWVyYXRvci4KKyAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
bW9kZVNldE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TmFtZWRNb2RlKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpKTsKKworICAg
ICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluaXRNb2RlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBtb2RlR1BSKTsKKworICAgICAgICBtX2ppdC5hZGQzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisK
KyAgICAgICAgaW5pdE1vZGUubGluaygmbV9qaXQpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ICAgIG1faml0Lm9yNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkgPDwgMzIp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSksIHJlc3VsdFJl
Z3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2UodGhpcywgYmFzZUVkZ2UpOworICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5yZWdz
KCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxS
ZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNl
UmVncywgaW5kZXhHUFIsIG1vZGVHUFIsIGVudW1lcmF0b3JHUFIpOworICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKK30KKwor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KE5v
ZGUqIG5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1
ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IHBhaXJSZWdzLnBheWxvYWRHUFIoKTsK
KworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKworICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihzdGQ6Om51bWVy
aWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXlsb2FkR1BSLCByZXN1bHRHUFIpOworCisg
ICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKK3sK
KyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5qc1ZhbHVlUmVncygpOworICAg
IEdQUlJlZyBwYWlyR1BSID0gaXM2NEJpdCgpID8gcGFpclJlZ3MucGF5bG9hZEdQUigpIDogcGFp
clJlZ3MudGFnR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IG1faml0LnJzaGlmdDY0KHBhaXJHUFIsIFRydXN0ZWRJbW0zMigzMiksIHJlc3VsdEdQUik7Cisj
ZWxzZQorICAgIG1faml0Lm1vdmUocGFpckdQUiwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgIG1f
aml0LmFuZDMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0
aW9uTW9kZU1hc2spLCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIGluZGV4T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGVPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yT3BlcmFuZCh0aGlzLCBub2Rl
LT5jaGlsZDMoKSk7CisKKyAgICBHUFJSZWcgaW5kZXggPSBpbmRleE9wZXJhbmQuZ3ByKCk7Cisg
ICAgR1BSUmVnIG1vZGUgPSBtb2RlT3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgZW51bWVyYXRv
ciA9IGVudW1lcmF0b3JPcGVyYW5kLmdwcigpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAg
ICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpOworICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbChOb2Rl
KiBub2RlKQoreworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApOworICAgIGF1dG8gZ2VuZXJhdGUgPSBbJl0gKEdQUlJlZyBiYXNlQ2VsbEdQUikgeworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgICAgICBKU1ZhbHVl
UmVnc1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgICAgIEdQUlJlZyBpbmRleEdQUjsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFI7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGJhZFN0cnVjdHVyZVNsb3dQYXRoOworCisgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbChub2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCkgeworICAgICAg
ICAgICAgRWRnZSBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMik7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlOworICAgICAgICAgICAgaWYgKHN0b3Jh
Z2VFZGdlKQorICAgICAgICAgICAgICAgIHN0b3JhZ2UuZW1wbGFjZSh0aGlzLCBzdG9yYWdlRWRn
ZSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgbW9kZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsK
KyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCA1KSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBtb2RlR1BSID0g
bW9kZS5ncHIoKTsKKyAgICAgICAgICAgIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAg
ICAgICBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKKworICAgICAgICAgICAgcmVz
dWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICByZXN1bHRSZWdz
ID0gcmVzdWx0LnJlZ3MoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCk7CisKKyAgICAgICAgICAgIGJvb2wgaGF2ZVN0b3JhZ2UgPSAhIXN0
b3JhZ2VFZGdlOworICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0b3JhZ2VUZW1wb3Jhcnk7Cisg
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUjsKKyAgICAgICAgICAgIGlmICghaGF2ZVN0b3Jh
Z2UpIHsKKyAgICAgICAgICAgICAgICBzdG9yYWdlVGVtcG9yYXJ5ID0gR1BSVGVtcG9yYXJ5KHRo
aXMsIFJldXNlLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gc3Rv
cmFnZVRlbXBvcmFyeS5ncHIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgbm90RmFzdE5hbWVkQ2FzZXM7CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGRuJ3QgZ2VuZXJhdGUgdGhpcyBjb2RlIGlmIHdlIGtub3cgYmFzZSBpcyBub3QgYW4g
b2JqZWN0LgorICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbW9kZUdQUiwgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlKSkpOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgYmFzZSBpcyBhIGNlbGwgaGVyZSBzaW5j
ZSB3ZSB3b24ndCBnZW5lcmF0ZSBOYW1lZE1vZGUgcHJvcGVydGllcyBmb3Igbm9uLW9iamVjdHMu
CisgICAgICAgICAgICAgICAgLy8gVE9ETzogcHV0IEFzc2VydCBoZXJlPworCisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBrbm93IHRoZXJlJ3Mgb25seSBvbmUgc3RydWN0dXJlIGZvciBiYXNlIHdlIGNhbiBqdXN0
IGVtYmVkIGl0IGhlcmUuCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKworICAgICAgICAgICAgICAgIGF1dG8gYmFkU3RydWN0dXJlID0gbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ug
c2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHJlcHJlc2VudCBJbmRleGVkK05hbWVkPworICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLm5vZGUoKSA9PSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
YmFkU3RydWN0dXJlU2xvd1BhdGggPSBiYWRTdHJ1Y3R1cmU7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQoYmFkU3RydWN0
dXJlKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICAg
ICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlQ2VsbEdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmVD
YXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgICAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5uZWczMihz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdlKQor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VDZWxsR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsK
KyAgICAgICAgICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRWYWx1ZShN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBEYXRhRm9ybWF0SlMp
OworICAgICAgICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVseSBvbiBjb21waWxlR2V0QnlWYWwg
dG8gY2FsbCBqc1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
a2luZGEgaGFja3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZvKG5vZGUpLmpzVmFs
dWVSZWdzKCkgPT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9uSW5mbyhub2RlKS5yZWdpc3RlckZv
cm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgaWYgKGJhZFN0cnVjdHVyZVNsb3dQ
YXRoLmlzU2V0KCkpCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENh
bGwoYmFkU3RydWN0dXJlU2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVy
TmFtZUFuZEdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZUNlbGxHUFIsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BSKSk7CisKKyAgICAgICAgZG9uZUNh
c2VzLmxpbmsoJm1faml0KTsKKyAgICB9OworCisgICAgaWYgKGlzQ2VsbChiYXNlRWRnZS51c2VL
aW5kKCkpKSB7CisgICAgICAgIC8vIFVzZSBtYW51YWwgb3BlcmFuZCBzcGVjdWxhdGlvbiBzaW5j
ZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQgYSBVc2VLaW5kIG1vcmUgcmVzdHJpY3RpdmUgdGhhbiBD
ZWxsVXNlLgorICAgICAgICBzcGVjdWxhdGUobm9kZSwgYmFzZUVkZ2UpOworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRnZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2VPcGVyYW5kKHRoaXMsIGJhc2VF
ZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAgIH0KK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5vZGUqIG5vZGUsIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBi
YXNlUmVncywgR1BSUmVnIGJhc2VDZWxsR1BSKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHBy
b3BlcnR5TmFtZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsK
KworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eU5hbWVSZWdzID0gcHJvcGVydHlOYW1lLnJl
Z3MoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBtb2RlR1BSID0gbW9kZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIg
PSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG9wZXJhdGlvbkNhc2VzOworCisg
ICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2UpLm1fdHlwZSAmIH5TcGVjQ2VsbCkK
KyAgICAgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwo
YmFzZVJlZ3MpKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRo
aXMgY29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGEgY2VsbC4KKyAgICAgICAgb3BlcmF0aW9u
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9k
ZUdQUiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkp
OworCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2Vs
bEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOworCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsoJm1faml0KTsKKworICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHNsb3dQYXRoRnVu
Y3Rpb24sIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywg
cHJvcGVydHlOYW1lUmVncywgaW5kZXhHUFIsIG1vZGVHUFIpOworICAgICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisgICAgICAgIGJs
ZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKKyAgICB9
OworCisgICAgaWYgKGlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpKSB7CisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBnZW5lcmF0ZShi
YXNlLmdwcigpLCBiYXNlLmdwcigpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZS5yZWdzKCks
IGJhc2UucmVncygpLnBheWxvYWRHUFIoKSk7CisgICAgfQorfQorCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvckluQnlWYWwoTm9kZSogbm9kZSkKK3sKKyAgICBjb21waWxl
RW51bWVyYXRvckhhc1Byb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eShOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkobm9kZSwg
b3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5KTsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5SWRGbHVzaChOb2RlKiBub2RlKQogewogICAgIHN0ZDo6b3B0aW9u
YWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsKQEAgLTE0OTM0LDI4ICsxNTI0NywyOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVOZXdBcnJheVdpdGhTaXplKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplYwogICAgICAgICBzaXplR1BSLCBzdG9yYWdlR1BSKSk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9k
ZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlv
bl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24sIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQ
UlJlZywgR1BSUmVnPigpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSBJbnZh
bGlkR1BSUmVnOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBJbnZhbGlkR1BSUmVnOwogCiAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKICAgICBBcnJheU1vZGUgbW9kZSA9
IG5vZGUtPmFycmF5TW9kZSgpOwogICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKICAgICBjYXNl
IEFycmF5OjpJbnQzMjoKICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgIEFT
U0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAg
ICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZElu
ZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsK
IAogICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCkBAIC0xNDk4MywxMiArMTUyOTYsMTQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBu
b2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNh
c2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwog
ICAgICAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IHNjcmF0Y2guZnByKCk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQ
UiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwogCiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3Vu
ZHMoKSkKQEAgLTE1MDEyLDEzICsxNTMyNywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbAog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0g
ICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0
Y2guZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVm
aXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7CiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG91dE9m
Qm91bmRzKTsKQEAgLTE1MDQ3LDE0ICsxNTM2NCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBz
bAogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgLy8gRklYTUU6IE9wdGltaXplIFR5cGVkQXJyYXlz
IGluIEhhc0luZGV4ZWRQcm9wZXJ0eSBJQwogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMTgzCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCBy
ZXN1bHRHUFIpID0gcHJlZml4KCk7CiAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuanVt
cCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KIAogICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIHNsb3dQYXRoT3BlcmF0aW9uLCBy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBpbmRleEdQUikp
OwotCi0gICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RGlyZWN0UG5hbWUoTm9kZSogbm9kZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA5OGM3
NjE2YjhmZDJmYmY1YzRkZDhhNTc3MTUwOGFkMjY3OWY5OWQxLi5kZTkzNWVmZGY5MTIyZWEwNTgw
ZDE5MzFmZGIxZjk5OGU4ZWM5NjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC00Nyw2ICs0Nyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdQUlRlbXBvcmFyeTsKK2NsYXNzIEpTVmFsdWVSZWdzVGVt
cG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsK
IGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMjQ2LDYgKzI0Nyw4IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgR1BSUmVnIGFsbG9jYXRlKEdQUlJlZyBzcGVjaWZpYykKICAgICB7CisgICAgICAgIGlm
IChzcGVjaWZpYyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdGUoKTsKICNp
ZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICAgICAgbV9q
aXQuYWRkUmVnaXN0ZXJBbGxvY2F0aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7CiAj
ZW5kaWYKQEAgLTEzNDUsMTIgKzEzNDgsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGVt
cG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUtPmFycmF5TW9kZSgpKTsK
ICAgICB9CiAgICAgCisgICAgLy8gV2UgdXNlIGEgc2NvcGVkTGFtYmRhIHRvIHBsYWNhdGUgcmVn
aXN0ZXIgYWxsb2NhdGlvbiB2YWxpZGF0aW9uLgorICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKE5v
ZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1h
dD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKwogICAgIHZvaWQgY29t
cGlsZUdldENoYXJDb2RlQXQoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJp
bmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSosIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZUZyb21DaGFy
Q29kZShOb2RlKik7IAogCi0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50
cyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2Rl
Kik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiwgY29u
c3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CisgICAgdm9pZCBjb21waWxlR2V0QnlW
YWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHBy
ZWZpeCk7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRQcml2YXRlTmFtZShOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlR2V0UHJpdmF0ZU5hbWVCeUlkKE5vZGUqKTsKQEAgLTE0MjQsMTIgKzE0MzAsMTIg
QEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBGb3JUeXBlZEFycmF5SXNEZXRh
Y2hlZElmT3V0T2ZCb3VuZHMoTm9kZSosIEdQUlJlZyBiYXNlR1BSLCBKSVRDb21waWxlcjo6SnVt
cCBvdXRPZkJvdW5kcyk7CiAgICAgdm9pZCBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKE5vZGUq
LCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIGluZGV4R1BSKTsKICAgICB2b2lkIGNvbXBpbGVHZXRU
eXBlZEFycmF5Qnl0ZU9mZnNldChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRC
eVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUsIGNvbnN0IFNjb3BlZExh
bWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZl
cnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlw
ZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5
cGUpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5
cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5
KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJh
c2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIGNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSopOwotICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wo
Tm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9y
bWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcoTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYg
Y2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdp
dGhTeW1ib2woTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMp
OwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aFRoaXMoTm9kZSopOwpAQCAtMTQ1OCw3ICsx
NDY0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIEVkZ2UgdmFsdWVVc2UpOwogICAgIHZv
aWQgbG9hZEZyb21JbnRUeXBlZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcHJvcGVy
dHlSZWcsIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIHNldElu
dFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5
VHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUpOworICAgIHZvaWQgc2V0SW50VHlwZWRBcnJheUxvYWRS
ZXN1bHQoTm9kZSosIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlLCBib29s
IGNhblNwZWN1bGF0ZSwgYm9vbCBzaG91bGRCb3gpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBD
bGFzc1R5cGU+IHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uQ29tbW9uKEdQUlJlZywgUmVnaXN0ZXJl
ZFN0cnVjdHVyZSwgR1BSUmVnLCBHUFJSZWcsIEdQUlJlZywgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0Jiwgc2l6ZV90LCBGdW5jdGlvbkV4ZWN1dGFibGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdG
dW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsK
QEAgLTE1MjgsNiArMTUzNCwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJh
YmxlUHJvcGVydHkoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSop
OworCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoTm9k
ZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5vZGUqKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFz
UHJvcGVydHkoTm9kZSosIFNsb3dQYXRoRnVuY3Rpb25UeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVF
bnVtZXJhdG9ySW5CeVZhbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckhhc093
blByb3BlcnR5KE5vZGUqKTsKKwogICAgIHZvaWQgY29tcGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJ
ZERpcmVjdChOb2RlKik7CkBAIC0xNTY4LDcgKzE1ODUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b21waWxlQ2FsbE51bWJlckNvbnN0cnVjdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dT
aGFkb3dDaGlja2VuUHJvbG9ndWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1NoYWRvd0No
aWNrZW5UYWlsKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9k
ZSosIFNfSklUT3BlcmF0aW9uX0dDWik7CisgICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1osIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0
Q2F0Y2hMb2NhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ2xlYXJDYXRjaExvY2FscyhOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlUHJvZmlsZVR5cGUoTm9kZSopOwpAQCAtMTkyNiw2ICsxOTQz
LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKKyAg
ICBKU1ZhbHVlUmVncyByZWdzKCkgeyByZXR1cm4ganNWYWx1ZVJlZ3MoKTsgfQorCiAjaWYgVVNF
KEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CkBAIC0xOTY1LDcgKzE5ODQsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5bG9hZEdQ
UigpKTsKICAgICB9CiAKLSAgICBHUFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoKQorICAg
IEdQUlJlZyBncHIoV2hpY2hWYWx1ZVdvcmQgd2hpY2ggPSBQYXlsb2FkV29yZCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBqc1ZhbHVlUmVncygpLmdwcih3aGljaCk7CiAgICAgfQpAQCAtMjAwMywy
MSArMjAyMiwyMCBAQCBwcml2YXRlOgogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIFN0b3JhZ2VPcGVyYW5kKCkgPSBkZWZh
dWx0OworCiAgICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwg
RWRnZSBlZGdlKQogICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBtX2VkZ2UoZWRnZSkK
ICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRV
c2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKLSAgICAgICAgaWYgKGppdC0+
aXNGaWxsZWQobm9kZSgpKSkKLSAgICAgICAgICAgIGdwcigpOworICAgICAgICBlbXBsYWNlKGpp
dCwgZWRnZSk7CiAgICAgfQogICAgIAogICAgIH5TdG9yYWdlT3BlcmFuZCgpCiAgICAgewotICAg
ICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIG1f
aml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOworICAgICAgICBpZiAobV9ncHJPckludmFsaWQg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFs
aWQpOwogICAgIH0KICAgICAKICAgICBFZGdlIGVkZ2UoKSBjb25zdApAQCAtMjAzNiw2ICsyMDU0
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxT
dG9yYWdlKGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CisK
KyAgICB2b2lkIGVtcGxhY2UoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQorICAgIHsK
KyAgICAgICAgbV9qaXQgPSBqaXQ7CisgICAgICAgIG1fZWRnZSA9IGVkZ2U7CisgICAgICAgIEFT
U0VSVChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgQVNTRVJUKG1f
aml0KTsKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRn
ZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bm9kZSgpKSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgp
CiAgICAgewpAQCAtMjA0Myw5ICsyMDcyLDkgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZh
dGU6Ci0gICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OworICAgIFNwZWN1bGF0aXZlSklUKiBtX2pp
dCB7IG51bGxwdHIgfTsKICAgICBFZGdlIG1fZWRnZTsKLSAgICBHUFJSZWcgbV9ncHJPckludmFs
aWQ7CisgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkIHsgSW52YWxpZEdQUlJlZyB9OwogfTsKIAog
CkBAIC0yMTM0LDExICsyMTYzLDE5IEBAIGNsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHsKIHB1
YmxpYzoKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5KFNwZWN1bGF0aXZlSklUKik7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRp
dmVKSVQqLCBHUFJSZWcgc3BlY2lmaWNQYXlsb2FkKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQor
ICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNwZWNpZmlj
UGF5bG9hZCwgR1BSUmVnIHNwZWNpZmljVGFnKTsKKyNlbmRpZgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRh
ZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0UmVnV29yZCA9IFBheWxvYWRXb3Jk
KTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFJldXNlVGFnLCBK
U1ZhbHVlT3BlcmFuZCYpOwogICAgIH5KU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIAorICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiAhIXJlZ3MoKTsgfQorCisgICAgSlNW
YWx1ZVJlZ3NUZW1wb3JhcnkmIG9wZXJhdG9yPShKU1ZhbHVlUmVnc1RlbXBvcmFyeSYmKSA9IGRl
ZmF1bHQ7CisKICAgICBKU1ZhbHVlUmVncyByZWdzKCk7CiAKIHByaXZhdGU6CkBAIC0yMTUwLDYg
KzIxODcsMjYgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVt
cG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZh
bHVlV29yZCkKKyAgICA6IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCit7Cit9CisjZWxzZQor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hW
YWx1ZVdvcmQgcmVzdWx0V29yZCkKK3sKKyAgICBpZiAocmVzdWx0V29yZCA9PSBQYXlsb2FkV29y
ZCkgeworICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3Bl
cmFuZCk7CisgICAgICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAgICAgIG1f
dGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgIH0KK30KKyNl
bmRpZgorCiBjbGFzcyBGUFJUZW1wb3JhcnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOWQ0MDM2OTYxMGQ4OWU0MWU1MTZmNmM0YTQyNWU1ZmQ3
MTAyYTFiZS4uNTAzYjM0MTQyMWZjNjkxZWIwYjNmMGVlZDBmNTYzZjE4OTBlYzlmYiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCkBAIC0xODEyLDYgKzE4MTIsMzM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVD
b250aWd1b3VzUHV0QnlWYWwoTm9kZSogbm9kZSwgQmFzZU9wZXJhbmRUeXBlJiBiYXNlCiAgICAg
bm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsgICAgCiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29w
ZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBw
cmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAg
ICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisjaWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCisg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwg
SlNWYWx1ZVJlZ3MoKSwgMCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRl
eCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBHUFJSZWcg
aW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0
YUZvcm1hdEpTKTsKKworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1Zh
bHVlUmVncygpLCBub2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkp
OworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAgIGlmICht
X2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgp
ID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVmaXgpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNl
bGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
cHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyBw
cm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3Rk
OjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQ2Vs
bCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3Bl
cnR5UmVncyk7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKKworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFz
ZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5
UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJl
Zml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9k
ZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9q
aXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVl
ZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50YWdHUFIo
KSkpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1f
aml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBB
Y2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIGJhc2VSZWdz
LCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOworCisgICAgICAgIGlm
IChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNw
ZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcg
PSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3Rh
dGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJv
bCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7
CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAg
ICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwg
YmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2Vu
LCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUo
c2xvd1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgY2FzZSBB
cnJheTo6Q29udGlndW91czogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJv
dW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwor
CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEludDMyIDog
RGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgaWYg
KGZvcm1hdCA9PSBEYXRhRm9ybWF0SW50MzIpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7CisKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigK
KyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAgICAgICAg
ICAgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAg
ICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQ
YXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigp
KSB7CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJy
YW5jaElmTm90RW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0UmVncy50
YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJl
Z3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJl
c3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWRWYWx1ZShNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZ3MpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSkpOworCisgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAg
ICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VS
ZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewor
ICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcg
cHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAg
ICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
Zm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
KTsKKworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCks
IHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRG
cm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0LmZwcigp
KSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAg
ICAgICAgIGJveERvdWJsZShyZXN1bHQuZnByKCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAh
cmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwg
bm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcg
dGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsK
KworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAg
bV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAgICAgICAg
Ym94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2Vu
ZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNl
IEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2pp
dC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQo
KSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
KyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJl
c3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoK
KyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjb21waWxl
R2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6IHsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgp
LnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShu
b2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0gfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAt
MjIzMyw3ICsyNTYyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJp
bmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBiYXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVt
cG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAg
ICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQpOworICAg
ICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjI2NSwzMjYgKzI1OTksMjcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAg
IGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBl
KCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICAg
ICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFCTEVfQ09E
RSkKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVD
b3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIGluZGV4
KTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0gICAg
ICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVz
dWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1c2UobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2UoKTsKLQot
ICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFs
dWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5v
ZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAgICAgICAgICAgICAg
IGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2Up
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSku
dXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGls
ZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5
bWJvbChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsgLy8g
U2F2ZSBhIHJlZ2lzdGVyLCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQu
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBi
YXNlLmdwcigpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHBy
b3BlcnR5LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VHUFIsIHByb3BlcnR5UmVncyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7Ci0KLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwgVGFnV29yZCk7Ci0gICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFBh
eWxvYWRXb3JkKTsKLQotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpz
VmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9w
ZXJ0eS5qc1ZhbHVlUmVncygpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4
Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXpl
KCkpOwotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRS
ZWdpc3RlcnMoKTsKLQotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKLQotICAgICAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NU
eXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAgICAgICAgICBiYXNlUmVncywg
cHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKLQotICAgICAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUo
U3BlY1N0cmluZykpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KS5pc1R5cGUoU3BlY1N5bWJvbCkpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNTeW1ib2wgPSB0cnVlOwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aChtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRo
R2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFz
ZVJlZ3MsIHByb3BlcnR5UmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFk
ZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsK
LSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXls
b2FkKHRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
PT0gQXJyYXk6OkludDMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+YXJy
YXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAg
ICAgICBPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBh
eWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1
bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBUYWdPZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRUYWcuZ3ByKCkp
OwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNl
dCksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5j
aElmTm90RW1wdHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0VGFnLmdwcigp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRUYWcuZ3ByKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwor
ICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBqc1ZhbHVlUmVzdWx0OworICAgICAgICBHUFJU
ZW1wb3Jhcnkgb25lUmVnUmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN3aXRjaCAocHJl
ZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0g
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXls
b2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFn
UmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VS
ZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0
LmZwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3Vu
ZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2Fk
RnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIo
KSkpOwotICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwor
ICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6CisgICAgICAgICAgICBjYXNlIERhdGFG
b3JtYXRDZWxsOgorICAgICAgICAgICAgICAgIG9uZVJlZ1Jlc3VsdCA9IEdQUlRlbXBvcmFyeSh0
aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KG9uZVJlZ1Jlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRo
aXMpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAgICAgRlBS
UmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsK
LSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykp
OwotICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5
bG9hZFJlZyk7Ci0KLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAg
ICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5
U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBh
eWxvYWQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0
LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5
bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAg
ICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBE
YXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQgPSBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0ganNWYWx1ZVJl
c3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MikpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5
bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcu
Z3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxv
YWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0g
bV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0g
bV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5
bG9hZFJlZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsK
LSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0g
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9h
ZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAgICAgICBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRp
cmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3Bl
ZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAg
ICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxMzMsMTEgKzQxNjgs
MTkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkp
OworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5v
ZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIo
KSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBpbmRleCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVy
YXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluZGV4Lmdw
cigpLCByZXN1bHQuZ3ByKCkpOyB9KSk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgR2V0
RGlyZWN0UG5hbWU6IHsKQEAgLTQxNTcsNiArNDIwMCw0MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RNb2RlKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RJbmRleChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5l
eHRVcGRhdGVQcm9wZXJ0eU5hbWUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0
QnlWYWwobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRv
ckluQnlWYWw6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTog
eworICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFByb2ZpbGVUeXBlOiB7CiAgICAgICAgIGNvbXBp
bGVQcm9maWxlVHlwZShub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCBiNWUxY2MzZTQyZDJm
YjRjOWQ0ZjEzMTA3ZTk4ZWZlMGIyMDVlNWM3Li42MmZlMjIzZWFhOTBjNDhiYTMyNDJmNDhkNGFl
NDk5ODJhNDA3Yjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTIyNDYsNiArMjI0NiwzNzAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlKiBub2RlKQogICAgIH0KIH0KIAordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1h
dCk+JiBwcmVmaXgpCit7CisgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsK
KyAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhp
dDoKKyAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoKKyAgICBjYXNlIEFycmF5
OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgorICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6Cisg
ICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFkIGFycmF5IG1vZGUgdHlw
ZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKKyAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsK
KworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCksIHJl
c3VsdFJlZ3MuZ3ByKCkpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5
OgorICAgIGNhc2UgQXJyYXk6OkJpZ1VpbnQ2NEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkdlbmVy
aWM6IHsKKyAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkp
IHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQo
KSA9PSBPYmplY3RVc2UpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAgICAgICAgICAgICAg
IGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5
bWJvbChub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBi
YXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6
aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lz
dGVycygpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
KTsKKyAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1h
bnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IHN0dWJJbmZvOworICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIg
PSBJbnZhbGlkR1BSUmVnOworICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6
OkRGR0pJVCkpIHsKKyAgICAgICAgICAgIHN0dWJJbmZvID0gR1BSVGVtcG9yYXJ5KHRoaXMpOwor
ICAgICAgICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby5ncHIoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAg
ICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworCisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJl
Z3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdP
U1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7CisKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgaWYgKCFtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VH
UFIpKTsKKworICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwg
QWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUik7CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCisgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7CisgICAgICAgIGVsc2Ug
aWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUo
U3BlY0ludDMyT25seSkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0lu
dDMyID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKKyAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKKworICAgICAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aChtX2ppdCk7CisKKyAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6REZHSklUKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRo
SnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNs
b3dQYXRoOworICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkp
IHsKKyAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVs
cGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwgU3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xv
d09wZXJhdGlvbigpKSwgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgICAg
ICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJhc2VH
UFIsIHByb3BlcnR5R1BSKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dQYXRo
ID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsK
KyAgICAgICAgfQorCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0
KCkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91
czogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9ybWF0SlMp
OworICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxw
dHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyk7CisgICAgICAgICAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIG5vdEhvbGUu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dCwgbm9kZSwgZm9ybWF0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAg
IEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVz
dWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCksIHJlc3VsdFJlZyk7CisKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZC
b3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuYnJhbmNo
SWZOb3RFbXB0eShyZXN1bHRSZWcpOworICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBw
cm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAg
ICAgICAgICByZXN1bHRSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZykpOworICAgICAgICB9CisKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkRv
dWJsZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQu
ZnByKCk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZv
cm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2Fk
RnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3Vs
dFJlZykpOworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAg
ICAgICAgICAgICBib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYg
IXJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5v
ZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHJlc3VsdElzVW5ib3hlZCA9IG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3Vu
ZHNTYW5lQ2hhaW4oKSAmJiAhKG5vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhl
cik7CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAg
IEZQUlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgc3RkOjp0aWUocmVz
dWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChyZXN1bHRJc1VuYm94ZWQgPyBEYXRhRm9ybWF0RG91
YmxlIDogRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
KworICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJl
Zyk7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWlu
KCkpIHsKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSkgeworICAg
ICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBO
YU47CisgICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4p
LCB0ZW1wUmVnKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoIXJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3Vs
dCh0ZW1wUmVnLCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgICAg
ICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAg
ICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJ
bmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkp
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAg
ICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncy5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRl
bXBSZWcpKTsKKyAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVncy5ncHIo
KSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Cisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAg
ICB9CisKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOgorICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
ICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigp
OworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVn
cygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworCisgICAgICAgICAgICBtX2ppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkp
LCByZXN1bHRHUFIpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUs
IEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0R1BSKSk7
CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJl
Zml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdz
LmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisK
KyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICBt
X2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkpLCByZXN1bHRSZWcpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aElmRW1wdHkocmVzdWx0UmVnKSk7CisKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWcs
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25T
dHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGly
ZWN0QXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhu
b2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHBy
ZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKKyAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6VWludDhBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJh
eToKKyAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50MzJB
cnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6Rmxv
YXQ2NEFycmF5OiB7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1v
ZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsK
QEAgLTI3MTMsNyArMzA3NywxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24g
U3RyaW5nQ2hhckF0IG5vZGUgaGF2aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0g
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAg
ICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlMgfHwgcHJlZmVycmVk
Rm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjc0NiwzNDUgKzMxMTUsMjEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6
IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBBcnJheTo6QW55VHlwZWRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0
OgotICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ0FyZ3VtZW50czoKLSAgICAgICAgY2Fz
ZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICAgICAgY2FzZSBBcnJheTo6VW5w
cm9maWxlZDoKLSAgICAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiQmFk
IGFycmF5IG1vZGUgdHlwZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVuZGVjaWRlZDogewotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOwotICAgICAgICAgICAgR1BS
UmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7Ci0KLSAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCks
IHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkJpZ1VpbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAg
ICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9
PSBPYmplY3RVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09
IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9y
T2JqZWN0V2l0aFN5bWJvbChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVy
dHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICAgICAgICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbCwgcmVzdWx0
LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIp
OwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGQ6
Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gc3R1YkluZm87Ci0gICAgICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgcHJvcGVydHkp
OwotCi0gICAgICAgICAgICBHUFJSZWcgc3R1YkluZm9HUFIgPSBJbnZhbGlkR1BSUmVnOwotICAg
ICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Ci0gICAg
ICAgICAgICAgICAgc3R1YkluZm8uZW1wbGFjZSh0aGlzKTsKLSAgICAgICAgICAgICAgICBzdHVi
SW5mb0dQUiA9IHN0dWJJbmZvLT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOwotICAgICAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOwotCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICgh
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVj
Q2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZUdQUikpOwotCi0gICAgICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29k
ZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAot
ICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0
eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKLQotICAgICAgICAg
ICAgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5
cGUoU3BlY1N0cmluZykpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5
SXNTdHJpbmcgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aChtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChnZW4uc2xvd1BhdGhKdW1wKCkpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xv
d1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoOwotICAgICAgICAgICAgaWYgKEpJVENvZGU6OnVzZURh
dGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aElDQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBnZW4uc3R1
YkluZm8oKSwgc3R1YkluZm9HUFIsIENDYWxsSGVscGVyczo6QWRkcmVzcyhzdHViSW5mb0dQUiwg
U3RydWN0dXJlU3R1YkluZm86Om9mZnNldE9mU2xvd09wZXJhdGlvbigpKSwgb3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3Jp
Z2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikp
LCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4s
IHNsb3dQYXRoLmdldCgpKTsKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1v
dmUoc2xvd1BhdGgpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6
SW50MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdz
KCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewot
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFy
cmF5OjpDb250aWd1b3VzKTsKLSAgICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
bm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0LmdwcigpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbm90SG9sZS5s
aW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9s
ZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0
LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlLCBub2RlLT5hcnJheU1v
ZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9y
bWF0SlMpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNv
bXBpbGVHZXRCeVZhbChub2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgICAgICAgICAgc3dpdGNoIChwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdERvdWJsZToKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSkpOwotCi0gICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQpLCByZXN1bHRSZWcpOwotCi0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2Rl
KCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBkb25l
ID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIHNs
b3dDYXNlcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhO
ZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW0zMigwKSkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0UmVnKTsKLSAg
ICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3Vs
dFJlZykpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywg
cHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotCi0gICAgICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIEZQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZnByKCk7Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSkpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCksIHJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFu
Y2hJZk5hTihyZXN1bHRSZWcpKTsKLSAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0
UmVnLCBub2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzU2FuZUNoYWluKCkgJiYgIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0Fz
T3RoZXIpOwotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
R1BSVGVtcG9yYXJ5PiByZXN1bHQ7Ci0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEdQUlJlZz4g
cmVzdWx0UmVnOwotICAgICAgICAgICAgaWYgKCFyZXN1bHRJc1VuYm94ZWQpIHsKLSAgICAgICAg
ICAgICAgICByZXN1bHQuZW1wbGFjZSh0aGlzKTsKLSAgICAgICAgICAgICAgICByZXN1bHRSZWcg
PSByZXN1bHQtPmdwcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7Ci0gICAgICAgICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIHRlbXBSZWcpOwotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0
T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgIGlmIChyZXN1bHRJc1VuYm94
ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxw
dHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgTmFOID0gUE5hTjsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4pLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgICAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZVJlc3Vs
dCh0ZW1wUmVnLCBub2RlKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAg
ICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCAq
cmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoKnJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgICAgICBi
b3hEb3VibGUodGVtcFJlZywgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJ
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToK
LSAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9q
aXQuYnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ID09IERhdGFG
b3JtYXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50MzIpOworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAg
ICAgICAgIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVz
dWx0LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOwotICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0
UmVnKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRSZWcpKTsKLSAgICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVy
dHlSZWcpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBB
cnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRz
OgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgot
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICBj
YXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5Ogot
ICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50
OENsYW1wZWRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJy
YXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheTogewotICAgICAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwot
ICAgICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTM1ODEsNyArMzYyNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IGZhbHNlOwotICAgICAgICBzZXRJ
bnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2RlLCByZXN1bHRHUFIsIHR5cGUsIGNhblNwZWN1bGF0
ZSk7CisgICAgICAgIGNvbnN0ZXhwciBib29sIHNob3VsZEJveCA9IGZhbHNlOworICAgICAgICBz
ZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCB0
eXBlLCBjYW5TcGVjdWxhdGUsIHNob3VsZEJveCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAgICAgCkBAIC01MjkxLDExICs1MzM3LDE5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgSGFzSW5kZXhl
ZFByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHks
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4g
c3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7Ci0gICAg
ICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgaW5kZXgpOworCisgICAgICAgIGNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVy
biBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAg
ICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7CkBAIC01MzE1LDYgKzUzNjks
NDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBj
b21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZTogeworICAgICAgICBj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgobm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAg
ICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAg
ICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVt
ZXJhdG9ySW5CeVZhbChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBF
bnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBQcm9m
aWxlVHlwZTogewogICAgICAgICBjb21waWxlUHJvZmlsZVR5cGUobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggMTE3NmQzZTdhZjI4MzMyYjAzMDc0MWI0ZDljNDBmMGJl
ZjFkMDM4Yi4uNWY1MWYyMjUxMDRmOWJhNTIyNjk4ZGQwMzY3NWJkZDViZTI3NWZhYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwCkBAIC0yNzMsNiArMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
YXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBOdWtl
U3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0dGVy
Zmx5OgorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERpcmVj
dDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtMzUyLDYgKzM1Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICAg
ICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2Ug
R2V0QnV0dGVyZmx5OgorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRC
eVZhbERpcmVjdDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAppbmRl
eCAyZTJmMDdkZmM3ZThjMTNkZGIwZWRkNWEyZDA3YTVkODcyZTE3OTA4Li45ZWQ4NzEzM2Y3NzIz
MGUwZTFiZDQ0NWYzMDYyMzQzN2ZjZDYzNDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApAQCAtMTE0LDYgKzExNCw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4LCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkgXAog
ICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfbW9kZVNldCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpt
b2RlU2V0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmxhZ3MsIEpTUm9wZVN0
cmluZzo6b2Zmc2V0T2ZGbGFncygpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2xlbmd0aCwg
SlNSb3BlU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5n
X2ZpYmVyMCwgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVyMCgpKSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggYTFhNWZkMjQ0Y2YyMTEw
MzI2NDE5N2E3NmFlMzBjN2Y2MGY3OWU2NC4uNmU1ZDEwZDQzMzdjN2EzZGE2MTIzYjM1MGU2OGUy
NzlmMTBiNWI2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcApAQCAtMjk4LDYgKzI5OCwxMyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToK
ICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6CiAgICAgY2FzZSBUb0luZGV4U3Ry
aW5nOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRy
YWN0SW5kZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAg
ICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgor
ICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgQm90dG9tVmFsdWU6
CiAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9u
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4
IDZmZTI5ZDk5ZmE0NDE0OWMxNDZiMjFhYjQxMDRjNDA4MDM2OWYzNzEuLjlmYzJjNmZmNzRlMDA0
NTI5NWI0MzA5NmY5MzVmMDY0N2ExZWRlMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTEwMiw2ICsxMDIsOCBAQAogI2luY2x1ZGUgPHd0
Zi9SZWN1cnNhYmxlTGFtYmRhLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZFVub3JkZXJlZFNldC5oPgog
CisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCisKICN1bmRlZiBSRUxFQVNFX0FTU0VSVAogI2Rl
ZmluZSBSRUxFQVNFX0FTU0VSVChhc3NlcnRpb24pIGRvIHsgXAogICAgIGlmICghKGFzc2VydGlv
bikpIHsgXApAQCAtMTU1OCw2ICsxNTYwLDI3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgVG9J
bmRleFN0cmluZzoKICAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9k
ZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
SW5kZXg6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0
eU5hbWU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5h
bWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZh
bDoKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICAgICAgY29t
cGlsZUVudW1lcmF0b3JJbkJ5VmFsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRv
ckhhc093blByb3BlcnR5KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUlt
bWVkaWF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01MDIwLDcgKzUwNDMsNyBAQCBwcml2
YXRlOgogICAgICAgICAvLyB3ZSBkb21pbmF0ZSB0aGVtLgogICAgIH0KICAgICAKLSAgICB2b2lk
IGNvbXBpbGVHZXRCeVZhbCgpCisgICAgTFZhbHVlIGNvbXBpbGVHZXRCeVZhbEltcGwoKQogICAg
IHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA0Nyw4ICs1MDcwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQg
aW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAgICAgICAgICAgICAgICAgIGVuc3Vy
ZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0
KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBt
X291dC5uZXdCbG9jaygpOwpAQCAtNTA4MCw4ICs1MTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9y
YWdlIGFsaXZlLgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1
bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
biBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CkBAIC01MTAwLDggKzUx
MjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBu
b1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVO
b3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBtX25vZGUtPmFycmF5TW9kZSgpLmlzT3V0
T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVz
ZXNBc090aGVyKTsKQEAgLTUxNDEsMTggKzUxNjIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKQotICAgICAgICAgICAgICAgIHNldERvdWJs
ZShtX291dC5waGkoRG91YmxlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RS
ZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisKKyAg
ICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CiAgICAgICAg
ICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MSkpOwogCiAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9u
b2RlLCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpKTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogewpAQCAtNTE2OSw4ICs1MTg4LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUo
KSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5kcyk7CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVy
IGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMu
RGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsK
LSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkNjQo
YWRkcmVzcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91
bmRzID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUxOTIsOCArNTIxMCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQs
IHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CkBAIC01MjQ2LDggKzUyNjMsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50
NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgpAQCAtNTI1NiwyNCArNTI3Miwy
MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29u
dGFpbnMobV9ub2RlKSkgewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdV
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdFN5bWJvbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgSW50NjQs
IG9wZXJhdGlvbkdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAg
ICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxv
d0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAxKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ub2Rl
OwpAQCAtNTM3Myw4ICs1Mzg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CkBAIC01MzkwLDggKzU0MDIs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIG5v
VmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3Jh
Z2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0g
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01NDE3
LDEzICs1NDI4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNl
IGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgZW5z
dXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6
IHsKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaW5nQ2hhckF0SW1wbCgpOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpAQCAtNTQ0
OCw5ICs1NDU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGxvYWRGcm9tSW50VHlwZWRBcnJheShwb2ludGVyLCB0eXBlKTsKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9y
YWdlIGFsaXZlLgogICAgICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNl
KTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0
LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwpAQCAtNTQ2OSw4
ICs1NDc2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAv
LyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxp
dmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAg
ICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApA
QCAtNTQ4MCw4ICs1NDg2LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVj
dFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBj
b21waWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGNvbXBpbGVH
ZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJy
YXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7Cisg
ICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOworICAgICAgICAg
ICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdC0+
dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBAIC04NTcxLDcgKzg1OTMsNyBAQCBw
cml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwg
ZW1wdHlSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxl
U3RyaW5nQ2hhckF0KCkKKyAgICBMVmFsdWUgY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKQogICAg
IHsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dTdHJpbmcobV9ncmFwaC5jaGlsZChtX25vZGUs
IDApKTsKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC5jaGlsZChtX25v
ZGUsIDEpKTsKQEAgLTg2NzksNyArODcwMSwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBr
ZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICBl
bnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
SW50NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgcmVzdWx0
cyk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICB7CisgICAg
ICAgIHNldEpTVmFsdWUoY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQpAQCAtMTI5MDYsMTcgKzEyOTMzLDE2
IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7CiAgICAgfQogICAg
IAotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1og
c2xvd1BhdGhPcGVyYXRpb24pCisgICAgTFZhbHVlIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJ
bXBsKExWYWx1ZSBpbmRleCwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQog
ICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBs
b3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7Ci0gICAgICAgIExWYWx1ZSBp
bmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CiAgICAgICAg
IEFycmF5TW9kZSBtb2RlID0gbV9ub2RlLT5hcnJheU1vZGUoKTsKIAogICAgICAgICBzd2l0Y2gg
KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAg
ICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIElu
ZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtb2RlLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwog
ICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMu
aW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwpAQCAtMTI5NTEsMTEgKzEyOTc3LDEwIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQz
MiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0
b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0
b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSW5kZXhlZEFi
c3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXM7CiAgICAg
ICAgICAgICAKQEAgLTEyOTg5LDEyICsxMzAxNCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xl
YW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNoZWNr
SG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0
b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0
b3JhZ2VDaGlsZEluZGV4KCkpKTsKIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2Ug
PSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEzMDI2LDE3ICsxMzA1MCwyMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xl
YW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tI
b2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6IHsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xv
d1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSkp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubm90WmVybzY0
KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVj
dCksIGJhc2UsIGluZGV4KSk7CiAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAorICAgIHZv
aWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhP
cGVyYXRpb24pCisgICAgeworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBzZXRCb29sZWFuKGNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHlJbXBsKGluZGV4LCBzbG93UGF0aE9wZXJhdGlvbikpOworICAgIH0KKwog
ICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpCiAgICAgewogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwpAQCAtMTMyMTcsNiArMTMyNDUsMjQ3IEBAIHByaXZhdGU6CiAgICAg
ICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBz
ZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSwgaW5kZXgpKTsKICAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgpCisgICAgeworICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2Vt
YW50aWMpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMSkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93
Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworCisgICAgICAgIGlmIChtX25v
ZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBt
X25vZGUsIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSk7CisKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGluY3JlbWVudCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBjaGVja0hhc1Byb3BlcnR5ID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hv
cihpbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5kZXhGb3JIYXNQ
cm9wZXJ0eSA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2go
bV9vdXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGlu
Y3JlbWVudCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAg
ICAgICAgICAgTFZhbHVlIGluZGV4UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgp
OworICAgICAgICAgICAgTFZhbHVlIGluY3JlbWVudGVkSW5kZXggPSBtX291dC5hZGQoaW5kZXhQ
aGksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3JlbWVu
dGVkSW5kZXhSZXN1bHQgPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAg
ICAgICBWYWx1ZUZyb21CbG9jayBmaW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291dC5hbmNob3Io
aW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubGVzc1Ro
YW4oaW5jcmVtZW50ZWRJbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVja0hhc1Byb3Bl
cnR5KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRU
byhjaGVja0hhc1Byb3BlcnR5KTsKKyAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUluZGV4ID0g
bV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSwgaW5jcmVtZW50ZWRJ
bmRleFJlc3VsdCk7CisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4UGhp
LCBtX291dC5hbmNob3IocHJvcGVydHlJbmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZmluYWxQcm9wZXJ0eUluZGV4ID0gbV9vdXQuYW5jaG9yKHByb3BlcnR5SW5kZXgpOworICAg
ICAgICAgICAgTFZhbHVlIGhhc1Byb3BlcnR5ID0gY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUlt
cGwocHJvcGVydHlJbmRleCwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7
CisgICAgICAgICAgICBtX291dC5icmFuY2goaGFzUHJvcGVydHksIHVuc3VyZShjb250aW51YXRp
b24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUgZmluYWxJbmRleCA9IG1fb3V0LnBoaShJ
bnQzMiwgZmluYWxJbmNyZW1lbnRlZEluZGV4LCBmaW5hbFByb3BlcnR5SW5kZXgpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGZpbmFsSW5kZXgsIElu
dDY0KSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1
aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgPDwgMzIpKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBFZGdlJiBiYXNlRWRn
ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+
ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1v
ZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1
ZSBiYXNlID0gbG93Q2VsbChiYXNlRWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2Fj
aGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9o
ZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5v
dEVxdWFsKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9tb2RlU2V0KSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJ
bmRleCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9v
dXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50
KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFk
ZChpbmRleCwgbV9vdXQuaW50MzJPbmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVu
dGVkSW5kZXgpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJv
RXh0KGluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2Rl
KSA8PCAzMikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExW
YWx1ZSBiYXNlID0gbG93SlNWYWx1ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpTVmFsdWUodm1D
YWxsKEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCgpCisg
ICAgeworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKTsKKworICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihib3hlZFBhaXIpKTsK
KyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKCkKKyAg
ICB7CisgICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOworCisgICAgICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0
LmxTaHIoYm94ZWRQYWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQz
MihtX291dC5iaXRBbmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNvdmVyeSBmb3Ig
dGhpcyBub2RlIHNpbmNlIGl0J3MgImVmZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxpdmUgaW4gYnl0
ZWNvZGUuCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUo
KQorICAgIHsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgTFZhbHVlIGluZGV4
ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7CisgICAgfQorCisgICAg
dm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIEVkZ2UgYmFz
ZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAgIEVkZ2UgcHJv
cGVydHlOYW1lRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKTsKKyAgICAgICAg
RWRnZSBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKKyAgICAg
ICAgRWRnZSBpbmRleEVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMyk7CisKKyAg
ICAgICAgTFZhbHVlIGJhc2UgPSBERkc6OmlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpID8gbG93
Q2VsbChiYXNlRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKSA6IGxvd0pTVmFsdWUoYmFz
ZUVkZ2UpOworCisgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gc3RvcmFnZUVkZ2UgPyBsb3dTdG9y
YWdlKHN0b3JhZ2VFZGdlKSA6IG51bGxwdHI7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gbWF0ZXJp
YWxpemUgdGhlIHByb3BlcnR5TmFtZSBoZXJlIGluIGNhc2UgaXQgcmVxdWlyZXMgYm94aW5nIHNp
bmNlIHRoZSBJQyBwYXRoIHdvbid0IGRvbWluYXRlIHN1YnNlcXVlbnQgdXNlcyBpbiBzdWJzZXF1
ZW50IG5vZGVzLgorICAgICAgICAvLyBJZiBpdCdzIGFuIEludDMyIGFuZCB3ZSB1c2UgaXQgYXMg
c3VjaCB0aGlzIGJveGluZyB3aWxsIGJlIERDRSdkIGJ5IGIzIGxhdGVyIGFueXdheS4KKyAgICAg
ICAgbG93SlNWYWx1ZShwcm9wZXJ0eU5hbWVFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworCisKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIoaW5kZXhFZGdlKTsKKyAgICAg
ICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNCkp
OworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDUpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjaGVja1N0cnVjdHVyZUJsb2Nr
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJbmxpbmVPck91
dE9mTGluZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5s
aW5lTG9hZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0
T2ZMaW5lTG9hZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
Z2VuZXJpY0lDQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIExWYWx1ZSBpc05vdE5h
bWVkID0gbV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE5hbWVkLCB1bnN1cmUo
Z2VuZXJpY0lDQmxvY2spLCB1bnN1cmUoY2hlY2tTdHJ1Y3R1cmVCbG9jaykpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNoZWNrU3RydWN0dXJlQmxvY2spOworICAgICAgICAvLyBUT0RPIGNo
ZWNrIGNlbGw/CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRDsKKyAgICAgICAgYXV0byBzdHJ1
Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2Uubm9kZSgpKS5tX3N0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpCisgICAgICAgICAgICBzdHJ1Y3R1
cmVJRCA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0Nl
bGxfc3RydWN0dXJlSUQpOworCisgICAgICAgIExWYWx1ZSBoYXNFbnVtZXJhdG9yU3RydWN0dXJl
ID0gbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hl
YXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpOworCisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0OworICAgICAgICBp
ZiAoaW5kZXhFZGdlLm5vZGUoKSA9PSBwcm9wZXJ0eU5hbWVFZGdlLm5vZGUoKSkgeworICAgICAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJhZFN0cnVj
dHVyZVNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5j
aChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5lT3JPdXRPZkxpbmVC
bG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhiYWRTdHJ1Y3R1cmVTbG93UGF0aCk7CisgICAgICAgICAgICBiYWRTdHJ1Y3R1cmVTbG93
UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVudW1lcmF0
b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNl
LCBpbmRleCwgZW51bWVyYXRvcikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5lT3JPdXRP
ZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBpbmxp
bmVDYXBhY2l0eSA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0
aWVzID0gZmFsc2U7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGhhc05v
T3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Cisg
ICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5
KQorICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOwor
ICAgICAgICBMVmFsdWUgaXNJbmxpbmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291
dC5pbnQzMk9uZSA6IG1fb3V0LmJlbG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaChpc0lubGluZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayksIHVuc3VyZShv
dXRPZkxpbmVMb2FkQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2Fk
QmxvY2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmxpbmVSZXN1bHQgPSBtX291dC5hbmNo
b3IoCisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJv
cGVydGllcy5hdEFueU51bWJlcigpLAorICAgICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9F
eHQoaW5kZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3Rv
cmFnZSgpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9hZEJsb2NrKTsKKyAgICAgICAgaWYgKCFzdG9yYWdl
KQorICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09i
amVjdF9idXR0ZXJmbHkpOworCisgICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBtX291dC5zaWdu
RXh0MzJUbzY0KAorICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgaW5saW5l
Q2FwYWNpdHkpKSk7CisgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9m
TGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291
dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJl
YWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZ2VuZXJp
Y0lDQmxvY2spOworICAgICAgICBMVmFsdWUgZ2VuZXJpY1Jlc3VsdCA9IGNvbXBpbGVHZXRCeVZh
bEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAg
ICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKQorICAgICAg
ICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBib3hJbnQzMihnZW5lcmljUmVzdWx0KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnZW5lcmljUmVzdWx0ID0gc3RyaWN0SW50NTJU
b0pTVmFsdWUoZ2VuZXJpY1Jlc3VsdCk7CisgICAgICAgIH0gZWxzZSBpZiAoZ2VuZXJpY1Jlc3Vs
dC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBib3hEb3Vi
bGUoZ2VuZXJpY1Jlc3VsdCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShJbnQ2NCwgZ2VuZXJpY0lDUmVzdWx0LCBv
dXRPZkxpbmVSZXN1bHQsIGlubGluZVJlc3VsdCk7CisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVT
bG93UGF0aFJlc3VsdCkKKyAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkocmVzdWx0
LCBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdCk7CisgICAgICAgIHNldEpTVmFsdWUocmVzdWx0
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4K
KyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5
cGUgc2xvd1BhdGhGdW5jdGlvbikKKyAgICB7CisgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCk7Cisg
ICAgICAgIExWYWx1ZSBiYXNlID0gYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UgPyBsb3dD
ZWxsKGJhc2VFZGdlKSA6IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBMVmFsdWUgcHJv
cGVydHlOYW1lID0gbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwor
ICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMikpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAzKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzTmFt
ZWRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbEJs
b2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbWF0Y2hlc1N0cnVj
dHVyZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0
aW9uQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC50
ZXN0Tm9uWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUpKSwgdW5zdXJlKGlzTmFtZWRCbG9jayksIHVuc3VyZShvcGVyYXRpb25C
bG9jaykpOworICAgICAgICBtX291dC5hcHBlbmRUbyhpc05hbWVkQmxvY2spOworCisgICAgICAg
IG1fb3V0LmJyYW5jaChpc0NlbGwoYmFzZSwgcHJvdmVuVHlwZShiYXNlRWRnZSkpLCB1bnN1cmUo
aXNDZWxsQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhpc0NlbGxCbG9jayk7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0
LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3Is
IG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSksCisg
ICAgICAgICAgICB1c3VhbGx5KG1hdGNoZXNTdHJ1Y3R1cmVCbG9jayksIHJhcmVseShvcGVyYXRp
b25CbG9jaykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1hdGNoZXNTdHJ1Y3R1cmVCbG9j
ayk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5hbWVkUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1f
b3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG9wZXJhdGlvbkJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgb3BlcmF0aW9uUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbih2bUNhbGwo
SW50NjQsIHNsb3dQYXRoRnVuY3Rpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2Us
IHByb3BlcnR5TmFtZSwgaW5kZXgsIG1vZGUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAg
ICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1bHQsIG9wZXJhdGlvblJlc3Vs
dCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCkKKyAgICB7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRv
ckluQnlWYWwpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSgpCisgICAgeworICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJh
dGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CisgICAgfQogICAgIAogICAgIHZvaWQgY29t
cGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCkKICAgICB7CkBAIC0xNzM0NCw3ICsxNzYxMyw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX25vZGUtPnNob3Vs
ZFNwZWN1bGF0ZUludDMyKCkgJiYgY2FuU3BlY3VsYXRlKSB7CiAgICAgICAgICAgICBzcGVjdWxh
dGUoCiAgICAgICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQu
bGVzc1RoYW4ocmVzdWx0LCBtX291dC5pbnQzMlplcm8pKTsKQEAgLTIwMjk2LDYgKzIwNTY1LDI3
IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgfQogCisgICAg
Ly8gVGhpcyBvbmx5IHdvcmtzIGZvciBpbnRzIHJpZ2h0IG5vdy4KKyAgICBQYXRjaHBvaW50VmFs
dWUqIGRhdGFMb2dGb3JEZWJ1Z2dpbmcoY29uc3QgY2hhciogcHJlZml4LCBMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBQYXRjaHBvaW50VmFsdWUqIHJlc3VsdCA9IG1fb3V0LnBhdGNocG9p
bnQoVm9pZCk7CisgICAgICAgIHJlc3VsdC0+ZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0gdHJ1
ZTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQodmFsdWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6
cmVnVDApKTsKKyAgICAgICAgVHlwZSB2YWx1ZVR5cGUgPSB2YWx1ZS0+dHlwZSgpOworICAgICAg
ICByZXN1bHQtPnNldEdlbmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFj
a21hcEdlbmVyYXRpb25QYXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJl
Z2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgIGppdC5wcm9iZURl
YnVnKFs9XSAoUHJvYmU6OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dmFsdWVUeXBlID09IEludDMyKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4ocHJlZml4
LCBjb250ZXh0LmdwcjxpbnQzMl90PihHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8
SlNWYWx1ZT4oR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsK
KworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogICAgIEF2YWlsYWJpbGl0eU1hcCYg
YXZhaWxhYmlsaXR5TWFwKCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZh
aWxhYmlsaXR5OyB9CiAgICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYiBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCmluZGV4IDczMTcxMDA5NmNmM2Uy
NDk4YWU0NWRkYTI2YWE4MmU3OWNkNDZhNGUuLjY5N2RlOGQ5OGYxOWRlMzllNDFjNDI0YWI1ODQw
OWY0ZjUxOWIwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
RFNMLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCkBAIC0x
MzgsNiArMTM4LDcgQEAgbW9kdWxlIERTTAogI2luY2x1ZGUgIkdldEJ5VmFsSGlzdG9yeS5oIgog
I2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSXRlcmF0aW9uTW9kZU1ldGFkYXRh
LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bj
b2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5
SWRTdGF0dXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
LmgKaW5kZXggNDQ0NjM1ZTk4MGQ5MGFmODM3ZWJkNjNiOTYyZmFlZGUyZWM1MzUwMy4uZDg3OWM5
MGJlMzExNzg2MjMzZjUyNmIxODNlZGYxY2IzYzdiYjM4YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDYWxsRnJh
bWUqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KENvZGVCbG9j
ayopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNTY29wZSop
OwotICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNPYmplY3QqKTsK
KyAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTQ2VsbCopOwogICAg
ICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oRW5jb2RlZEpTVmFsdWUpOwog
CiAgICAgICAgIGludDMyX3QgaSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCmluZGV4IGM1NmVmNWU0NTU0Y2IxMDNh
YmViZTcyZTYyOThmOGM0OGFhZDk4NjAuLjU5M2VmNjY2OGRlMmUwM2E2NTliMzlmMzFhZjYwZjg4
YzI3ODM5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9S
ZWdpc3RlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
UmVnaXN0ZXJJbmxpbmVzLmgKQEAgLTYzLDcgKzYzLDcgQEAgQUxXQVlTX0lOTElORSBSZWdpc3Rl
ciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICByZXR1cm4g
KnRoaXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0o
SlNPYmplY3QqIG9iamVjdCkKK0FMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVy
YXRvcj0oSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgdS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKG9iamVjdCkpOwogICAgIHJldHVybiAqdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IGFjOGI1MTM3ZDg1MzU0NTA2YWVlZGNlZGJk
MWM1YmQ3NzI1NzljMDEuLjQxNTllN2U1MDQ5NjkzN2VlMWU1NmFmYjdjMjBhZTljZjJhODllZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaApAQCAtODg5
LDcgKzg4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoCiAgICAgICAgICAg
ICBCZWxvdywgQWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb3RlIHRo
YXQgZmlyc3QgYW5kIGxhc3QgYXJlIGluY2x1c2l2ZS4KICAgICBKdW1wIGJyYW5jaElmVHlwZShH
UFJSZWcgY2VsbEdQUiwgSlNUeXBlUmFuZ2UgcmFuZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCmluZGV4IDQyYjhjYWY1ZjVjYjhjNGI1ZjNhZGViM2VkYTQ3YWIyNjkwZDQ5MDQu
LjNhODQ1YWFiN2MyNjFmMjU1NDZiNjA3NmM2NTliNjE4Y2E5NGYzZjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKQEAgLTMwOCwxMCArMzA4LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJl
YWQpCiAgICAgICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCiAgICAgICAgIERF
RklORV9TTE9XX09QKHNwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoKQotICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0
eSkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAg
ICAgIERFRklORV9TTE9XX09QKHRvX2luZGV4X3N0cmluZykKKyAgICAgICAgREVGSU5FX1NMT1df
T1AoZW51bWVyYXRvcl9uZXh0KQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0
X2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVu
dHMpCiAgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQpAQCAt
MzY1LDYgKzM2Myw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAg
ICAgREVGSU5FX09QKG9wX2dldF9ieV9pZF93aXRoX3RoaXMpCiAgICAgICAgIERFRklORV9PUChv
cF9nZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X3ZhbCkKKyAg
ICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5F
X09QKG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3ByaXZhdGVf
bmFtZSkKICAgICAgICAgREVGSU5FX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAgICBE
RUZJTkVfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTQ3MywxNCArNDc0LDYgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0
X2Zyb21fYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX2FyZ3VtZW50cykK
IAotICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkK
LSAgICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkK
LSAgICAgICAgREVGSU5FX09QKG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAg
ICBERUZJTkVfT1Aob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfT1Ao
b3BfZ2V0X2RpcmVjdF9wbmFtZSkKLSAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3Jfc3Ry
dWN0dXJlX3BuYW1lKQotICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lKQotICAgICAgICAgICAgCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNr
ZW5fcHJvbG9ndWUpCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bCkKIApAQCAtNTc4LDYgKzU3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9nZXRfcHJpdmF0ZV9uYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc2V0
X3ByaXZhdGVfYnJhbmQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja19wcml2
YXRlX2JyYW5kKQpAQCAtNjA5LDcgKzYwMyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3Bfc3ViKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2VudW1l
cmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgpAQCAt
NjQyLDExICs2MzUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChub3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKHN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuc3Ry
aWN0ZXEpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9kaXJlY3RfcG5hbWUp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9wcm90b3R5cGVfb2YpCi0gICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluX3N0cnVjdHVyZV9w
cm9wZXJ0eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCmluZGV4IDQ4N2E1YWM1YjhlNWQ4YTlkODBiMmM2ZDMwNmUwODE1MjFiODI4MTQuLjRmYzlh
MDJiNzI5YTMyOTQ1Yjc1ODRmNzhhMTYzNWRlNmE4YjJmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaApAQCAtNjcwLDIxICs2NzAsMjMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBPcENvZGVUeXBlPgotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19l
bnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0
X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3Bf
ZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9s
b2d1ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE9wY29kZVR5cGU+CisgICAgICAgIHZvaWQgZ2VuZXJhdGVHZXRCeVZhbFNsb3dD
YXNlKGNvbnN0IE9wY29kZVR5cGUmLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0
aEZ1bmN0aW9uVHlwZT4KKyAgICAgICAgdm9pZCBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5
SW1wbChjb25zdCBJbnN0cnVjdGlvbiosIGNvbnN0IE9wY29kZVR5cGUmLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSk7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3du
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19v
cF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkBAIC03MzUsNyArNzM3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJp
dmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xv
d19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9v
cF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5kZXggZjZkYjNmNTljNGFhNGUwMjdhMTU2MTFlZGJiYTI2
MWNhZDhlZmVkNi4uOWJhMTBlZDY3NzJmYWVjM2YyMGU2MzRiYWJlMTRhZGQ5YTEwODkwNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0xNjkyLDQ2ICsxNjky
LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVy
ZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENvZGVUeXBlPigp
OwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51
bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7
Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9v
cF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293
bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BJblN0
cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCiB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAg
ICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgCisK
ICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgCisKICAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBh
bmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KICAgICBK
dW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rp
b24sIGFycmF5TW9kZSwgYmFkVHlwZSwgbnVsbHB0cik7CkBAIC0xNzM5LDcgKzE3MDUsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgCisKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nh
c2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKIApAQCAtMTc0OCw3ICsxNzE0LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBK
SVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3Bl
cnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2Nr
KS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAKKwogICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7CiAgICAgICAgIGJ5
VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJS
b3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAg
ICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNJbmRleGVkUHJv
cGVydHlHZW5lcmljOwpAQCAtMTc1OCwxNzEgKzE3MjQsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdAogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCBy
ZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDEpOwotCi0gICAgLy8g
VGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBp
bnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2UgY2hl
Y2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxl
bmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNpZ25l
ZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2Ug
dGhlIHRvdGFsIGFsbG9jYXRpb24KLSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdi
KS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0
ZW5kaW5nIHRoZSB2YWx1ZQotICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0
J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVy
IHRoYW4gc2lnbgotICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8g
cmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRvV29y
ZChyZWdUMSwgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Qy
LCBwcm9maWxlKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBy
ZWdUMik7Ci0KLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxl
KTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KLSAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1w
TGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1vZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0KLSAgICBpZiAoIUpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dD
YXNlKGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFi
ZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qp
OwotCi0gICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9i
eXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRv
bmUsIG5leHRIb3RQYXRoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVy
YWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUu
bV9wcm9wZXJ0eTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVsIHNs
b3dQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0K
LSAgICBDYWxsIGNhbGw7Ci0gICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNl
bGluZUpJVCkpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
YnlWYWxJbmZvKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248
ZGVjbHR5cGUob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCk+KEFkZHJlc3MoR1BS
SW5mbzo6bm9uQXJnR1BSMCwgQnlWYWxJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRz
dCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVn
VDEsIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIFRydXN0
ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBieVZh
bEluZm8pOwotCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGly
ZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGlu
ZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNl
bGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0
cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBl
bnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFj
Y2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIo
cmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNF
aWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICAvLyBP
dGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihy
ZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0
dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdU
MCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0
b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0g
Ynl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAg
ICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQo
KSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSks
IHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRo
aXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWdu
RXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEs
IHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owot
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBi
cmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwg
cmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggNGQ3NDEyNmJlMWUzZGU0MzBk
M2E2ZDljYjdmZGRiNmRjODZmN2ViNC4uMmFlM2EwNGEzYzVmZDJmNjk0MDJjMjVhM2VlM2Y3NDQ4
MjRjOTc3ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcApAQCAtMTE0MiwyMjcgKzExNDIsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHoo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVUeXBl
Pgotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENvZGVUeXBlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1l
cmF0b3IsIHJlZ1QxKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVj
dHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJv
cGVydHlJbXBsPE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3Bf
aGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1p
dF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEluU3RydWN0dXJlUHJvcGVydHk+KGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAgIGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7Ci0gICAgCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICAKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwotICAgIHBh
dGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLQot
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5kb25lVGFyZ2V0KTsKLQotICAg
IGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAg
ICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAg
ICAiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRh
Z2dlZFZhbHVlKCkpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZh
bEluZm8tPm1fYmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRy
VGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRh
Zz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJl
c3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJv
cGVydHlHZW5lcmljKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFi
bGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgp
OwotICAgIAotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1Qz
LCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotCi0g
ICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGlu
ZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8g
V2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3Zl
Y3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2Fz
IHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAo
c2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KLSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRo
YW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChh
bmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQotICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNp
bmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQg
cmF0aGVyIHRoYW4gc2lnbgotICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNp
ZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQz
MlRvV29yZChyZWdUMSwgcmVnVDEpOwotCi0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4
aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VB
cnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBB
cmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3Vy
cmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBh
ZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwot
ICAgIAotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90
UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQo
QnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJs
ZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwotCi0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAg
IAotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWQocHJvcGVy
dHksIHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSwgYnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7
Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0
UG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdp
c3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2Ug
aXMgYSBjZWxsCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAg
Ly8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMik7
Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlu
bGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZM
aW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdl
KCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWln
aHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAg
IGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBk
b25lID0ganVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBv
dXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkpLCByZWdUMik7Ci0gICAgbmVnMzIocmVnVDIpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDMyKEJh
c2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSAr
IE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxv
YWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdU
MCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3Rl
ciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9
IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRl
Y29kZS5tX2luZGV4OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAg
ZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRz
LmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLQotICAgIGRv
bmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsK
LSAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3Vu
ZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91
bmRzLmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEp
OwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLSAgICAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggMTVlMWQzNDU3OWI2ZDRjOGMxNzBkMjM1MGM2
YzM2NDQzZmZlYTQxNS4uZDU5NDU2MjI1ODg5MTVlNzg4Njk5NGQyNmIwOGM5NjcyM2Y3NGFjYyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisj
aW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5j
bHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIK
QEAgLTg2LDEwICs4NywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIE9w
Y29kZVR5cGU+Cit2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29k
ZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwpAQCAtMTM2LDYgKzEzNywxMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIH0KIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFs
U2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpLCBpdGVyKTsKK30K
KwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJ
VFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRv
cihWTSYgdm0pCiB7CkBAIC0zNTQwLDYgKzM1NDYsMTM2IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
R2V0QnlWYWw+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAg
IFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHlOYW1lOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0g
Ynl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKKworICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKKworICAgIGF1
dG8gcmVzdWx0R1BSID0gcmVnVDA7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2Us
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworCisgICAgb3I4KHJl
Z1QyLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7Cisg
ICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KKyAgICBKdW1wIGlz
Tm90TmFtZWRNb2RlID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2Vs
bChyZWdUMCkpOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7CisgICAgSnVtcCBzdHJ1Y3R1
cmVNaXNtYXRjaCA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAg
ICAvLyBDb21wdXRlIHRoZSBvZmZzZXQuCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRl
eCwgcmVnVDEpOworICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidz
IGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICBK
dW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5s
aW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdU
MSk7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZXN1
bHRHUFIpOworCisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gT3RoZXJ3
aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgbmVnMzIocmVnVDEp
OworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgaW50MzJfdCBvZmZz
ZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZs
eShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICBs
b2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVzdWx0R1BSKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAg
ICBzdHJ1Y3R1cmVNaXNtYXRjaC5saW5rKHRoaXMpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0
Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworCisgICAgaXNOb3ROYW1lZE1v
ZGUubGluayh0aGlzKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpKTsKKyAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5kZXguCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworCisgICAgaXNOb3RJbmRleGVkLmxp
bmsodGhpcyk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdU
MiwgcHJvZmlsZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJl
Z1QxKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxv
Y2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVJbmRleCksIENh
bGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIFJlZ2lz
dGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3Mo
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHJlZ1Qy
KTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgaWYgKCFKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UoKTsKKyAgICBt
X2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKKworICAgIGRvbmVDYXNlcy5saW5rKHRoaXMpOworCisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BS
KSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7Cisg
ICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3Bjb2Rl
VHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJVDo6ZW1pdF9lbnVt
ZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIGdl
bmVyYWxDYXNlKQoreworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOworICAgIG9yOChyZWdU
MCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworCisg
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0z
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwocmVnVDApKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgcmVnVDEpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93Q2FzZXMu
bGluayh0aGlzKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3Vy
cmVudEluc3RydWN0aW9uLCBnZW5lcmFsQ2FzZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
KworICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKSwgc2xvd19wYXRoX2Vu
dW1lcmF0b3JfaW5fYnlfdmFsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9o
YXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9u
LCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpLCBz
bG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNThlNWQ1MmZlNWIw
OGFlMjllM2U1ZGRkZTNkNzQ2Nzk2N2YyMzAxOS4uMjU3Y2FlYTI3ODY4ODNiYmEwOGM3YTJjNGIy
MzhkNTA0NGU3Mjk3NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC0xNTA1LDYgKzE1MDUsMjUgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRC
eVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0
b3JfaW5fYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNh
MDAxYTU2NTVlYTFiYjFkYjU5NTczY2Y2MDguLmU3MTgzYTcyYTM2OGYxYTI4MDQ2ODRkMmIwNzY0
N2YyMjA2OGYxMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTE5OTIsMTkgKzE5OTIsMTQgQEAgc2xvd1BhdGhPcChj
cmVhdGVfZ2VuZXJhdG9yKQogc2xvd1BhdGhPcChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQogc2xv
d1BhdGhPcChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCiBzbG93UGF0aE9wKGRlZmluZV9kYXRh
X3Byb3BlcnR5KQotc2xvd1BhdGhPcChlbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCi1zbG93UGF0
aE9wKGVudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKQogc2xvd1BhdGhPcChnZXRfYnlfdmFsX3dp
dGhfdGhpcykKLXNsb3dQYXRoT3AoZ2V0X2RpcmVjdF9wbmFtZSkKLXNsb3dQYXRoT3AoZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKQogc2xvd1BhdGhPcChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLXNs
b3dQYXRoT3AoaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoaGFz
X2VudW1lcmFibGVfcHJvcGVydHkpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfbmV4dCkKK3Nsb3dQ
YXRoT3AoZW51bWVyYXRvcl9nZXRfYnlfdmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2luX2J5
X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogCiBpZiBub3Qg
SlNWQUxVRTY0Ci0gICAgc2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVy
dHkpCi0gICAgc2xvd1BhdGhPcChoYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICBzbG93
UGF0aE9wKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICBzbG93UGF0aE9wKGdldF9wcm90b3R5
cGVfb2YpCiBlbmQKIApAQCAtMjAyMSw3ICsyMDE2LDYgQEAgc2xvd1BhdGhPcChyZXNvbHZlX3Nj
b3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKIHNsb3dQYXRoT3Aoc3ByZWFkKQog
c2xvd1BhdGhPcChzdHJjYXQpCiBzbG93UGF0aE9wKHRocm93X3N0YXRpY19lcnJvcikKLXNsb3dQ
YXRoT3AodG9faW5kZXhfc3RyaW5nKQogc2xvd1BhdGhPcCh0eXBlb2YpCiBzbG93UGF0aE9wKHR5
cGVvZl9pc19vYmplY3QpCiBzbG93UGF0aE9wKHR5cGVvZl9pc19mdW5jdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
aW5kZXggYmQ4ODU1ZWJmZDZmYzE5YjE1YzFiNTg4NmQ0ZmE1NTY0MzgyZDg3ZC4uOGE1ZjdkMjNl
NjQ3NjNiYTI1OWUxYjJjNWQ4N2Y4ZDE2YjgyOWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTMxNDEsMzQg
KzMxNDEsNiBAQCBsbGludE9wKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsLCBPcExvZ1NoYWRv
d0NoaWNrZW5UYWlsLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaQogICAgIGRpc3BhdGNoKCkKIGVuZCkK
IAotbWFjcm8gaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybiwgc2xvd1BhdGhDYWxsKQotICAgIGdldChtX2Jhc2UsIHQwKQotICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQotICAgIGJ0cW56IHQxLCBub3RDZWxsTWFzaywgLnNs
b3dQYXRoCi0KLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2VudW1lcmF0b3IsIHQwKQotICAgIGxv
YWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MV0sIHQxCi0gICAgYmluZXEgdDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6bV9jYWNoZWRTdHJ1Y3R1cmVJRFt0MF0sIC5zbG93UGF0aAotCi0g
ICAgcmV0dXJuKFZhbHVlVHJ1ZSkKLQotLnNsb3dQYXRoOgotICAgIGNhbGxTbG93UGF0aChzbG93
UGF0aENhbGwpCi0gICAgZGlzcGF0Y2goKQotZW5kCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2hh
c19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJl
UHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3Ry
dWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3Bh
dGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9wV2l0
aFJldHVybihvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1
Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0
aF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4o
b3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5LCBPcEluU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBs
KHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaW5fc3RydWN0dXJlX3By
b3BlcnR5KQotZW5kKQotCiBvcChmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50LCBt
YWNybyAoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAogICAgIGxvYWRwIENvZGVCbG9j
azo6bV9nbG9iYWxPYmplY3RbdDBdLCB0MApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggMTEyOTU0YmI5YjZlNTAxMzY4ODNiNzQ1
NmNiMWU4MzE4ZmI1YTUxMS4uYjE1ZDM1NDgwMTliNzJlZDFkNjgzNzc1M2YzMDI2MDI2MGVhM2Rh
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCkBAIC05NjIsMTYxICs5NjIsMTM3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG9fcHJvcGVydHlfa2V5KQogICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5t
X3NyYykuanNWYWx1ZSgpLnRvUHJvcGVydHlLZXlWYWx1ZShnbG9iYWxPYmplY3QpKTsKIH0KIAot
SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG9yKQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEdldEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdG9yVmFsdWUgPSBH
RVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBpZiAoZW51bWVyYXRvclZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAg
IGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKHZtLmVt
cHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpKTsKIAotICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihlbnVt
ZXJhdG9yVmFsdWUuYXNDZWxsKCkpOworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRv
T2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRV
Uk4oanNOdW1iZXIoZW51bWVyYXRvci0+aW5kZXhlZExlbmd0aCgpKSk7CisgICAgUkVUVVJOKHBy
b3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7CiB9CiAKLUpTQ19ERUZJ
TkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9u
ZXh0KQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEVudW1lcmF0b3JOZXh0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFz
ZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1Zh
bHVlKCk7Ci0gICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNl
LT5zdHJ1Y3R1cmUodm0pKTsKLSAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzJBc0FueUludCgp
KTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIHByb3BlcnR5LmFzVUludDMyQXNBbnlJbnQoKSkpKTsKLX0KKyAgICBSZWdpc3Rl
ciYgbW9kZVJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1fbW9kZSk7CisgICAgUmVnaXN0ZXImIGlu
ZGV4UmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAgUmVnaXN0ZXImIG5hbWVS
ZWdpc3RlciA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSk7CiAKLUpTQ19ERUZJTkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5
KQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1l
cmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5
dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3By
b3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmco
KSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVj
b2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS0+c3Ry
dWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAg
ICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKLSNlbmRpZgotICAgIEpTU3RyaW5nKiBzdHJp
bmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmct
PnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAg
IFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lKSkpOwotfQorICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQz
MigpKTsKKyAgICB1aW50MzJfdCBpbmRleCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUlu
dDMyKCk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9z
dHJ1Y3R1cmVfcHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0g
R0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVl
KCkuYXNDZWxsKCkpOwotICAgIGlmIChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0
cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAg
ICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKKyAgICBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Kj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQoIWJh
c2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VW
YWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAg
IG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlLT5zdHJ1Y3R1
cmVJRCgpKTsKIAotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuanNWYWx1ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwot
ICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIEpTU3Ry
aW5nKiBuYW1lID0gZW51bWVyYXRvci0+Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBp
bmRleCwgbW9kZSk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNCb29s
ZWFuKG9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJv
cGVydHlOYW1lKSkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworICAgIG1vZGVSZWdpc3RlciA9IGpzTnVtYmVyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KG1vZGUpKTsKKyAgICBpbmRleFJlZ2lzdGVyID0ganNOdW1iZXIoaW5k
ZXgpOworICAgIG5hbWVSZWdpc3RlciA9IG5hbWUgPyBuYW1lIDoganNOdWxsKCk7CisgICAgRU5E
KCk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0
dXJlX3Byb3BlcnR5KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU1ZhbHVlIGJhc2UgPSBHRVRf
QyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXND
ZWxsKCkpOwotICAgIGlmIChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVy
ZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAg
UkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0g
R0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChw
cm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRo
czo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZSwgYXNTdHJpbmcocHJvcGVydHkpKSkpOwot
fQorICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Cisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAg
YXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihH
RVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAg
ICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNJ
bnQzMigpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGU6IHsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQ
cm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlE
KCkpOworICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpKSk7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZTogeworICAgICAgICAgICAg
aWYgKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlE
KCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkgeworICAgICAgICAgICAgICAg
IC8vIFdlJ2xsIG9ubHkgbWF0Y2ggdGhlIHN0cnVjdHVyZSBJRCBpZiB0aGUgYmFzZSBpcyBhbiBv
YmplY3QuCisgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3Ry
dWN0dXJlUHJvcGVydHlJbmRleCgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQo
YmFzZVZhbHVlLmdldE9iamVjdCgpLT5nZXREaXJlY3QoaW5kZXggPCBlbnVtZXJhdG9yLT5jYWNo
ZWRJbmxpbmVDYXBhY2l0eSgpID8gaW5kZXggOiBpbmRleCAtIGVudW1lcmF0b3ItPmNhY2hlZElu
bGluZUNhcGFjaXR5KCkgKyBmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuTmFtZWRN
b2RlU3RydWN0dXJlTWlzbWF0Y2gpOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAg
IH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJs
ZV9wcm9wZXJ0eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BIYXNFbnVtZXJhYmxlUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhi
eXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENI
RUNLX0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAg
ICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19F
WENFUFRJT04oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9w
ZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKLX0KKyAgICAgICAgY2FzZSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOiB7CisgICAgICAgICAgICBpZiAoYmFz
ZVZhbHVlLmlzQ2VsbCgpICYmIG1vZGUgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1l
ZE1vZGUpCisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0
cnVjdHVyZUlEKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgICAg
ICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1l
KS5qc1ZhbHVlKCkpOworICAgICAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRv
SWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgICAgICAgICAgLy8gVE9ETyBEb2VzIHRoaXMg
YWN0dWFsbHkgZXZlciB0aHJvdz8gSXNuJ3Qgc3RyaW5nIGJhY2tlZCBieSBhIFVVSUQ/CisgICAg
ICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChi
YXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIH0KIAot
SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKQot
ewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldERpcmVjdFBu
YW1lPigpOwotICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5q
c1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5
KS5qc1ZhbHVlKCk7Ci0gICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3Ry
aW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUg
PSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElP
TigpOwotICAgIFJFVFVSTihiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfTsKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOwogICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKGJhc2VW
YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBSRVRVUk4odm0uZW1wdHlQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKCkpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKKyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6Ok1vZGU+KEdFVChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQz
MigpKTsKKyAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1
aW50OF90Pihtb2RlKTsKIAotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0
KGdsb2JhbE9iamVjdCk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8q
IGJhc2UgPSBiYXNlVmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9
PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpz
Qm9vbGVhbih0cnVlKSk7CiAKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9i
YWxPYmplY3QsIGJhc2UpKTsKLX0KLQotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1
ZSgpLmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4o
YmFzZS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNW
YWx1ZSgpLmFzVUludDMyKCkpKSk7CisgICAgfQogCi0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFt
ZSA9IG51bGxwdHI7Ci0gICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJv
cGVydHlJbmRleCgpKQotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0
eU5hbWVBdEluZGV4KGluZGV4KTsKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lID8gcHJvcGVydHlO
YW1lIDoganNOdWxsKCkpOworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0
ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihD
b21tb25TbG93UGF0aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3RyaW5n
LCAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGUpKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQorSlNDX0RFRklORV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCiB7
CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdl
bmVyaWNQbmFtZT4oKTsKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3Ig
PSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVy
YXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRl
Y29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzJBc0FueUludCgpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCk7CisgICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2Rl
ID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNv
ZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CiAKLSAgICBKU1N0cmlu
ZyogcHJvcGVydHlOYW1lID0gbnVsbHB0cjsKLSAgICBpZiAoZW51bWVyYXRvci0+ZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCgpIDw9IGluZGV4ICYmIGluZGV4IDwgZW51bWVyYXRvci0+ZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXgoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+
cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7Ci0gICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHBy
b3BlcnR5TmFtZSA6IGpzTnVsbCgpKTsKLX0KKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVj
b2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VW
YWx1ZS5nZXRPYmplY3QoKSkgeworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBiYXNlLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3It
PmNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUp
KTsKIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJp
bmcpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9JbmRl
eFN0cmluZz4oKTsKLSAgICBKU1ZhbHVlIGluZGV4VmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9pbmRl
eCkuanNWYWx1ZSgpOwotICAgIEFTU0VSVChpbmRleFZhbHVlLmlzVUludDMyQXNBbnlJbnQoKSk7
Ci0gICAgUkVUVVJOKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleFZhbHVl
LmFzVUludDMyQXNBbnlJbnQoKSkuc3RyaW5nKCkpKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihq
c0Jvb2xlYW4oYmFzZS0+aGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUu
bV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkpKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgp
KTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9i
amVjdCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgcHJvcGVy
dHlOYW1lKSkpOwogfQogCiBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3By
b2ZpbGVfdHlwZV9jbGVhcl9sb2cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5oCmluZGV4IGQ4ZDE1MDFmYjM1YmFjMjc5NGM2ZDk0MTAyNzFiYjY4
ZjRjYzA1N2UuLmE1ZTAxNWQ1M2E2OWU2MDUzYWY0ZGJiMzFiMmM4ZjI1N2MwZGIxZTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCkBAIC0y
NTQsMTcgKzI1NCwxMSBAQCBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9p
c19jb25zdHJ1Y3Rvcik7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9z
dHJjYXQpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJpbWl0
aXZlKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3Byb3BlcnR5
X2tleSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVy
YWJsZV9sZW5ndGgpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFz
X2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkp
OwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1
cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5f
c3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2dldF9kaXJlY3RfcG5hbWUpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOwotSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTsKLUpT
Q19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CitK
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOwor
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlf
dmFsKTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jf
aW5fYnlfdmFsKTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1l
cmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF9wcm9maWxlX3R5cGVfY2xlYXJfbG9nKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX3VucmVhY2hhYmxlKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcAppbmRl
eCBlMmNhMTYyZTBiNTRlMjVjZjA2OWVlYThjODdlMWVlYTJlNGNkNWJlLi4xYjAzMTMwZjBhNWMw
N2MzMzVjYzU4NTY4M2JiNjQ1ZWU1M2UwOGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwCkBAIC05MCw3ICs5MCw2
IEBAIFNwZWN1bGF0ZWRUeXBlIEZpbGVCYXNlZEZ1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50
ZXJuYWwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBv
cF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAg
ICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCmluZGV4IGYxMzlkNGE0
NDdiMjcwZjllZDMzZjdkZmQzNWUwMmFmZmMzMWM3MDMuLmMyNmMwMDM3NDAzOTBjN2IzODM2MDc2
MGUzYzIyOWMxZmQxYjg4ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIE9w
Y29kZUlEIEZpbGVCYXNlZEZ1enplckFnZW50QmFzZTo6b3Bjb2RlQWxpYXNGb3JMb29rdXBLZXko
Y29uc3QgT3Bjb2RlSUQmIG9wY29kCiB7CiAgICAgaWYgKG9wY29kZUlkID09IG9wX2NhbGxfdmFy
YXJncyB8fCBvcGNvZGVJZCA9PSBvcF9jYWxsX2V2YWwgfHwgb3Bjb2RlSWQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQogICAgICAgICByZXR1cm4g
b3BfY2FsbDsKLSAgICBpZiAob3Bjb2RlSWQgPT0gb3BfZ2V0X2RpcmVjdF9wbmFtZSB8fCBvcGNv
ZGVJZCA9PSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcykKKyAgICBpZiAob3Bjb2RlSWQgPT0gb3Bf
ZW51bWVyYXRvcl9nZXRfYnlfdmFsIHx8b3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3Ro
aXMpCiAgICAgICAgIHJldHVybiBvcF9nZXRfYnlfdmFsOwogICAgIGlmIChvcGNvZGVJZCA9PSBv
cF9jb25zdHJ1Y3RfdmFyYXJncykKICAgICAgICAgcmV0dXJuIG9wX2NvbnN0cnVjdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAy
NGZjZjA4MTVlMjUwNDk1ZTAzMTc5NGEwNmU0YjMxMDVjNzg0ZmI0Li4xNWY1YjA2NGVjYmZjNjU4
YTk5MGQyZWI1OTYzNWJmMmJkYmU4ODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDYxLDYgKzE0NjEsMTAgQEAgY2FwaXRh
bE5hbWUgIyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVG
bGFnID8gY2FwaXRhbE5hbWUKICAgICAgICAgfSk7CiAjZW5kaWYKIAorICAgIG1fbGlua1RpbWVD
b25zdGFudHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmVtcHR5UHJv
cGVydHlOYW1lRW51bWVyYXRvcildLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlND
ZWxsPiYgaW5pdCkgeworICAgICAgICBpbml0LnNldChpbml0LnZtLmVtcHR5UHJvcGVydHlOYW1l
RW51bWVyYXRvcigpKTsKKyAgICB9KTsKKwogICAgIGlmIChPcHRpb25zOjpleHBvc2VQcm9maWxl
cnNPbkdsb2JhbE9iamVjdCgpKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAg
ICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmlu
Zyh2bSwgIl9fZW5hYmxlU2FtcGxpbmdQcm9maWxlciIpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0s
IHRoaXMsIDEsIFN0cmluZygpLCBlbmFibGVTYW1wbGluZ1Byb2ZpbGVyKSwgUHJvcGVydHlBdHRy
aWJ1dGU6OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0
eUF0dHJpYnV0ZTo6UmVhZE9ubHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKaW5kZXggMjFjNzBhMjdi
NjkxYmUwNTY5MGEyZmFlNzdjNjk5MTJhZWVjMTE5ZC4uY2YwYTRhNTEzNGY4MmRlZTk5YWFiMjVi
NjYzNTk4ZTU3ZGNlMmM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCkBAIC00OSwxMyArNDksMTkg
QEAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3QKIAogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWlu
dDMyX3QgaW5kZXhlZExlbmd0aCwgdWludDMyX3QgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywg
V3JpdGVCYXJyaWVyPEpTU3RyaW5nPiogcHJvcGVydHlOYW1lc0J1ZmZlciwgdW5zaWduZWQgcHJv
cGVydHlOYW1lc1NpemUpCiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFtZUVudW1lcmF0
b3JTdHJ1Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3Bl
cnR5TmFtZXNCdWZmZXIpCiAgICAgLCBtX2NhY2hlZFN0cnVjdHVyZUlEKHN0cnVjdHVyZSA/IHN0
cnVjdHVyZS0+aWQoKSA6IDApCiAgICAgLCBtX2luZGV4ZWRMZW5ndGgoaW5kZXhlZExlbmd0aCkK
ICAgICAsIG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleChudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0
aWVzKQogICAgICwgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleChwcm9wZXJ0eU5hbWVzU2l6ZSkK
ICAgICAsIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkoc3RydWN0dXJlID8gc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpIDogMCkKKyAgICAsIG1fcHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVy
dHlOYW1lc0J1ZmZlcikKIHsKKyAgICBpZiAobV9pbmRleGVkTGVuZ3RoKQorICAgICAgICBtX21v
ZGVTZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTsKKyAgICBpZiAo
bV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGU7CisgICAgaWYgKG1fZW5kR2VuZXJpY1Byb3Bl
cnR5SW5kZXggLSBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAgIG1fbW9kZVNl
dCB8PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOwogfQogCiB2b2lkIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8UHJv
cGVydHlOYW1lQXJyYXlEYXRhPiYmIGlkZW50aWZpZXJzKQpAQCAtMTQ4LDQgKzE1NCw3MCBAQCB2
b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTT2JqZWN0KiBiYXNlLCBQcgogICAgIH0KIH0KIAorSlNTdHJpbmcqIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y29tcHV0ZU5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIGJhc2UsIHVpbnQzMl90JiBpbmRleCwgTW9kZSYgbW9kZSwgYm9vbCBzaG91bGRB
bGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBB
U1NFUlQoaW5kZXhlZExlbmd0aCgpIHx8IHNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisKKyAgICBp
bmRleCsrOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5pdE1vZGU6IHsKKyAgICAg
ICAgbW9kZSA9IEluZGV4ZWRNb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExU
SFJPVUdIOworICAgIH0KKworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRl
eGVkTW9kZTogeworICAgICAgICB3aGlsZSAoaW5kZXggPCBpbmRleGVkTGVuZ3RoKCkgJiYgIWJh
c2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KSkgeworICAgICAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBp
bmRleCsrOworICAgICAgICB9CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisK
KyAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJu
IHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPyBqc1N0cmluZyh2bSwgSWRlbnRpZmll
cjo6ZnJvbSh2bSwgaW5kZXgpLnN0cmluZygpKSA6IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFz
aXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICBtb2RlID0gTmFtZWRNb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExU
SFJPVUdIOworICAgIH0KKworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1l
ZE1vZGU6CisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOiB7
CisgICAgICAgIEpTU3RyaW5nKiBuYW1lID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lQXRJbmRl
eChpbmRleCk7CisgICAgICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBpZiAoaW5kZXggPCBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgJiYg
YmFzZS0+c3RydWN0dXJlSUQoKSA9PSBjYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sIG5hbWUtPnZhbHVlKGdsb2JhbE9iamVjdCkpOworICAgICAgICAgICAgc2NvcGUuYXNzZXJ0
Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIGlmIChiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBpZCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIG5hbWUg
PSBudWxscHRyOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgICAgIGlmIChpbmRleCA+PSBlbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4KCkgJiYgaW5kZXggPCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAg
ICAgICAgICBtb2RlID0gR2VuZXJpY01vZGU7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0K
KworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgKaW5kZXggMDIwMTFkNDFjN2Y2NmRhZDg4M2FlOGQ3NzBiNWQz
ZDI4NmNkNTA4Ny4uYTAwOWJiMjkwMWI0YWExNzBkNzM4YTU5ODYwYTA5YTE1NmQyMDQ1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNp
bmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtMzcsNiArMzcsMTcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2Ug
PSBKU0NlbGw7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAorICAgIGVudW0g
TW9kZSA6IHVpbnQ4X3QgeworICAgICAgICBJbml0TW9kZSA9IDAsCisgICAgICAgIEluZGV4ZWRN
b2RlID0gMSA8PCAwLAorICAgICAgICBOYW1lZE1vZGUgPSAxIDw8IDEsCisgICAgICAgIEdlbmVy
aWNNb2RlID0gMSA8PCAyLAorICAgICAgICAvLyBQcm9maWxpbmcgT25seQorICAgICAgICBIYXNT
ZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlzbWF0Y2ggPSAxIDw8IDMsCisgICAgfTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBlbnVtZXJhdGlvbk1vZGVNYXNrID0gKEdlbmVyaWNNb2Rl
IDw8IDEpIC0gMTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKQEAgLTc0LDE2ICs4NSwyMCBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
OyB9CiAgICAgdWludDMyX3QgY2FjaGVkSW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZElubGluZUNhcGFjaXR5OyB9CiAgICAgdWludDMyX3Qgc2l6ZU9mUHJvcGVydHlOYW1l
cygpIGNvbnN0IHsgcmV0dXJuIGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCk7IH0KKyAgICB1aW50
MzJfdCBtb2RlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlU2V0OyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlSUQpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBpbmRleGVkTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9pbmRleGVkTGVuZ3RoKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3QgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGVuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciwgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IGNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG1vZGVTZXRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX21vZGVTZXQpOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3By
b3BlcnR5TmFtZXMpOwogICAgIH0KIAorICAgIEpTU3RyaW5nKiBjb21wdXRlTmV4dChKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCYgY3VycmVudEluZGV4LCBNb2RlJiwg
Ym9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nID0gdHJ1ZSk7CisKICAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgpAQCAtOTIsMTMgKzEwNywxNCBAQCBwcml2
YXRlOgogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHVpbnQz
Ml90LCB1aW50MzJfdCwgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiosIHVuc2lnbmVkKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4mJik7
CiAKLSAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3Bl
cnR5TmFtZXM7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNo
YWluOwogICAgIFN0cnVjdHVyZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgdWludDMyX3Qg
bV9pbmRleGVkTGVuZ3RoOwogICAgIHVpbnQzMl90IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eDsKICAgICB1aW50MzJfdCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OwogICAgIHVpbnQzMl90
IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7CisgICAgdWludDMyX3QgbV9tb2RlU2V0IHsgMCB9Owor
ICAgIEF1eGlsaWFyeUJhcnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlO
YW1lczsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47
CiB9OwogCiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1
aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCk7CkBAIC0xMzQsNyArMTUwLDEwIEBAIGlu
bGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMg
PSAwOwogICAgIH0KIAotICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNyZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExl
bmd0aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7
CisgICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmICFwcm9wZXJ0eU5hbWVzLnNpemUoKSkKKyAgICAg
ICAgZW51bWVyYXRvciA9IHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworICAgIGVs
c2UKKyAgICAgICAgZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRl
KHZtLCBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBu
dW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKICAgICBp
ZiAoIWluZGV4ZWRMZW5ndGggJiYgc3VjY2Vzc2Z1bGx5Tm9ybWFsaXplZENoYWluICYmIHN0cnVj
dHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMgPT0gc3RydWN0dXJlKSB7CiAgICAgICAgIGVu
dW1lcmF0b3ItPnNldENhY2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUNoYWluKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5jYW5D
YWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0pKQpAQCAtMTQzLDQgKzE2Miw2IEBAIGlubGlu
ZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIGVudW1lcmF0b3I7CiB9CiAKK3VzaW5nIEVu
dW1lcmF0b3JNZXRhZGF0YSA9IHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpNb2RlPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdl
bnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVh
dGluZ0Z1enplckFnZW50LmNwcAppbmRleCBjZGNmYTk5ZDQ5YTY5MTc0MDFkNjgzMTY4YmExOWFi
ZGViYWU5YTRkLi5jN2E4ZTMxZjdlNDdiZDY5MTFmZTRhYzQ1ZmRmNzdkNjgzOTY0MTA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0
aW5nRnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
ZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBTcGVjdWxh
dGVkVHlwZSBQcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25J
bnRlcm5hbChDb2RlQmxvYwogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgogICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpczoKICAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgotICAg
IGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJh
cmdzOgogICAgIGNhc2Ugb3BfY2FsbDoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGFhY2Y5N2Y5NThjODVkYzlmNTJkNGMyZTJlMjhlMzI3
Yjg4ODFlZC4uMzE3NzQyZDUyYzQwOTE0M2VhMzcxYWQwYTJhNmQyNmM1YWNjYzUzZiAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMS0wNy0yNyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBmb3ItaW4gc2hvdWxkIG9ubHkgZW1pdCBvbmUgbG9vcCBpbiBieXRlY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3OTg5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdHJl
c3MvZm9yLWluLWFycmF5LW1vZGUuanM6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBzdHJl
c3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qczoKKyAgICAgICAgKiBzdHJlc3MvZm9y
LWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzOgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4t
dGVzdHMuanM6CisgICAgICAgICogc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZv
ci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzOgorICAgICAgICAodGVzdDUpOgorCiAyMDIxLTA3LTI1
ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBQYXJ0
bHkgaW1wbGVtZW50IEZ1bmN0aW9uLnByb3RvdHlwZS57Y2FsbGVyLGFyZ3VtZW50c30gcmVmbGVj
dGlvbiBwcm9wb3NhbApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1v
ZGUuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcwppbmRleCA5MDAyYjk0
MGFkNTk2Yjc1NDgxZjAyNTQwZTUwYWM5ZTljYmI1MDg4Li4zZDJkYTYzOWQ4MTBmOGFiOTdhM2Uy
NjlmYWUxMDcyMTBiNWNlNzVjIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJy
YXktbW9kZS5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcwpAQCAt
MjYsOCArMjYsOSBAQAogdmFyIGZ1bmNBcmdBbmRCb2R5U3RyID0KICIoYXJyKSB7IiArICJcbiIg
KwogIiAgICB2YXIgc3VtID0gMDsiICsgIlxuIiArCi0iICAgIGZvciAodmFyIGkgaW4gYXJyKSIg
KyAiXG4iICsKKyIgICAgZm9yICh2YXIgaSBpbiBhcnIpIHsiICsgIlxuIiArCiAiICAgICAgICBz
dW0gKz0gYXJyW2ldOyIgKyAiXG4iICsKKyIgICAgfSAiICsKICIgICAgcmV0dXJuIHN1bTsiICsg
IlxuIiArCiAifSI7CiAKQEAgLTc1LDYgKzc2LDcgQEAgZnVuY3Rpb24gdGVzdChuYW1lLCBkYXRh
KSB7CiAKICAgICAgICAgaWYgKChhY3R1YWwgIT0gZXhwZWN0ZWQpICYmIChhY3R1YWwgIT0gcHJl
dmlvdXNSZXN1bHQpKSB7CiAgICAgICAgICAgICBwcmludCgiRkFJTDogIiArIG5hbWUgKyAiOiBl
eHBlY3RlZDogIiArIGV4cGVjdGVkICsgIiwgYWN0dWFsOiAiICsgYWN0dWFsICsgIiwgc3RhcnRp
bmcgQCBsb29wIGl0ZXJhdGlvbiAiICsgaSk7CisgICAgICAgICAgICAkdm0uYnJlYWtwb2ludCgp
OwogICAgICAgICAgICAgcHJldmlvdXNSZXN1bHQgPSBhY3R1YWw7CiAgICAgICAgICAgICBmYWls
ZWQgPSB0cnVlOwogICAgICAgICAgICAgbnVtYmVyT2ZGYWlsdXJlcysrOwpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qcyBiL0pTVGVzdHMv
c3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMKaW5kZXggODMxMTViNDk3M2M4
MzdjYTZkM2ZmMDZlYTZmZjEzMWMzNDUxMWU2Mi4uMDlmODFkOTU2NTNiYWExNTA2ZTVkZGEwNjJm
YTJlMzVmMTU4YmYzMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVh
c3NpZ25lZC1sYXRlci5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2ln
bmVkLWxhdGVyLmpzCkBAIC0xNCw1ICsxNCw1IEBAIG5vSW5saW5lKGZvbyk7CiBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKICAgICB2YXIgcmVzdWx0ID0gZm9vKHswOjAsIDE6MSwg
YToyLCBiOjN9KTsKICAgICBpZiAocmVzdWx0ICE9IDcpCi0gICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVz
dWx0OiAiICsgcmVzdWx0KTsKIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1k
ZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUt
ZHVyaW5nLWl0ZXJhdGlvbi5qcwppbmRleCA1YWQzNTY2ZmQwZDM2MTAyNWExZTVmMzM2NWQwYmFk
Mzc0ZDUxMjAyLi5kMTE0NjkzMWIxNDc1ZDg4YzQ3Mzk0OWVhZGEyZGRhMGZkMzkzMGE1IDEwMDY0
NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMK
KysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCkBA
IC0xMiw4ICsxMiw5IEBACiAgICAgfTsKICAgICBub0lubGluZShmb28pOwogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgICAgICBpZiAoZm9vKCkgIT09ICIxMjM1IikK
LSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOworICAgICAgICB2YXIg
cmVzdWx0ID0gZm9vKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09ICIxMjM1IikKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCBnb3Q6ICIgKyByZXN1bHQpOwogICAgIH0K
ICAgICBmb28obnVsbCk7CiB9KSgpOwpAQCAtMzYsOCArMzcsOSBAQAogICAgIH07CiAgICAgbm9J
bmxpbmUoZm9vKTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAg
ICAgaWYgKGZvbygpICE9PSAieHoiKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQg
cmVzdWx0Iik7CisgICAgICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPT0gInh6IikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiAr
IHJlc3VsdCk7CiAgICAgfQogfSkoKTsKIChmdW5jdGlvbigpIHsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5q
cwppbmRleCAyZTRkNmI4NDJhMjQyZWI3MTU5ODYwMGVlNTI4YWUxNGI5Yzg5Y2U0Li42ODk2MDk4
MTg1MWVlMzQ0ZTNhYTdmNTMyMzE1MWIyMjUxZjY1ZDkwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0
cmVzcy9mb3ItaW4tdGVzdHMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpz
CkBAIC0xMDUsNiArMTA1LDcgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3dTeW50YXhFcnJvcihzY3Jp
cHQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOwogICAgIH0K
IH0pKCk7CisKIChmdW5jdGlvbigpIHsKICAgICB2YXIgZm9vID0gZnVuY3Rpb24oYSwgYikgewog
ICAgICAgICBmb3IgKHZhciBwIGluIGIpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hh
cy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzIGIvSlNU
ZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVj
dG5lc3MuanMKaW5kZXggOTljNTlhYzEwNTY4Y2U4YTc5MDg1MjI5ODIwNmZkYzdlMGUwZjg5Yy4u
ZTBhZGUwNzFhMmU0YjhkMDI3OGQ5NWNjOTMzZTI0ZjE4YmJlZTA1OCAxMDA2NDQKLS0tIGEvSlNU
ZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVj
dG5lc3MuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUt
Zm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMKQEAgLTEzMiw3ICsxMzIsMTAgQEAgZnVuY3Rpb24g
dGVzdDUoKSB7CiAgICAgby5fX3Byb3RvX18gPSBwOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwOyArK2kpIHsKLSAgICAgICAgYXNzZXJ0KGNvdW50KG8pID09PSAwKTsKKyAgICAgICAg
dmFyIGMgPSBjb3VudChvKTsKKyAgICAgICAgaWYgKGMpCisgICAgICAgICAgICBwcmludChjKTsK
KyAgICAgICAgYXNzZXJ0KGMgPT09IDApOwogICAgIH0KIH0KIHRlc3Q1KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434444</attachid>
            <date>2021-07-28 12:04:00 -0700</date>
            <delta_ts>2021-07-28 12:10:56 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728150359.patch</filename>
            <type>text/plain</type>
            <size>369268</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjgyN2MwYjVlNmRhZTQ4
YWY5Njg3MTE1NmNjNGYyYzg5MjMzYTVmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQyNDQs
MjUgKzQyNDgsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKLSAgICAgICAgY2xvYmJlcldvcmxk
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eTogeworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTQyODEs
MjYgKzQyNjgsNTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKCk7Ci0gICAg
ICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorCiAg
ICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNT
YW5lQ2hhaW4oKSkKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEo
KSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKTsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUgfHwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkg
IT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworCisgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCAwKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVy
YXRvckdlbmVyaWNQbmFtZTogeworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZTogewogICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzog
ewotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVm
aW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKKyAgICAgICAgLy8gdmFsdWUgaW5mb3Jt
YXRpb24uCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCmluZGV4IDExMTFmODlmOWQ3YjViOTc3
NzhjMTZjOGQ1NDY0MGJlYTM3NDQyYjIuLmEwMjZhYWQxODkzYmYyM2M1NzE5NmZjYzZjOTFmYzIw
MDAzYzQ1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaApAQCAt
Mjg5LDYgKzI4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09
IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICB9CiAKKyAgICBib29sIGlzU2FuZUNo
YWluKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0luQm91bmRzU2FuZUNoYWluKCkg
fHwgaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpOworICAgIH0KKwogICAgIGJvb2wgaXNPdXRPZkJv
dW5kcygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgfHwgc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBkYjM3ZjRkZGRiZjgwY2Q2NmViNTc4N2Q3
YmFhMmJmNTNhZjg5MDc2Li45ZGJkMGI0N2Q5ZGZmNGNmNjAzOGFmNTAwMTc5MzQ4YmUwYWVhMjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTM5MCw3ICszOTAsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2Rl
TmVlZHNOZWdaZXJvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbDogewogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VG
bGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5v
ZGVCeXRlY29kZVVzZXNBc090aGVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVj
b2RlVXNlc0FzQXJyYXlJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGEyOTZjNGI4N2M4NTg4NjRmYmRlZGQ3NGVmNzI3ZTU0
ZDk1ZmQ2OTQuLjJjOTgzYmFjMzcwMGM4ZDI5NTcyMzFkYmRlZjJlYmYzNTBkMzBiN2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC04
Mzg3LDEwMyArODM4NywxMzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19wcml2YXRlX2JyYW5k
KTsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0aCwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KTsKKyAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cjogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUubV9iYXNl
KSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3Ip
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVByb3BlcnR5LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwg
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9o
YXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbnVt
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6
UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Cisg
ICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChieXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAg
ICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKTsKKyAgICAg
ICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNvZGUubV9tb2RlKTsKIAotICAgICAgICBjYXNl
IG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5Pigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc093blN0cnVj
dHVyZVByb3BlcnR5LAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBn
ZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAgICB9CisgICAgICAgICAgICBhdXRv
IHNlZW5Nb2RlcyA9IG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhOwogCi0gICAgICAgIGNh
c2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAg
ICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9w
ZXJ0eT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsK
LSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAg
ICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOwotICAgICAgICAg
ICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSk7
Ci0gICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBIYXNJbmRleGVkUHJvcGVydHkgbXVz
dCBiZSB0cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIHNpbmNlIEZpeHVwUGhh
c2UgbWF5IG1ha2UgaXQgZ2VuZXJpYy4KLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
aGFzSXRlcmFibGVQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGlu
ZGV4KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxs
cHRyKTsgLy8gc3RvcmFnZSBmb3IgSW5kZXhlZE1vZGUgb25seS4KKyAgICAgICAgICAgIE5vZGUq
IHVwZGF0ZWRJbmRleEFuZE1vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRv
ck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8oc2Vlbk1vZGVzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRNb2RlID0gYWRkVG9H
cmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCB1cGRhdGVkSW5kZXhBbmRNb2RlKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX21vZGUsIHVwZGF0ZWRNb2RlKTsKKworICAgICAgICAg
ICAgTm9kZSogdXBkYXRlZEluZGV4ID0gYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RJ
bmRleCwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9p
bmRleCwgdXBkYXRlZEluZGV4KTsKKworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fcHJvcGVy
dHlOYW1lLCBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB1cGRh
dGVkSW5kZXgsIHVwZGF0ZWRNb2RlLCBlbnVtZXJhdG9yKSk7CisKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudW1lcmF0b3JfbmV4dCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9w
X2dldF9kaXJlY3RfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7Ci0gICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6IHsKKyAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFy
cmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4
aXQoKTsKKwogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwot
ICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eU5hbWUgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgTm9kZSogaW5kZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7Cisg
ICAgICAgICAgICBOb2RlKiBtb2RlID0gZ2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAgICAgICAgICAg
ICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CiAKKyAgICAg
ICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gT3B0aW9uU2V0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6TW9kZT46OmZyb21SYXcobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgICAg
ICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9T
UkV4aXQpOworCisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYWRNb2RlID0g
YWRkVG9HcmFwaChBcml0aEJpdEFuZCwgbW9kZSwganNDb25zdGFudChqc051bWJlcihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBBcml0aEJp
dEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNvIGl0J3Mgb2sgdG8gZXhpdCBoZXJlLgorICAgICAg
ICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEV4
aXRPSyk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJ
bmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzTnVtYmVyKDApKSksIGJhZE1vZGUpOworCisgICAg
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5k
ZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxw
dHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXRC
eVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsK
KworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGVudW1lcmF0b3IpOworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVja2luZyBmb3IgYSBCYWRDb25zdGFudFZh
bHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNlIHRoZSBHZW5lcmljIHZhcmlhbnQgaWYgd2Ugc3dp
dGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJbmRleGVkTW9kZSArIE5hbWVkTW9kZSBldmVuIHRo
b3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAgICAgICAgICBpZiAoIXNlZW5Nb2Rlcy5jb250
YWluc0FueSh7IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoIH0pCisg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbW9kZVRlc3QgPSBhZGRUb0dyYXBoKFNhbWVWYWx1ZSwgbW9kZSwganNDb25zdGFu
dChqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlKSkpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25z
dGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzQm9vbGVhbihmYWxzZSkpKSwgbW9k
ZVRlc3QpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNl
IHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRC
eVZhbC4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJv
cGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0
byBtYXRjaCBHZXRCeVZhbC4KICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGlj
dGlvbikpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2Rl
OjpWYXJBcmcsIEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKIAotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X2RpcmVjdF9wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcjogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUu
bV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3IpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9pbl9ieV92YWw6
IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CiAK
LSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogewotICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLAotICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2luZGV4
KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUpOwotICAgICAgICB9CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKIAotICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvciksCi0gICAgICAg
ICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKLSAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3RyaW5nLCBnZXQoYnl0ZWNv
ZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmlu
Zyk7CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHk6IHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckhhc093blByb3BlcnR5PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwor
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Vu
dW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2dldF9pbnRlcm5hbF9maWVsZDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmNwcAppbmRleCBjYzBkMDE0ZGEyOTMxZmYzZWNkY2U5NDI5Y2MyNjI1NjFlMmY3Zjc2Li4w
NmQxOWQxNzM5NzMwM2Y3NDFiZTZiMDJiZjAxMDU3ZjcyMjU2NDgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBkYXRhTG9nKCIgICBGb3VuZCBtdXN0LWhhbmRsZSBibG9jazogIiwgKmJs
b2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgbWVyZ2VzIHNuYXBzaG90IG9m
IHN0YWNrIHZhbHVlcyB3aGlsZSBDRkEgcGhhc2Ugd2FudCB0byBoYXZlIHByb3ZlbiB0eXBlcyBh
bmQgdmFsdWVzLiBUaGlzIGlzIHNvbWV3aGF0IHRyaWNreS4KLSAgICAgICAgLy8gQnV0IHRoaXMg
aXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlkYXRlcyB0aGUgaW5wdXRzIHdpdGgg
KnByb3ZlbiogQWJzdHJhY1ZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMK
KyAgICAgICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlk
YXRlcyB0aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY3RWYWx1ZSB2YWx1ZXMuIEFuZCBp
dCB0dXJucyBvdXQgdGhhdCB0aGlzCiAgICAgICAgIC8vIHR5cGUgd2lkZW5pbmcgaXMgY3JpdGlj
YWwgdG8gbmF2aWVyLXN0b2tlcy4gV2l0aG91dCBpdCwgbmF2aWVyLXN0b2tlcyBoYXMgbW9yZSBz
dHJpY3QgY29uc3RyYWludCBvbiBPU1IgZW50cnkgYW5kCiAgICAgICAgIC8vIGZhaWxzIE9TUiBl
bnRyeSByZXBlYXRlZGx5LgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBjNzE2NGIzMGY0
NjRlYjBkNDM4MmUyY2NhNDJkNTY5OTY0ZDFiZjY3Li5hYzc4MmQ5OWI0NTNjNTA4MjYxYTdmM2E4
Nzk1NTg4MDBkMDA1Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCkBAIC0yNTQsMTcgKzI1NCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJ
CiAgICAgY2FzZSBvcF9oYXNfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX2dldF9zY29wZToK
ICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoOgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eToKLSAg
ICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHk6Ci0gICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBv
cF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6
Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKLSAgICBjYXNlIG9wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKLSAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAg
ICBjYXNlIG9wX25ld19mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jOgpAQCAtMjk5LDYgKzI4OSwxMCBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSQogICAgIGNhc2Ugb3Bfc2V0X3ByaXZhdGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9j
aGVja19wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX2VudW1lcmF0b3JfbmV4dDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOgorICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9oYXNfb3duX3Byb3BlcnR5OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
IAogICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAppbmRleCA5ZDEwMDRmZTUzZjNkNDQ3ZGYxMDNmYWNhMGQyZTEwZWM0ZmY1ZjQ2
Li41ZGQ2NTE0ZDFlMWFmY2E3YzM3YWMxOTg4YWFiMzIxNGI3ZmI2YWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheU9yRW1wdHk6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
R2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0
VmVjdG9yTGVuZ3RoOgpAQCAtMTY0LDcgKzE2OCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgogICAg
ICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5OgogICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0FuZDoKICAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgpAQCAtMzM3
LDIxICszNDAsODAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgd3JpdGUoTWF0
aERvdFJhbmRvbVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBHZXRFbnVtZXJh
YmxlTGVuZ3RoOiB7Ci0gICAgICAgIHJlYWQoSGVhcCk7Ci0gICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RJbmRleDogeworICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNhc2UgVG9JbmRleFN0cmluZzoKLSAgICBjYXNlIEdldEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsK
LSAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgcmVhZChOYW1lZFByb3BlcnRpZXMpOworICAg
ICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpICE9IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIGNsb2Ji
ZXJUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFycmF5
TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CisgICAgICAgICAgICB3cml0
ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0
aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywg
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwg
TGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
cmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNsb2JiZXJUb3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eTogeworICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJlYWQoSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KTsKICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewpAQCAtNzA1LDYgKzc2Nyw4IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNlIFRv
UHJvcGVydHlLZXk6CiAgICAgY2FzZSBJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAg
LTcxNiwxMiArNzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6
CiAgICAgY2FzZSBUb09iamVjdDoKLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0
cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNl
IEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgIGNh
c2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICBjYXNlIFRvTnVtYmVyOgogICAgIGNhc2UgVG9OdW1l
cmljOgpAQCAtOTA2LDYgKzk2NSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0
PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGZhciB0b28gY29uc2VydmF0aXZlIGZvciB0aGUgY2hpbGQxKCkudXNlS2luZCgpID09IElu
dDMyVXNlIGNhc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY2xv
YmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEdl
dEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZlYTkxZGYyMjRi
ZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1
M2MzN2UxOGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
MjA1LDcgKzIwNSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgogICAg
IGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hl
Y2tCYWRWYWx1ZToKQEAgLTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIEdldEJ5SWRX
aXRoVGhpczoKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CiAg
ICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhl
ZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAg
IGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6Ci0g
ICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJv
cGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSGFz
UHJpdmF0ZU5hbWU6CkBAIC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBUaHJvd1N0
YXRpY0Vycm9yOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNhc2UgR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1h
dGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3Jl
YXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5
NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li43ZjIxYWE0NGRiZGM2ODQ4YTViODU0ZTg3NDYwY2RmNTRl
Njc2MzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
QEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEw
NjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUo
KS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9T
UiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE5hbWVkTW9kZS4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV0Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlw
ZShBcnJheTo6R2VuZXJpYykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTEwOTYsNyArMTExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0
aGUgZnVsbC1ibG93bgogICAgICAgICAgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzIHNsb3cg
cGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBOZWdhdGl2ZUluZGV4KSkKQEAgLTExMTEsNyArMTEyNyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6SW5Cb3VuZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3Bl
Y3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0
IGNhcmUKQEAgLTExMjEsNyArMTEzNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBOZWdhdGl2ZUluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5l
Q2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTc4LDcgKzExOTQsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAorCisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3Qgc2V0IGEgbm9uLUpTVmFsdWUgcmVz
dWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgc2luY2Ugd2UgY291bGQgc3RpbGwgZG8gYSBOYW1l
ZE1vZGUgcHJvcGVydHkgYWNjZXNzLiBXZSBhbHNvIGRvbid0IGhhdmUgYSBnb29kIHdheSB0bwor
ICAgICAgICAgICAgLy8gcHJvdmUgdGhlcmUncyBubyBzdHJ1Y3R1cmUgcHJvcGVydGllcyBhdCB0
aGlzIHBvaW50LgorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5
VmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgc3dpdGNoIChhcnJheU1v
ZGUudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAg
ICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpCkBAIC0yMjc1LDI4ICsyMjk1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhF
ZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93
bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duU3RyaW5nVXNlPihub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewor
ICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKAogICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKQEAgLTIzMTUsMzYgKzIzMTQsNjQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsIEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAgICAgICBFZGdlJiBiYXNlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UmIHByb3BlcnR5
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIEVkZ2UmIGluZGV4
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgIEVkZ2UmIGVudW1l
cmF0b3IgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihiYXNlKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihwcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihpbmRleCk7Ci0gICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKICAgICAg
ICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBu
YW1lOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAg
IEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAg
RWRnZSYgaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAg
RWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFk
YXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkt
PnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSktPnByZWRpY3Rpb24oKSkpOworCisgICAgICAgICAgICAgICAgZml4RWRnZTxD
ZWxsVXNlPihiYXNlKTsKKyAgICAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGJhc2Us
IGluZGV4LCBzdG9yYWdlRWRnZSk7CisKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlN
b2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5i
ZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHNldFNhbmVD
aGFpbklmUG9zc2libGUobm9kZSwgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzID8gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91bmRzU2Fu
ZUNoYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmICFt
X2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUpKQorICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMy
VXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVj
dGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0Lgog
ICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5l
ZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKQEAgLTM2
OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAorICAgIHZvaWQg
c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9uOworICAgICAg
ICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKSB7CisgICAg
ICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsgb24gYSBwZXIt
dHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEp
IFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJuIHVuZGVmaW5l
ZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNoYW5nZSB0byB0
aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAgICAgLy8gdGhp
bmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBhY3R1YWxseSBo
YWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9tIGEgaG9s
ZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2VseSB0aGUgYmVz
dCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQgb2YKKyAgICAg
ICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5vdyB3ZSBq
dXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5hTiBhcmUgaW5k
aXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiwgYW5kIGp1
c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0IGNhc2UuIFRo
aXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRvIGhhdmUgdG8g
ZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0byBVbmRlZmlu
ZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3YW50IHRvCisg
ICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMyLiBGSVhN
RTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAvLyBiYXNlZD8K
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGljYXRpb25z
LiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAgICAgICAgICAg
IC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNo
ZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9s
ZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAgICAgIC8vIG91
dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKKworICAg
ICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5z
cGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0
ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAg
ICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5h
dHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHJldHVybmVk
IGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0aWxsIGRv
CisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVpcmUgdGFr
aW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgp
ICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9n
cmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJv
dW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3Vs
YXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFp
blNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAg
ICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vz
bid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAv
LyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRC
aXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYg
IW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4
KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0
T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAgICAgICBzZXRT
YW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7CisgICAgfQor
CiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFycmF5OjpTcGVj
dWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2MzI1YzVk
NGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQxOTJkMTc1MmQ0
NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAt
Mzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
Y2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRT
dGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygp
KTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRp
bWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQwZWY0MDMzMGMy
MzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4OTIyMTUxZTQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9w
dGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVOb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgu
CiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0UmVsYXRpb25z
aGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAgICAgICAgICAg
c2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4NmQzOTNmZDg3
YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2
NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTEx
LDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyU2V0
UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToK
KyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBicmVhazsKIAor
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBTdHJD
YXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2ZDBhNDM4ZTVl
ZDgxLi40NzA2NTZiZWY4NTg4NTk5NTExMjI2OGY5ZGE5MGJmYzBhMTEyYjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkRlbGV0
ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRl
ICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAgICAgICBjYXNl
IEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdl
dEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKICAgICAgICAg
Y2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAg
ICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFz
U3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAg
ICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0Ogor
ICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JH
ZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAg
ICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NF
eGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNz
T3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6
CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAg
ICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAg
IGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIHN0b3Jh
Z2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdlQ2hpbGQoKSk7
CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAg
ICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2lu
dEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRC
eVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgorICAgICAgICBj
YXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKKyAg
ICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0xvYWQ6Cisg
ICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToKKyAgICAg
ICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6CisgICAgICAgICAg
ICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBBcnJheVBvcDoK
KyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAyOworCisg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0dXJuIDI7CisK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
ICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3MgdG8gZGV0ZXJt
aW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiArMjI4MiwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgpAQCAtMjIx
Niw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICBj
YXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgY2FzZSBBdG9t
aWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0Nv
bXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJl
NTY1NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdl
bmVyYXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAg
ICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVy
ZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBt
YWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRv
SW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFw
IGFuZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3
ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLjViOTk5MGNjZjI3NTVlYjcxOGIxOTk4YmYyYzMxNDVkMTM1
MzNmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNl
KTsKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFt
ZSkpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxP
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAg
ICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1v
ZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1l
U3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9i
amVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpO
dW1iZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5k
ZXgpOworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBt
b2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3It
PnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVu
dW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVW
YWx1ZSwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51
bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5n
ZXRPYmplY3QoKS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpT
U3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFs
KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwg
aW50MzJfdCBtb2RlTnVtYmVyKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5z
dHJpbmcoKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFz
T3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9w
ZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHBy
b3BlcnR5TmFtZVZhbHVlKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50
b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2Us
IGlkZW50aWZpZXIpKSkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
TmV3UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogcmVnZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFm
ZWRlNTk1ZDBmYjhmYTgzNWVmNzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQx
M2JmMTg4MGNlNzYzNGVlMzEzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5z
dGFuY2U7CiBjbGFzcyBKU0JpZ0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsK
K2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTEwNCwxMiArMTA1LDE0IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvdG90eXBlT2YsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqLCBpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25I
YXNFbnVtZXJhYmxlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEpTU3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25JblN0cnVjdHVyZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiwgSlNTdHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBK
U0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQz
Ml90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dWludDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikp
OworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0
SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwg
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3Ry
dWN0dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3
ZTMwNmJhYjg1MzdjMGU4OWUyZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1
ZTM3NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsK
ICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAg
ICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hp
bGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51
bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxl
SW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAg
ICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNh
c2UgUmVnRXhwRXhlYzoKQEAgLTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEdldFByaXZhdGVOYW1lOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAg
ICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgog
ICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1l
cmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBJbkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBI
YXNQcml2YXRlTmFtZToKICAgICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNh
c2UgSGFzT3duUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0g
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZTogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7
CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAg
ICAgICAgICAgLy8gVGhpcyBjYW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJh
bmNoIG9mIHRoYXQgY2FzZSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50
IHRvIG1lc3Mgd2l0aAorICAgICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAg
IHNldFByZWRpY3Rpb24oU3BlY0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQ
cm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZh
bHVlIHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3Ry
aW5nLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDog
ewogICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHBy
b2R1Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0
IHByb2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBj
OTYzN2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJi
ZWFiMDJhZDBjNTEzZGRiNDljYTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91
bmRzQ2hlY2sobV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwg
MSksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewog
ICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJk
MGI5YjQ2MGUyYzUwLi4xZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2
LDEwICsyOTYsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRl
LCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRv
TnVtYmVyOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5
OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWU6Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJv
b2wgaWdubwogICAgICAgICAvLyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBp
biBjb250cm9sIGZsb3cgaGVyZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoK
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxl
bmd0aDoKQEAgLTQ5Niw2ICs0OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAg
ICAgcmV0dXJuIGlzU2FmZTsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOgorICAgIC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0
cyBidXQgdGhleSdsbCBvbmx5IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUgc28gd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNl
IFRvVGhpczoKICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpA
QCAtNTk1LDYgKzU5Nyw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNh
c2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAg
ICBjYXNlIEhhc093blByb3BlcnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgogICAgIGNhc2UgTXVsdGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1
MThhNjA4NzEzNDJkNjQ0ZWQ5NzhiMWU1YjguLmMwOWU1YzUxMjA0YjY0YmEwYzE1MDE1Nzk5MDA3
OWZlNDViMTBjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1Zh
bHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQp
Ci0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0
LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVS
ZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBS
ZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1f
cGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNl
bmRpZgogewotICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1f
cGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAg
bV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3Bh
eWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAg
LTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29k
ZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJy
ZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3Ry
aW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVn
cywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAw
KSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFs
aWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0
VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6
IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVy
IG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6
Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRh
Rm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsy
NjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1
Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFBy
b3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdl
bmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdz
KHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKLSAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAg
ICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5n
SW50LAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwot
I2Vsc2UKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChz
Y3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0g
ZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9k
ZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2Rl
KE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5
UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9h
ZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBp
ZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBp
c1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChz
aG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
bk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0
LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6
OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlz
VUludDMyKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBl
KSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3Vs
YXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBz
dHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9k
ZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAg
QVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUs
IFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAg
ICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7
CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1p
dFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAg
bG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcs
IHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNh
blNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwg
cmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2Fk
UmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
IH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgK
QEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1
bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBU
eXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwog
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJl
c3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcs
IHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5
VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAK
LSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERh
dGFGb3JtYXRKUykgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcw
Myw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0
aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmlu
ZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJS
ZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0
SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCks
IGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9i
amVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFH
UFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIg
PSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQz
MlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3Qg
U2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3Jt
YXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgw
ODIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1
bWVudHMoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgLy8gVE9ETzogQXJlIGJvdGggb2YgdGhlc2UgbmVj
ZXNzYXJ5Pz8KICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0g
c2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsK
ICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKKworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKQEAgLTEzNDQyLDQ0
ICsxMzQ0NywzMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRocm93U3RhdGljRXJy
b3IoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKiBu
b2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGVudW1lcmF0
b3IpOworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworCisg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIG1vZGVHUFIgPSBt
b2RlLmdwcigpOwogICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsK
KworICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgUmV1c2UsIGlu
ZGV4KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBpbmNyZW1lbnRMb29wOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lOworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geworCisgICAgICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGluaXRNb2RlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBt
b2RlR1BSKTsKKworICAgICAgICAgICAgaW5jcmVtZW50TG9vcCA9IG1faml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2guZ3ByKCkpOwor
CisgICAgICAgICAgICBpbml0TW9kZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25lID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaC5ncHIo
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzY3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Cisg
ICAgICAgIH0pKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkubGlua1RvKGluY3JlbWVudExvb3AsICZtX2pp
dCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkg
PDwgMzIpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0Lm9yNjQoc2Ny
YXRjaC5ncHIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChu
b2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5h
bWVkTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwor
CisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGVudW1lcmF0b3IuCisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgp
LCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAg
ICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBtX2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBi
YXNlUmVncyA9IGJhc2UucmVncygpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BS
KTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleChOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVwZGF0
ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVncyA9
IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYWly
UmVncy5wYXlsb2FkR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIG1faml0LmFuZDMy
KFRydXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXls
b2FkR1BSLCByZXN1bHRHUFIpOworCiAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9w
ZXJ0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBh
aXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGFpckdQUiA9IGlzNjRCaXQoKSA/IHBhaXJS
ZWdzLnBheWxvYWRHUFIoKSA6IHBhaXJSZWdzLnRhZ0dQUigpOwogCi0gICAgSlNWYWx1ZVJlZ3Mg
YmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBt
X2ppdC5yc2hpZnQ2NChwYWlyR1BSLCBUcnVzdGVkSW1tMzIoMzIpLCByZXN1bHRHUFIpOworI2Vs
c2UKKyAgICBtX2ppdC5tb3ZlKHBhaXJHUFIsIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICBtX2pp
dC5hbmQzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlv
bk1vZGVNYXNrKSwgcmVzdWx0R1BSKTsKKworICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBpbmRleE9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvck9wZXJhbmQodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworCisgICAgR1BSUmVnIGluZGV4ID0gaW5kZXhPcGVyYW5kLmdwcigpOworICAg
IEdQUlJlZyBtb2RlID0gbW9kZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIGVudW1lcmF0b3Ig
PSBlbnVtZXJhdG9yT3BlcmFuZC5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
SlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVncywgcHJvcGVydHlHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcik7CiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgbm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9k
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSog
bm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmVTbG93UGF0aDsKKworICAgICAg
ICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQpIHsKKyAgICAgICAg
ICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdl
RWRnZSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLmVtcGxhY2UodGhpcywgc3RvcmFnZUVkZ2Up
OworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgNSkpOworCisgICAgICAgICAgICBHUFJSZWcgbW9kZUdQUiA9IG1v
ZGUuZ3ByKCk7CisgICAgICAgICAgICBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgcmVzdWx0UmVncyA9
IHJlc3VsdC5yZWdzKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpOworCisgICAgICAgICAgICBib29sIGhhdmVTdG9yYWdlID0gISFzdG9y
YWdlRWRnZTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlVGVtcG9yYXJ5OworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdl
KSB7CisgICAgICAgICAgICAgICAgc3RvcmFnZVRlbXBvcmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlz
LCBSZXVzZSwgZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2VUZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG5vdEZhc3ROYW1lZENhc2VzOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGdlbmVyYXRlIHRoaXMgY29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGFuIG9i
amVjdC4KKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIGJhc2UgaXMgYSBjZWxsIGhlcmUgc2luY2Ug
d2Ugd29uJ3QgZ2VuZXJhdGUgTmFtZWRNb2RlIHByb3BlcnRpZXMgZm9yIG5vbi1vYmplY3RzLgor
ICAgICAgICAgICAgICAgIC8vIFRPRE86IHB1dCBBc3NlcnQgaGVyZT8KKworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYg
d2Uga25vdyB0aGVyZSdzIG9ubHkgb25lIHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBl
bWJlZCBpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisKKyAgICAgICAgICAgICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNo
b3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byByZXByZXNlbnQgSW5kZXhlZCtOYW1lZD8KKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCkgPT0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAzKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGJh
ZFN0cnVjdHVyZVNsb3dQYXRoID0gYmFkU3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKGJhZFN0cnVjdHVy
ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgICAg
ICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5s
aW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworCisgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUNlbGxHUFIs
IGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
aXQncyBvdXQgb2YgbGluZQorICAgICAgICAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIoc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlQ2VsbEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgfSkpOworCisgICAgICAgIC8vIFdlIHJlbHkgb24gY29tcGlsZUdldEJ5VmFsIHRv
IGNhbGwganNWYWx1ZVJlc3VsdCBmb3IgdXMuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGtp
bmRhIGhhY2t5Li4uCisgICAgICAgIEFTU0VSVChnZW5lcmF0aW9uSW5mbyhub2RlKS5qc1ZhbHVl
UmVncygpID09IHJlc3VsdFJlZ3MgJiYgZ2VuZXJhdGlvbkluZm8obm9kZSkucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0SlMpOworCisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93UGF0
aC5pc1NldCgpKQorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KGJhZFN0cnVjdHVyZVNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5h
bWVBbmRHZXRCeVZhbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VDZWxsR1BSLCBpbmRleEdQUiwgZW51bWVyYXRvckdQUikpOworCisgICAgICAgIGRvbmVDYXNl
cy5saW5rKCZtX2ppdCk7CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2lu
ZCgpKSkgeworICAgICAgICAvLyBVc2UgbWFudWFsIG9wZXJhbmQgc3BlY3VsYXRpb24gc2luY2Ug
Rml4dXAgbWF5IGhhdmUgcGlja2VkIGEgVXNlS2luZCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gQ2Vs
bFVzZS4KKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZU9wZXJhbmQodGhpcywgYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRn
ZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShOb2RlKiBub2RlLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9uKQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlUmVncywgR1BSUmVnIGJhc2VDZWxs
R1BSKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5TmFtZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDMpKTsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsKIAotICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Ub0luZGV4
U3RyaW5nLCByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleEdQUik7
Ci0gICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5TmFtZVJlZ3MgPSBwcm9wZXJ0eU5h
bWUucmVncygpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJl
Z3MoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3BlcmF0aW9uQ2FzZXM7
CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZSkubV90eXBlICYgflNwZWND
ZWxsKQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90
Q2VsbChiYXNlUmVncykpOworCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgZ2VuZXJh
dGUgdGhpcyBjb2RlIGlmIHdlIGtub3cgYmFzZSBpcyBub3QgYSBjZWxsLgorICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBtb2RlR1BSLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1v
ZGUpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSk7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMubGluaygmbV9qaXQpOwor
CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24oc2xvd1Bh
dGhGdW5jdGlvbiwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VS
ZWdzLCBwcm9wZXJ0eU5hbWVSZWdzLCBpbmRleEdQUiwgbW9kZUdQUik7CisgICAgICAgIG1faml0
LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAg
ICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOwor
ICAgIH07CisKKyAgICBpZiAoaXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVy
YXRlKGJhc2UuZ3ByKCksIGJhc2UuZ3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgICAgICBnZW5lcmF0ZShiYXNlLnJl
Z3MoKSwgYmFzZS5yZWdzKCkucGF5bG9hZEdQUigpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKiBub2RlKQoreworICAgIGNv
bXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckluQnlW
YWwpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc093blBy
b3BlcnR5KE5vZGUqIG5vZGUpCit7CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShu
b2RlLCBvcGVyYXRpb25FbnVtZXJhdG9ySGFzT3duUHJvcGVydHkpOwogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqIG5vZGUpCkBAIC0xMzYyMiw2NyAr
MTM4OTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9k
ZSogbm9kZSkKICAgICBibGVzc2VkQm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eShOb2RlKiBub2RlKQotewotICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUt
PmNoaWxkMygpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAg
ICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICBHUFJSZWcg
cHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdTdHJ1
Y3R1cmU7Ci0KLSAgICB3cm9uZ1N0cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxs
KGJhc2VSZWdzKSk7Ci0KLSAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3By
KCksIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkp
KTsKLQotICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVy
YXRpb25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlUmVncywgcHJvcGVydHlHUFIpKTsKLSAgICBibGVzc2VkQm9vbGVhblJl
c3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdGlvbj4KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25TdHJ1Y3R1
cmVQcm9wZXJ0eUltcGwoTm9kZSogbm9kZSwgRnVuY3Rpb24gc2xvd1BhdGgpCi17Ci0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgIEpT
VmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIENDYWxsSGVs
cGVyczo6SnVtcExpc3Qgd3JvbmdTdHJ1Y3R1cmU7Ci0KLSAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9y
LmdwcigpLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7Ci0KLSAgICBtb3ZlVHJ1ZVRvKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywg
c2xvd1BhdGgsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BS
LCBwcm9wZXJ0eUdQUikpOwotICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpLCBub2RlKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093
blN0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgY29tcGlsZUhhc093blN0cnVj
dHVyZVByb3BlcnR5SW1wbChub2RlLCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7
Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KE5v
ZGUqIG5vZGUpCi17Ci0gICAgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2Rl
LCBvcGVyYXRpb25JblN0cnVjdHVyZVByb3BlcnR5KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKiBub2RlKQogewogICAgIGlmIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgewpAQCAtMTM3MDksMzkgKzEzOTIx
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihO
b2RlKiBub2RlKQogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShOb2RlKiBub2RlKQotewot
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSB8fCBu
b2RlLT5vcCgpID09IEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUpOwotICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwotCi0gICAgR1BSUmVnIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwot
ICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BS
ID0gc2NyYXRjaC5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJl
Z3MoKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBpbmRleEdQUiwKLSAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgKG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lKQotICAgICAgICAgICAgPyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKQotICAgICAgICAgICAgOiBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAg
IG1faml0Lm1vdmVWYWx1ZShqc051bGwoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgIGluQm91bmRzLmxpbmsoJm1faml0
KTsKLQotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpCYXNlSW5kZXgoc2NyYXRjaEdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0
ciksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7Ci0jZW5kaWYKLQotICAgIGRvbmUubGluaygmbV9qaXQp
OwotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Ci19Ci0KIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRFeGVjdXRhYmxlKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTQ5MzQs
MjggKzE1MTEzLDI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0Fy
cmF5V2l0aFNpemUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHNpemVHUFIs
IHN0b3JhZ2VHUFIpKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRp
b24pCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUq
IG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbiwgY29uc3QgU2NvcGVk
TGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+JiBwcmVmaXgpCiB7CiAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAog
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgaW5kZXhHUFIgPSBp
bmRleC5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQ
UlJlZyBpbmRleEdQUiA9IEludmFsaWRHUFJSZWc7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IElu
dmFsaWRHUFJSZWc7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwog
ICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgc3dpdGNoIChtb2Rl
LnR5cGUoKSkgewogICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkNvbnRp
Z3VvdXM6IHsKLSAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
bm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5k
ZXgoKSkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBH
UFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNo
R1BSID0gc2NyYXRjaC5ncHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0
R1BSKSA9IHByZWZpeCgpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpOwogCiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAg
LTE0OTgzLDEyICsxNTE2MiwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgIEFTU0VSVCgh
IW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NF
UlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkp
KTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgRlBSVGVtcG9y
YXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5m
cHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCisgICAg
ICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAg
ICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQpAQCAtMTUwMTIsMTMgKzE1MTkzLDE1IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19K
SVRPcGVyYXRpb25fR0NaIHNsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5
OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFn
ZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAog
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQ
UiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5k
cygpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgb3V0T2ZCb3VuZHMpOwpAQCAtMTUwNDcsNzMgKzE1MjMwLDEzIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwg
U19KSVRPcGVyYXRpb25fR0NaIHNsCiAgICAgZGVmYXVsdDogewogICAgICAgICAvLyBGSVhNRTog
T3B0aW1pemUgVHlwZWRBcnJheXMgaW4gSGFzSW5kZXhlZFByb3BlcnR5IElDCiAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAg
c3RkOjp0aWUoaW5kZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQog
CiAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywg
c2xvd1BhdGhPcGVyYXRpb24sIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VHUFIsIGluZGV4R1BSKSk7Ci0KLSAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3Vs
dEdQUiwgbm9kZSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREaXJlY3RQ
bmFtZShOb2RlKiBub2RlKQotewotICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52
YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2ppdC5ncmFw
aCgpLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMik7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIGJhc2VFZGdlKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBwcm9wZXJ0eUVkZ2UpOwotICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAg
ICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLQotICAgIEVkZ2UmIGVudW1l
cmF0b3JFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKLSAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgaW5kZXhFZGdlKTsKLSAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKLSAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAg
Ly8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICBzbG93UGF0aC5hcHBlbmQoCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgc2NyYXRjaEdQUiwK
LSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIGVu
dW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIC8vIElmIGluZGV4
IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhl
biBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxp
bmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAot
ICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7
Ci0KLSAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlR1BS
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBs
aW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZz
ZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICBtX2ppdC5tb3ZlKGluZGV4R1BS
LCBzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsK
LSAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAg
ICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9m
ZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpOwotICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxp
bmsoJm1faml0KTsKLQotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93
UGF0aCwgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVy
dHlHUFIpKSk7Ci0KLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSogbm9kZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA5
OGM3NjE2YjhmZDJmYmY1YzRkZDhhNTc3MTUwOGFkMjY3OWY5OWQxLi5kMTIwYjdiNGZiODQ0MzY5
ZDcyY2Q2MDE4MWJjMDhjMGI2YzkxN2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCkBAIC00Nyw2ICs0Nyw3IEBACiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdQUlRlbXBvcmFyeTsKK2NsYXNzIEpTVmFsdWVSZWdz
VGVtcG9yYXJ5OwogY2xhc3MgSlNWYWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRv
cjsKIGNsYXNzIFNwZWN1bGF0aXZlSklUOwpAQCAtMjQ2LDYgKzI0Nyw4IEBAIHB1YmxpYzoKICAg
ICB9CiAgICAgR1BSUmVnIGFsbG9jYXRlKEdQUlJlZyBzcGVjaWZpYykKICAgICB7CisgICAgICAg
IGlmIChzcGVjaWZpYyA9PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdGUoKTsK
ICNpZiBFTkFCTEUoREZHX1JFR0lTVEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICAgICAg
bV9qaXQuYWRkUmVnaXN0ZXJBbGxvY2F0aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7
CiAjZW5kaWYKQEAgLTEzNDUsMTIgKzEzNDgsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
dGVtcG9yYXJ5UmVnaXN0ZXJGb3JQdXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUtPmFycmF5TW9kZSgp
KTsKICAgICB9CiAgICAgCisgICAgLy8gV2UgdXNlIGEgc2NvcGVkTGFtYmRhIHRvIHBsYWNhdGUg
cmVnaXN0ZXIgYWxsb2NhdGlvbiB2YWxpZGF0aW9uLgorICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
KE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZv
cm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKwogICAgIHZvaWQg
Y29tcGlsZUdldENoYXJDb2RlQXQoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25T
dHJpbmcoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSosIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZUZyb21D
aGFyQ29kZShOb2RlKik7IAogCi0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3Vt
ZW50cyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhO
b2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiwg
Y29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERh
dGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CisgICAgdm9pZCBjb21waWxlR2V0
QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVw
bGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4m
IHByZWZpeCk7CiAKICAgICB2b2lkIGNvbXBpbGVHZXRQcml2YXRlTmFtZShOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlR2V0UHJpdmF0ZU5hbWVCeUlkKE5vZGUqKTsKQEAgLTE0MjQsMTIgKzE0MzAs
MTIgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpKdW1wIGp1bXBGb3JUeXBlZEFycmF5SXNE
ZXRhY2hlZElmT3V0T2ZCb3VuZHMoTm9kZSosIEdQUlJlZyBiYXNlR1BSLCBKSVRDb21waWxlcjo6
SnVtcCBvdXRPZkJvdW5kcyk7CiAgICAgdm9pZCBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKE5v
ZGUqLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIGluZGV4R1BSKTsKICAgICB2b2lkIGNvbXBpbGVH
ZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUsIGNvbnN0IFNjb3Bl
ZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHBy
ZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50
VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJh
eVR5cGUpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSos
IFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFy
cmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHBy
ZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVn
IGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lk
IGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKik7CisgICAgdm9pZCBjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3Rk
Ojp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3Jt
YXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1i
b2woTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRh
Rm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQg
Y29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcoTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRn
ZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2Vs
bFdpdGhTeW1ib2woTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGls
ZDMpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsV2l0aFRoaXMoTm9kZSopOwpAQCAtMTQ1OCw3
ICsxNDY0LDcgQEAgcHVibGljOgogI2VuZGlmCiAgICAgICAgIEVkZ2UgdmFsdWVVc2UpOwogICAg
IHZvaWQgbG9hZEZyb21JbnRUeXBlZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcHJv
cGVydHlSZWcsIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIHNl
dEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUqLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFy
cmF5VHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUpOworICAgIHZvaWQgc2V0SW50VHlwZWRBcnJheUxv
YWRSZXN1bHQoTm9kZSosIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlLCBi
b29sIGNhblNwZWN1bGF0ZSwgYm9vbCBzaG91bGRCb3gpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBDbGFzc1R5cGU+IHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uQ29tbW9uKEdQUlJlZywgUmVnaXN0
ZXJlZFN0cnVjdHVyZSwgR1BSUmVnLCBHUFJSZWcsIEdQUlJlZywgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0Jiwgc2l6ZV90LCBGdW5jdGlvbkV4ZWN1dGFibGUqKTsKICAgICB2b2lkIGNvbXBpbGVO
ZXdGdW5jdGlvbihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUq
KTsKQEAgLTE1MjQsMjEgKzE1MzAsMjIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRvTG93
ZXJDYXNlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUaHJvdyhOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlVGhyb3dTdGF0aWNFcnJvcihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RW51bWVy
YWJsZUxlbmd0aChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVy
ZVByb3BlcnR5KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHko
Tm9kZSopOwotICAgIHZvaWQgY29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSopOworCisgICAgdm9p
ZCBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoTm9kZSopOworICAgIHZvaWQgY29t
cGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKE5vZGUqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0
aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoTm9k
ZSosIFNsb3dQYXRoRnVuY3Rpb25UeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5C
eVZhbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5v
ZGUqKTsKKwogICAgIHZvaWQgY29tcGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlUHV0QnlJZChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZFdpdGhUaGlzKE5vZGUqKTsKLSAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgRnVuY3Rpb24+Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJv
cGVydHlJbXBsKE5vZGUqLCBGdW5jdGlvbik7Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0
dXJlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUluU3RydWN0dXJlUHJvcGVydHko
Tm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldERpcmVjdFBuYW1lKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdl
dEVudW1lcmF0b3JQbmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0RXhlY3V0YWJsZShO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0R2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVHZXRTZXR0ZXIoTm9kZSopOwpAQCAtMTU2OCw3ICsxNTc1LDcgQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZUNhbGxOdW1iZXJDb25zdHJ1Y3RvcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
TG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFk
b3dDaGlja2VuVGFpbChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1opOworICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eShOb2RlKiwgU19KSVRPcGVyYXRpb25fR0NaLCBjb25zdCBTY29wZWRMYW1iZGE8c3Rk
Ojp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRXh0
cmFjdENhdGNoTG9jYWwoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNsZWFyQ2F0Y2hMb2NhbHMo
Tm9kZSopOwogICAgIHZvaWQgY29tcGlsZVByb2ZpbGVUeXBlKE5vZGUqKTsKQEAgLTE5MjYsNiAr
MTkzMyw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQog
CisgICAgSlNWYWx1ZVJlZ3MgcmVncygpIHsgcmV0dXJuIGpzVmFsdWVSZWdzKCk7IH0KKwogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgR1BSUmVnIGdwcigpCiAgICAgewpAQCAtMTk2NSw3ICsxOTc0
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxv
YWRHUFIoKSk7CiAgICAgfQogCi0gICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCkK
KyAgICBHUFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoID0gUGF5bG9hZFdvcmQpCiAgICAg
ewogICAgICAgICByZXR1cm4ganNWYWx1ZVJlZ3MoKS5ncHIod2hpY2gpOwogICAgIH0KQEAgLTIw
MDMsMjEgKzIwMTIsMjAgQEAgcHJpdmF0ZToKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKKyAgICBTdG9yYWdlT3BlcmFuZCgpID0g
ZGVmYXVsdDsKKwogICAgIGV4cGxpY2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBq
aXQsIEVkZ2UgZWRnZSkKICAgICAgICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVk
Z2UpCiAgICAgICAgICwgbV9ncHJPckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2ppdCk7Ci0gICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIGlmIChq
aXQtPmlzRmlsbGVkKG5vZGUoKSkpCi0gICAgICAgICAgICBncHIoKTsKKyAgICAgICAgZW1wbGFj
ZShqaXQsIGVkZ2UpOwogICAgIH0KICAgICAKICAgICB+U3RvcmFnZU9wZXJhbmQoKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAg
ICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZh
bGlkICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJ
bnZhbGlkKTsKICAgICB9CiAgICAgCiAgICAgRWRnZSBlZGdlKCkgY29uc3QKQEAgLTIwMzYsNiAr
MjA0NCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5m
aWxsU3RvcmFnZShlZGdlKCkpOwogICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAg
fQorCisgICAgdm9pZCBlbXBsYWNlKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIG1faml0ID0gaml0OworICAgICAgICBtX2VkZ2UgPSBlZGdlOworICAgICAg
ICBBU1NFUlQobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VS
VChtX2ppdCk7CisgICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8
IGVkZ2UudXNlS2luZCgpID09IEtub3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmls
bGVkKG5vZGUoKSkpCisgICAgICAgICAgICBncHIoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB1
c2UoKQogICAgIHsKQEAgLTIwNDMsOSArMjA2Miw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBw
cml2YXRlOgotICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdDsKKyAgICBTcGVjdWxhdGl2ZUpJVCog
bV9qaXQgeyBudWxscHRyIH07CiAgICAgRWRnZSBtX2VkZ2U7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJ
bnZhbGlkOworICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZCB7IEludmFsaWRHUFJSZWcgfTsKIH07
CiAKIApAQCAtMjEzNCwxMSArMjE1MywxOSBAQCBjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB7
CiBwdWJsaWM6CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCopOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1
bGF0aXZlSklUKiwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCk7CisjaWYgVVNFKEpTVkFMVUUzMl82
NCkKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVj
aWZpY1BheWxvYWQsIEdQUlJlZyBzcGVjaWZpY1RhZyk7CisjZW5kaWYKICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1
c2VUYWcsIFQmIG9wZXJhbmQsIFdoaWNoVmFsdWVXb3JkIHJlc3VsdFJlZ1dvcmQgPSBQYXlsb2Fk
V29yZCk7CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRh
ZywgSlNWYWx1ZU9wZXJhbmQmKTsKICAgICB+SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICAK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gISFyZWdzKCk7IH0KKworICAg
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5JiBvcGVyYXRvcj0oSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmJikg
PSBkZWZhdWx0OworCiAgICAgSlNWYWx1ZVJlZ3MgcmVncygpOwogCiBwcml2YXRlOgpAQCAtMjE1
MCw2ICsyMTc3LDI2IEBAIHByaXZhdGU6CiAjZW5kaWYKIH07CiAKKyNpZiBVU0UoSlNWQUxVRTY0
KQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVn
c1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hp
Y2hWYWx1ZVdvcmQpCisgICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQoreworfQorI2Vs
c2UKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdo
aWNoVmFsdWVXb3JkIHJlc3VsdFdvcmQpCit7CisgICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9h
ZFdvcmQpIHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2Us
IG9wZXJhbmQpOworICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgICAg
ICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKKyAgICB9Cit9
CisjZW5kaWYKKwogY2xhc3MgRlBSVGVtcG9yYXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCmluZGV4IDlkNDAzNjk2MTBkODllNDFlNTE2ZjZjNGE0MjVl
NWZkNzEwMmExYmUuLmFiYzhkMThhYTM5NzY0YTJmOWMwYzA3NDFjZmQxZTlhNThkZGM0MjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcApAQCAtMTgxMiw2ICsxODEyLDMzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQ29udGlndW91c1B1dEJ5VmFsKE5vZGUqIG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZQog
ICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7ICAgIAogfQog
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3Qg
U2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3Jt
YXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6
CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworI2lmIENPTVBJTEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RF
KQorICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJh
Z2UsIEpTVmFsdWVSZWdzKCksIDApOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgR1BS
UmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4
KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCkpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBp
ZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAg
aWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkg
eworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtp
bmQoKSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0
ZSBjZWxsLiBXZSdsbCBwcm9iYWJseSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcHJvcGVydHlSZWdzID0gcHJvcGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVz
aFJlZ2lzdGVycygpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZh
bENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBw
cm9wZXJ0eVJlZ3MpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworCisgICAgICAgIEpTVmFsdWVSZWdz
IGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOworICAgICAgICBKU1ZhbHVlUmVncyBwcm9w
ZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9
IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9
IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJ
Zk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9k
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFn
R1BSKCkpKTsKKworICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAg
ICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0
ZSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBiYXNl
UmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKKworICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3Ry
aW5nID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICht
X3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNT
eW1ib2wpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAg
ICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxw
dHIsIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MpOworCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFs
KGdlbiwgc2xvd1BhdGguZ2V0KCkpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZN
b3ZlKHNsb3dQYXRoKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNh
c2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlz
SW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHBy
b3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Cisg
ICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRJbnQz
MiA6IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAg
IGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEludDMyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpOworCisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMs
IEpTVmFsdWVSZWdzKCksIDAsCisgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAg
ICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIFBheWxvYWRPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQo
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRK
Uyk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAorICAgICAgICAg
ICAgICAgIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAg
ICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hh
aW4oKSkgeworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2pp
dC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFJl
Z3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3Mo
KSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1
bHRSZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRp
ZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkVmFsdWUo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKworICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAor
ICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6
IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
ICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJl
Z3MsIGZvcm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQpLCByZXN1bHQuZnByKCkpOworICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzU2FuZUNoYWluKCkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhM
b2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5m
cHIoKSkpOworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAg
ICAgICAgICAgICBib3hEb3VibGUocmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUg
JiYgIXJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisK
KyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBz
dG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBS
UmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChE
YXRhRm9ybWF0SlMpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAg
ICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAg
ICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzKTsKKworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9w
ZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisK
KyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6
OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwg
MCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwg
bV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zm
c2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwor
CisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdz
LCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdl
Ojp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXls
b2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRz
KTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChob2xlKTsKKyAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoCisgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xv
d0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAg
ICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAg
ICBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJp
bmc6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0
QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OiB7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1v
ZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJy
YXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsK
QEAgLTIyMzMsNyArMjU2MiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUq
IG5vZGUpCiAKICAgICBjYXNlIFN0cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24g
U3RyaW5nQ2hhckF0IG5vZGUgaGF2aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0g
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVn
c1RlbXBvcmFyeSByZXN1bHQ7CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAg
ICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsK
KyAgICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTIyNjUsMzI2ICsyNTk5
LDI3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCku
dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jaWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxF
X0NPREUpCi0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1
YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDApOwotI2VuZGlmCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBp
bmRleCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLQot
ICAgICAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAg
ICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7
Ci0KLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsK
LSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
LCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdp
dGhTeW1ib2wobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJp
Z2h0LgotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BS
ID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3Mg
PSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MpOwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkganNW
YWx1ZVJlc3VsdDsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IG9uZVJlZ1Jlc3VsdDsKKyAgICAgICAg
Y29tcGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdz
LCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1h
dCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7
CisgICAgICAgICAgICBzd2l0Y2ggKHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0RG91YmxlOgogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7Ci0KLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwgVGFnV29yZCk7Ci0gICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFBh
eWxvYWRXb3JkKTsKLQotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpz
VmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9w
ZXJ0eS5qc1ZhbHVlUmVncygpOwotICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4
Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXpl
KCkpOwotICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRS
ZWdpc3RlcnMoKTsKLQotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKLQotICAgICAg
ICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0LmNv
ZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NU
eXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAgICAgICAgICBiYXNlUmVncywg
cHJvcGVydHlSZWdzLCByZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKLQotICAgICAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUo
U3BlY1N0cmluZykpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KS5pc1R5cGUoU3BlY1N5bWJvbCkpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNTeW1ib2wgPSB0cnVlOwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aChtX2ppdCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRo
R2VuZXJhdG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93
Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFz
ZVJlZ3MsIHByb3BlcnR5UmVncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFk
ZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsK
LSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXls
b2FkKHRoaXMpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
PT0gQXJyYXk6OkludDMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+YXJy
YXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAg
ICAgICBPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFs
dWVUYWcpKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBh
eWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1
bHRQYXlsb2FkLmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAg
ICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBUYWdPZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRUYWcuZ3ByKCkp
OwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNl
dCksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5j
aElmTm90RW1wdHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0VGFnLmdwcigp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRUYWcuZ3ByKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0
UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZ1JlZykpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3Vs
dFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBi
YXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
ICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJl
c3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzU2FuZUNoYWluKCkpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHQu
ZnByKCkpKTsKLSAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2Rl
KTsKKyAgICAgICAgICAgIGNhc2UgRGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgY2FzZSBE
YXRhRm9ybWF0Q2VsbDoKKyAgICAgICAgICAgICAgICBvbmVSZWdSZXN1bHQgPSBHUFJUZW1wb3Jh
cnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzOjpwYXls
b2FkT25seShvbmVSZWdSZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9h
ZCh0aGlzKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQ
UlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAg
IEZQUlJlZyB0ZW1wUmVnID0gdGVtcC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJl
Zyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBS
ZWcpKTsKLSAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1bHRUYWdSZWcsIHJlc3Vs
dFBheWxvYWRSZWcpOwotCi0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpT
VmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpB
cnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsK
LSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAg
ICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAgICAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAg
ICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQg
PT0gRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0ID0gSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IGpzVmFs
dWVSZXN1bHQucmVncygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotCi0gICAgICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFBheWxvYWQodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0
VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQ
YXlsb2FkLmdwcigpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
LQotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCByZXN1bHRUYWdSZWcpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9s
ZSA9IG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWRSZWcpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5k
cyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOwotICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50
LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAg
ICAgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25EaXJlY3RBcmd1bWVudHMobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDogewotICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgp
LnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAg
ICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBl
ZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsK
KyAgICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC00MTEyLDUxICs0
MTQ3LDU1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAg
ICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKG5vZGUpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAg
Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgIGNv
bXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkobm9kZSk7CisgICAgY2FzZSBIYXNJbmRleGVkUHJv
cGVydHk6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5k
ZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0
dXJlUHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewor
ICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBp
bGVJblN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0lu
ZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0
RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBv
cGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJl
Y3RQbmFtZTogewotICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVH
ZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZh
bDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAg
Y2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVt
ZXJhdG9yUG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAg
ICAgIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmlu
Zyhub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAg
IGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKwogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVU
eXBlKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IGI1ZTFjYzNlNDJkMmZiNGM5ZDRmMTMx
MDdlOThlZmUwYjIwNWU1YzcuLjEwNzcxMzE3MTRkYThhNDU1M2JiY2I1ZDhlNDZiZDMzOGI2ZjRh
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcApAQCAtMjI0Niw2ICsyMjQ2LDM3MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
QnJhbmNoKE5vZGUqIG5vZGUpCiAgICAgfQogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2Ug
QXJyYXk6OkFueVR5cGVkQXJyYXk6CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nQXJndW1lbnRzOgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVz
aW5nUHJlZGljdGlvbnM6CisgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgREZH
X0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworCisgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCisgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0UmVncy5n
cHIoKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CisgICAgY2Fz
ZSBBcnJheTo6QmlnVWludDY0QXJyYXk6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAg
ICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVj
dFVzZSkgeworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgeworICAg
ICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUs
IHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0g
cHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Cisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
cHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICBHUFJU
ZW1wb3Jhcnkgc3R1YkluZm87CisgICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEludmFsaWRH
UFJSZWc7CisgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkg
eworICAgICAgICAgICAgc3R1YkluZm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICBzdHViSW5mb0dQUiA9IHN0dWJJbmZvLmdwcigpOworICAgICAgICB9CisKKyAgICAgICAgc3Bl
Y3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjpp
Z25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1f
aml0LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5l
ZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQg
dXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAg
ICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOworCisg
ICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBKU1ZhbHVlUmVncyhwcm9wZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0
dWJJbmZvR1BSKTsKKworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHVi
SW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0
ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJP
bmx5KSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVl
OworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KG1faml0KTsKKworICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdK
SVQpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwor
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7Cisg
ICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAg
ICAgICAgc2xvd1BhdGggPSBzbG93UGF0aElDQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRy
ZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9u
KCkpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IoY29kZU9yaWdpbikpLCBzdHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVy
dHlHUFIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0
aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBn
ZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9
CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShy
ZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBB
cnJheTo6SW50MzIgPyBEYXRhRm9ybWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0ID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91
bmRzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2Rl
KCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHQpOworICAg
ICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soCisgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LCBub2RlLCBm
b3JtYXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwor
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJh
c2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBz
dGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dFJlZyA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkp
KSk7CisKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0
UmVnKTsKKworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVD
aGFpbigpKSB7CisgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5
KHJlc3VsdFJlZyk7CisgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVn
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgbV9qaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSkpLCByZXN1bHRSZWcpOworICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1w
dHkocmVzdWx0UmVnKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAg
ICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywg
dGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CisgICAgICAgIH0KKworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Cisg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgICAgICAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKKwor
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3Jt
YXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHBy
ZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKwor
ICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3Vs
dFJlZyk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5l
Q2hhaW4oKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwg
SlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0UmVnKSk7Cisg
ICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAg
IGJveERvdWJsZShyZXN1bHRSZWcsIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
cmVzdWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFp
bigpICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKKworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAg
ICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdl
LmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRl
bXBSZWcgPSB0ZW1wLmZwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7Cisg
ICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBm
b3JtYXQpID0gcHJlZml4KHJlc3VsdElzVW5ib3hlZCA/IERhdGFGb3JtYXREb3VibGUgOiBEYXRh
Rm9ybWF0SlMpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAg
ICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgeworICAg
ICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5s
aW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUlu
ZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkp
OworICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgTmFOID0gUE5hTjsKKyAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJk5hTiksIHRlbXBSZWcp
OworICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIEFT
U0VSVCghcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHRlbXBSZWcs
IG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAgICAgICAgICAgICAgICBib3hE
b3VibGUodGVtcFJlZywgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgYXV0byBk
b25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2pp
dCk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1Zh
bHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICAg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLmdwcigpLCBub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOwor
ICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFs
T2JqZWN0SW50LAorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLmdwcigpLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncy5ncHIoKSwgbm9kZSk7CisgICAgICAgIH0KKworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAg
Y2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Cisg
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
KworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOwor
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxw
dHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpKTsKKworICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Cisg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0
b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZv
cm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2
NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJl
c3VsdFJlZyk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRSZWcpKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2Rl
LCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVu
dHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUsIHByZWZp
eCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6
OkludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5
OjpVaW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgIGNh
c2UgQXJyYXk6OlVpbnQxNkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAg
IGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6
IHsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVk
QXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0
eXBlLCBwcmVmaXgpOworICAgIH0gfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMjcxMyw3
ICszMDc3LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAog
ICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJpbmdDaGFy
QXQgbm9kZSBoYXZpbmcgc2FtZSBiYXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2NvcGVkTGFt
YmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVy
cmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAg
ICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBBU1NF
UlQocHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0g
RGF0YUZvcm1hdENlbGwpOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3Vs
dC5yZWdzKCksIHByZWZlcnJlZEZvcm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0yNzQ2LDM0NSArMzExNSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAg
ICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5
OjpBbnlUeXBlZEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nQXJndW1lbnRzOgotICAgICAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgotICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgot
ICAgICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJyYXkgbW9k
ZSB0eXBlIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNp
ZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhH
UFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFs
dWVSZWdzKCksIG5vZGUsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSkpOwotCi0gICAgICAgICAgICB1c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0g
ICAgICAgICAgICBpbmRleC51c2UoKTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BS
KTsKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6QmlnVWlu
dDY0QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlm
IChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVz
ZSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KS51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNl
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3ltYm9sKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICAgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHQuZ3ByKCksIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAg
ICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
R1BSVGVtcG9yYXJ5PiBzdHViSW5mbzsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBwcm9wZXJ0eSk7Ci0KLSAgICAg
ICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAgICAgICAgICAg
ICBzdHViSW5mby5lbXBsYWNlKHRoaXMpOwotICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSID0g
c3R1YkluZm8tPmdwcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVy
dHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwot
Ci0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0KLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdp
bi5zZW1hbnRpYzsKLSAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5y
ZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQo
Y29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRD
b21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZv
ck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNl
R1BSKSk7Ci0KLSAgICAgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAg
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBj
YWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNW
YWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOwotCi0gICAgICAgICAgICBpZiAobV9z
dGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3Ry
aW5nKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9
IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAg
IGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxz
ZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3ltYm9sKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c1N5bWJvbCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6REZHSklUKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93
UGF0aEp1bXAoKSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVy
YXRvcj4gc2xvd1BhdGg7Ci0gICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5
cGU6OkRGR0pJVCkpIHsKLSAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxs
KAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBz
dHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVT
dHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGlt
aXplLAotICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1
YkluZm9HUFIsIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHVi
SW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGgu
Z2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0
aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAg
ICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcg
PSBzdG9yYWdlLmdwcigpOwotCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0
ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRp
Z3VvdXMpOwotICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0g
bV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkp
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAotICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZF
bXB0eShyZXN1bHQuZ3ByKCkpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9ybWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7Cisg
ICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5
VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0
PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRG
b3JtYXQpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAg
ICBzd2l0Y2ggKHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0
RG91YmxlOgogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3Ro
KCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCks
IHJlc3VsdFJlZyk7Ci0KLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9m
Qm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5i
cmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxp
bmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5k
ZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7Ci0g
ICAgICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xv
YmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIHJlc3Vs
dFJlZyA9IHJlc3VsdC5mcHIoKTsKLQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0K
LSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwg
cmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhM
b2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJl
c3VsdFJlZykpOwotICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUp
OworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJy
ZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0
SlNJbnQzMik7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3Jhcnko
dGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgcmVz
dWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigp
ICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKLQotICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
LSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gcmVz
dWx0OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJSZWc+IHJlc3VsdFJlZzsKLSAgICAg
ICAgICAgIGlmICghcmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmVt
cGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0LT5ncHIoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAg
ICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAg
ICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsK
LSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWlu
KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IE5hTiA9IFBOYU47Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3Rl
ZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygm
bV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9kZSk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGJveERvdWJsZSh0ZW1wUmVnLCAqcmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0
byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGlu
aygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZl
SW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgKnJlc3VsdFJlZyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcs
ICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAg
ICAgICAgICAgICAgKnJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VS
ZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdCgqcmVzdWx0
UmVnLCBub2RlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0g
ICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhM
b2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3Ro
T2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykp
OwotICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3By
KCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJp
bmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkludDE2QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFy
cmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJh
eTo6VWludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAg
ICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlw
ZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAg
IGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5
cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0g
fQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1
bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIApAQCAtMzU4MSw3ICszNjI2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29u
c3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gZmFsc2U7Ci0gICAgICAgIHNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdEdQUiwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKKyAgICAg
ICAgY29uc3RleHByIGJvb2wgc2hvdWxkQm94ID0gZmFsc2U7CisgICAgICAgIHNldEludFR5cGVk
QXJyYXlMb2FkUmVzdWx0KG5vZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHR5cGUsIGNhblNw
ZWN1bGF0ZSwgc2hvdWxkQm94KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTUyNjksNTIgKzUzMTUsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAg
ICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNv
bXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkobm9kZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eTogewotICAgICAgICBjb21w
aWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KG5vZGUpOworCisgICAgY2FzZSBIYXNJbmRleGVkUHJv
cGVydHk6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5k
ZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJl
c3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0
dXJlUHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewor
ICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBp
bGVJblN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0lu
ZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0
RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBv
cGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJl
Y3RQbmFtZTogewotICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVF
bnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVH
ZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZh
bDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAg
Y2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVt
ZXJhdG9yUG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAg
ICAgIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQotICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmlu
Zyhub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAg
IGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KKwogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVU
eXBlKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3YWYy
ODMzMmIwMzA3NDFiNGQ5YzQwZjBiZWYxZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRkMDM2
NzViZGQ1YmUyNzVmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAg
ICAgICAgICAgICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0
b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoK
QEAgLTM1Miw2ICszNTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
ICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNl
IEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAg
ICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKaW5kZXggMmUyZjA3ZGZjN2U4YzEzZGRiMGVkZDVhMmQwN2E1ZDg3
MmUxNzkwOC4uOWVkODcxMzNmNzcyMzBlMGUxYmQ0NDVmMzA2MjM0MzdmY2Q2MzQwNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgKQEAgLTExNCw2ICsxMTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUlu
ZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zm
c2V0KCkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJl
UHJvcGVydHlJbmRleCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9w
ZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
aW5kZXhMZW5ndGgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNl
dCgpKSBcCisgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNSb3Bl
U3RyaW5nX2ZsYWdzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmxhZ3MoKSkgXAogICAgIG1hY3Jv
KEpTUm9wZVN0cmluZ19sZW5ndGgsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAog
ICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcjAsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJl
cjAoKSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CmluZGV4IGExYTVmZDI0NGNmMjExMDMyNjQxOTdhNzZhZTMwYzdmNjBmNzllNjQuLjAzZjg2NTJj
NmNiODJjNjIwMjBkMWU2NmJiNTlmNDY1OTFkODNlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTI4NiwxOCArMjg2LDE1IEBAIGlubGlu
ZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgSW50NTJD
b25zdGFudDoKICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKICAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxl
UHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIElu
U3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZToKLSAgICBjYXNlIEdl
dEVudW1lcmFibGVMZW5ndGg6CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgog
ICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICBj
YXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5k
TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJv
cGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVy
YXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2Fz
ZSBCb3R0b21WYWx1ZToKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFu
dG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHAKaW5kZXggNmZlMjlkOTlmYTQ0MTQ5YzE0NmIyMWFiNDEwNGM0MDgwMzY5ZjM3MS4u
MWU2OWIyYTczMmFhYjdkZTRkZjRmYjM2N2ViZmRlZDAyOWVhZmZlOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTAyLDYgKzEwMiw4IEBA
CiAjaW5jbHVkZSA8d3RmL1JlY3Vyc2FibGVMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RkVW5v
cmRlcmVkU2V0Lmg+CiAKKyNpbmNsdWRlICJQcm9iZUNvbnRleHQuaCIKKwogI3VuZGVmIFJFTEVB
U0VfQVNTRVJUCiAjZGVmaW5lIFJFTEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCiAgICAg
aWYgKCEoYXNzZXJ0aW9uKSkgeyBcCkBAIC0xNTIzLDQwICsxNTI1LDMxIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAgICAg
ICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KTsKKyAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVy
dHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9w
ZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgotICAg
ICAgICAgICAgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2Ug
R2V0UHJvcGVydHlFbnVtZXJhdG9yOgorICAgICAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51
bWVyYXRvcigpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQ
cm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgICAgICBj
b21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdl
dERpcmVjdFBuYW1lKCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCgpOworICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlF
bnVtZXJhdG9yOgotICAgICAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOwor
ICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgICAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKCk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKCk7CisgICAgICAgIGNh
c2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JHZXRC
eVZhbCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdl
bmVyaWNQbmFtZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
KCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgICAgICBjb21waWxl
RW51bWVyYXRvckluQnlWYWwoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVt
ZXJhdG9ySGFzT3duUHJvcGVydHkoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0
dXJlSW1tZWRpYXRlKCk7CkBAIC01MDIwLDcgKzUwMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAv
LyB3ZSBkb21pbmF0ZSB0aGVtLgogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bCgpCisgICAgTFZhbHVlIGNvbXBpbGVHZXRCeVZhbEltcGwoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3Jp
Z2luLnNlbWFudGljKTsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSkgewpAQCAtNTA0Nyw4ICs1MDQwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2
ZS4KICAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJy
YXk6OkNvbnRpZ3VvdXMpCiAgICAgICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJl
KGJhc2UpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgZmFzdENhc2UgPSBtX291dC5uZXdCbG9jaygp
OwpAQCAtNTA4MCw4ICs1MDcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAg
ICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1
b3VzKQogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQp
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50
NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CkBAIC01MTAwLDggKzUwOTEsOCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRl
cmVkKHJlc3VsdCwgcmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCBy
ZXN1bHRJc1VuYm94ZWQgPSBtX25vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hh
aW4oKSAmJiAhKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKQEAg
LTUxNDEsMTggKzUxMzIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICBpZiAo
cmVzdWx0SXNVbmJveGVkKQotICAgICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkoRG91
YmxlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1
bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQu
cGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgICAgIHJldHVy
biBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CiAgICAgICAgICAgICBMVmFsdWUgaW5k
ZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogCiAgICAgICAg
ICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNz
VGhhbihpbmRleCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVl
VW5kZWZpbmVkKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6
OkRpcmVjdEFyZ3VtZW50czogewpAQCAtNTE2OSw4ICs1MTU4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNP
dXRPZkJvdW5kcyk7CiAgICAgICAgICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291
dC5iYXNlSW5kZXgoCiAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRz
X3N0b3JhZ2UsIGJhc2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LmxvYWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3
QmxvY2soKTsKQEAgLTUxOTIsOCArNTE4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50
NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOiB7CkBAIC01MjQ2LDggKzUyMzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9v
dXQucGhpKEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0
LCBvdmVyZmxvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEFycmF5OjpCaWdJbnQ2NEFycmF5OgpAQCAtNTI1NiwyNCArNTI0MiwyMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobV9ub2RlKSkg
ewogICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkudXNl
S2luZCgpID09IE9iamVjdFVzZSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3Bl
cmF0aW9uR2V0QnlWYWxPYmplY3RTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmlu
ZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVj
dFN5bWJvbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3lt
Ym9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAg
cmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5
VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICBsb3dK
U1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MCkpLCBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtNTM3Myw4ICs1
MzU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwog
Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIHBhdGNocG9pbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CkBAIC01MzkwLDggKzUzNzIsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0
ciwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0
byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAg
ICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNC
bG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01NDE3LDEzICs1Mzk4LDExIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAg
Y29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhl
cmUoYmFzZSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJl
c3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAg
IGNvbXBpbGVTdHJpbmdDaGFyQXQoKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBjb21waWxlU3RyaW5nQ2hhckF0SW1wbCgpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6SW50OEFycmF5OgpAQCAtNTQ0OCw5ICs1NDI3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvYWRGcm9tSW50
VHlwZWRBcnJheShwb2ludGVyLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAg
ICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAg
ICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVj
dWxhdGUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwpAQCAtNTQ2OSw4ICs1NDQ2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtl
ZXAgYmFzZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAg
ICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0RG91
YmxlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNTQ4MCw4ICs1NDU2
LDI0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlv
bnM6CiAgICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6CiAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwo
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsK
KyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRB
cnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBjb25z
dGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOworICAgICAgICAgICAgc2V0SW50VHlwZWRB
cnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IERvdWJs
ZSkKKyAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdl
dE15QXJndW1lbnRCeVZhbCgpCkBAIC04NTcxLDcgKzg1NjMsNyBAQCBwcml2YXRlOgogICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgZW1wdHlSZXN1bHQsIHNs
b3dSZXN1bHQpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkK
KyAgICBMVmFsdWUgY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKQogICAgIHsKICAgICAgICAgTFZh
bHVlIGJhc2UgPSBsb3dTdHJpbmcobV9ncmFwaC5jaGlsZChtX25vZGUsIDApKTsKICAgICAgICAg
TFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC5jaGlsZChtX25vZGUsIDEpKTsKQEAgLTg2
NzksNyArODY3MSwxMiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUg
c2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShiYXNlKTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIHJlc3VsdHMp
KTsKKyAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgcmVzdWx0cyk7CisgICAgfQorCisg
ICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUo
Y29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGls
ZVN0cmluZ0NoYXJDb2RlQXQoKQpAQCAtMTI5MDYsMTcgKzEyOTAzLDE2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGVtaXRTdG9yZUJhcnJpZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2Rl
LT5vcCgpID09IEZlbmNlZFN0b3JlQmFycmllcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRp
b24pCisgICAgTFZhbHVlIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKExWYWx1ZSBpbmRl
eCwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQogICAgIHsKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
b3JpZ2luLnNlbWFudGljKTsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCAwKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMy
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CiAgICAgICAgIEFycmF5TW9kZSBtb2Rl
ID0gbV9ub2RlLT5hcnJheU1vZGUoKTsKIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0
b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2Rl
LT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhl
YXAmIGhlYXAgPSBtb2RlLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPwogICAgICAgICAgICAgICAg
IG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3Vv
dXNQcm9wZXJ0aWVzOwpAQCAtMTI5NTEsMTEgKzEyOTQ3LDEwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291
dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVz
dWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6
IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9y
YWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4
KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVh
cCA9IG1faGVhcHMuaW5kZXhlZERvdWJsZVByb3BlcnRpZXM7CiAgICAgICAgICAgICAKQEAgLTEy
OTg5LDEyICsxMjk4NCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKElu
dDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xv
d1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9y
YWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4
KCkpKTsKIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9j
aygpOwogICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKQEAgLTEzMDI2LDE5NiArMTMwMjAsMjY5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGko
SW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNs
b3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAg
c2V0Qm9vbGVhbihtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlv
biwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0
LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5k
ZXgpKTsKICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFz
RW51bWVyYWJsZVByb3BlcnR5KCkKKyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgc2V0Qm9vbGVhbihjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5SW1wbChpbmRleCwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KSk7CisgICAgfQor
CisgICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCkKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMigpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhh
c0VudW1lcmFibGVQcm9wZXJ0eSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJv
cGVydHkpKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxV
c2UpCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJv
cGVydHlFbnVtZXJhdG9yQ2VsbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVl
KHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQog
Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNsb3dQYXRoQ2FsbD4KLSAgICB2b2lkIGNvbXBpbGVI
YXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoTFZhbHVlIGJhc2UsIFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwpCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUo
KQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgTFZhbHVlIHByb3Bl
cnR5ID0gbG93U3RyaW5nKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgZW51bWVy
YXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIExWYWx1
ZSBtb2RlID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAg
ICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAzKSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvcnJlY3RTdHJ1Y3R1cmUgPSBtX291dC5uZXdCbG9j
aygpOwotICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIGlmIChtX25vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwg
bm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXgpKSk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKG1f
bm9kZS0+Y2hpbGQxKCkpKSwKLSAgICAgICAgICAgIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVs
eShzbG93UGF0aCkpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrSGFzUHJvcGVydHkgPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
bV9vdXQubmV3QmxvY2soKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGNvcnJlY3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgaW5pdGlhbEluZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleEZvckhhc1Byb3BlcnR5ID0gbV9vdXQuYW5j
aG9yKGluZGV4KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihtb2Rl
KSwgdW5zdXJlKGNoZWNrSGFzUHJvcGVydHkpLCB1bnN1cmUoaW5jcmVtZW50KSk7CiAKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMy
KGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0Lmxv
YWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRT
dHJ1Y3R1cmVJRCkpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb3Jy
ZWN0U3RydWN0dXJlKSk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOwor
ICAgICAgICAgICAgTFZhbHVlIGluZGV4UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5k
ZXgpOworICAgICAgICAgICAgTFZhbHVlIGluY3JlbWVudGVkSW5kZXggPSBtX291dC5hZGQoaW5k
ZXhQaGksIG1fb3V0LmludDMyT25lKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3Jl
bWVudGVkSW5kZXhSZXN1bHQgPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBmaW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291dC5hbmNo
b3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubGVz
c1RoYW4oaW5jcmVtZW50ZWRJbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVja0hhc1By
b3BlcnR5KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvcnJlY3RTdHJ1Y3R1cmUsIHNsb3dQYXRoKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29y
cmVjdFN0cnVjdHVyZVJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNoZWNrSGFzUHJvcGVydHkpOworICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5SW5kZXgg
PSBtX291dC5waGkoSW50MzIsIGluaXRpYWxJbmRleEZvckhhc1Byb3BlcnR5LCBpbmNyZW1lbnRl
ZEluZGV4UmVzdWx0KTsKKyAgICAgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXhQ
aGksIG1fb3V0LmFuY2hvcihwcm9wZXJ0eUluZGV4KSk7CisgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBmaW5hbFByb3BlcnR5SW5kZXggPSBtX291dC5hbmNob3IocHJvcGVydHlJbmRleCk7Cisg
ICAgICAgICAgICBMVmFsdWUgaGFzUHJvcGVydHkgPSBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
SW1wbChwcm9wZXJ0eUluZGV4LCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5
KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChoYXNQcm9wZXJ0eSwgdW5zdXJlKGNvbnRpbnVh
dGlvbiksIHVuc3VyZShpbmNyZW1lbnQpKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93
UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1BhdGhSZXN1
bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAg
ICAgICBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
Ci0gICAgICAgICAgICAgICAgdm1DYWxsKEludDY0LCBzbG93UGF0aENhbGwsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5KSkpOwotICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOwor
ICAgICAgICAgICAgTFZhbHVlIGZpbmFsSW5kZXggPSBtX291dC5waGkoSW50MzIsIGZpbmFsSW5j
cmVtZW50ZWRJbmRleCwgZmluYWxQcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFs
dWUobV9vdXQuYml0T3IobV9vdXQuemVyb0V4dChmaW5hbEluZGV4LCBJbnQ2NCksIG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIDw8IDMyKSkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjb3JyZWN0
U3RydWN0dXJlUmVzdWx0LCBzbG93UGF0aFJlc3VsdCkpOworICAgICAgICBFZGdlJiBiYXNlRWRn
ZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+
ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1v
ZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1
ZSBiYXNlID0gbG93Q2VsbChiYXNlRWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2Fj
aGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9o
ZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAg
ICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5v
dEVxdWFsKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9tb2RlU2V0KSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok5hbWVkTW9kZSkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJ
bmRleCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9v
dXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50
KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFk
ZChpbmRleCwgbV9vdXQuaW50MzJPbmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAg
ICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVu
dGVkSW5kZXgpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJv
RXh0KGluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwg
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2Rl
KSA8PCAzMikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExW
YWx1ZSBiYXNlID0gbG93SlNWYWx1ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpTVmFsdWUodm1D
YWxsKEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vh
a1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsK
ICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHko
KQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCkKICAgICB7Ci0g
ICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwobG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZVByb3BlcnR5KTsKKyAgICAgICAgTFZh
bHVlIGJveGVkUGFpciA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAg
c2V0SW50MzIobV9vdXQuY2FzdFRvSW50MzIoYm94ZWRQYWlyKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVudW1l
cmF0b3JOZXh0RXh0cmFjdE1vZGUoKQogICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5SW1wbChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eSk7CisgICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNh
c3RUb0ludDMyKG1fb3V0LmxTaHIoYm94ZWRQYWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOwor
ICAgICAgICBzZXRJbnQzMihtX291dC5iaXRBbmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgIH0K
IAotICAgIHZvaWQgY29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoKQorICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNvdmVyeSBmb3IgdGhp
cyBub2RlIHNpbmNlIGl0J3MgImVmZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxpdmUgaW4gYnl0ZWNv
ZGUuCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKQog
ICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25JblN0cnVjdHVyZVByb3BlcnR5KTsKKyAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MygpKTsKKworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRW51bWVy
YXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGlu
ZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0RGly
ZWN0UG5hbWUoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCiAgICAgewot
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5
ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwotICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwotICAg
ICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDMpKTsKKyAgICAgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCAwKTsKKyAgICAgICAgRWRnZSBwcm9wZXJ0eU5hbWVFZGdlID0gbV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDEpOworICAgICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDIpOworICAgICAgICBFZGdlIGluZGV4RWRnZSA9IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAzKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBjaGVja09mZnNldCA9
IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWQgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkID0gbV9vdXQu
bmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMVmFsdWUgYmFzZSA9IERGRzo6aXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQo
KSkgPyBsb3dDZWxsKGJhc2VFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pIDogbG93SlNW
YWx1ZShiYXNlRWRnZSk7CisKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBzdG9yYWdlRWRnZSA/
IGxvd1N0b3JhZ2Uoc3RvcmFnZUVkZ2UpIDogbnVsbHB0cjsKKyAgICAgICAgLy8gV2UgaGF2ZSB0
byBtYXRlcmlhbGl6ZSB0aGUgcHJvcGVydHlOYW1lIGhlcmUgaW4gY2FzZSBpdCByZXF1aXJlcyBi
b3hpbmcgc2luY2UgdGhlIElDIHBhdGggd29uJ3QgZG9taW5hdGUgc3Vic2VxdWVudCB1c2VzIGlu
IHN1YnNlcXVlbnQgbm9kZXMuCisgICAgICAgIC8vIElmIGl0J3MgYW4gSW50MzIgYW5kIHdlIHVz
ZSBpdCBhcyBzdWNoIHRoaXMgYm94aW5nIHdpbGwgYmUgRENFJ2QgYnkgYjMgbGF0ZXIgYW55d2F5
LgorICAgICAgICBsb3dKU1ZhbHVlKHByb3BlcnR5TmFtZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbik7CisKKworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihpbmRleEVkZ2Up
OworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9u
b2RlLCA0KSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgNSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrU3RydWN0
dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjaGVja0lu
bGluZU9yT3V0T2ZMaW5lQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBpbmxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBvdXRPZkxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBnZW5lcmljSUNCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1f
aGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVt
ZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJ
RCkpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNldCkp
OworICAgICAgICBMVmFsdWUgaXNOb3ROYW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwg
bV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgICAgICBtX291dC5i
cmFuY2goaXNOb3ROYW1lZCwgdW5zdXJlKGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNrU3Ry
dWN0dXJlQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJs
b2NrKTsKKyAgICAgICAgLy8gVE9ETyBjaGVjayBjZWxsPworICAgICAgICBMVmFsdWUgc3RydWN0
dXJlSUQ7CisgICAgICAgIGF1dG8gc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdl
Lm5vZGUoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOworICAgICAgICBpZiAoc3RydWN0
dXJlKQorICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVy
ZS0+aWQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQu
bG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKworICAgICAgICBMVmFs
dWUgaGFzRW51bWVyYXRvclN0cnVjdHVyZSA9IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291
dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2Fj
aGVkU3RydWN0dXJlSUQpKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBiYWRTdHJ1Y3R1cmVT
bG93UGF0aFJlc3VsdDsKKyAgICAgICAgaWYgKGluZGV4RWRnZS5ub2RlKCkgPT0gcHJvcGVydHlO
YW1lRWRnZS5ub2RlKCkpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxs
eShjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmFkU3RydWN0dXJlU2xvd1BhdGgpOworICAg
ICAgICAgICAgYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxs
KEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgsIGVudW1lcmF0b3IpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwg
dXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxv
Y2spKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNo
ZWNrT2Zmc2V0LCBpbmxpbmVMb2FkKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3Zl
T3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSksCi0gICAgICAgICAgICB1bnN1
cmUob3V0T2ZMaW5lTG9hZCksIHVuc3VyZShpbmxpbmVMb2FkKSk7CisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBpbmxp
bmVDYXBhY2l0eSA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0
aWVzID0gZmFsc2U7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGhhc05v
T3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7Cisg
ICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5
KQorICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOwor
ICAgICAgICBMVmFsdWUgaXNJbmxpbmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291
dC5pbnQzMk9uZSA6IG1fb3V0LmJlbG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaChpc0lubGluZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayksIHVuc3VyZShv
dXRPZkxpbmVMb2FkQmxvY2spKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2Fk
LCBvdXRPZkxpbmVMb2FkKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5saW5lTG9hZEJsb2Nr
KTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAot
ICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRp
ZXMuYXRBbnlOdW1iZXIoKSwgCisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUlu
ZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLAogICAgICAgICAgICAgICAgIGJh
c2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9hZCwgc2xvd0Nhc2UpOwot
ICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09i
amVjdF9idXR0ZXJmbHkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkQmxv
Y2spOworICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQu
bG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisKICAgICAgICAgTFZh
bHVlIHJlYWxJbmRleCA9IG1fb3V0LnNpZ25FeHQzMlRvNjQoCi0gICAgICAgICAgICBtX291dC5u
ZWcobV9vdXQuc3ViKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpKSkpOworICAgICAgICAg
ICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgaW5saW5lQ2FwYWNpdHkpKSk7CiAgICAgICAg
IGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zm
c2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFu
Y2hvcigKICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5w
cm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAg
ICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xv
YmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhnZW5lcmljSUNCbG9jayk7CisgICAgICAg
IExWYWx1ZSBnZW5lcmljUmVzdWx0ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBU
eXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50U2l6
ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jl
c3VsdCA9IGJveEludDMyKGdlbmVyaWNSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShnZW5lcmljUmVz
dWx0KTsKKyAgICAgICAgfSBlbHNlIGlmIChnZW5lcmljUmVzdWx0LT50eXBlKCkgPT0gRG91Ymxl
KQorICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveERvdWJsZShnZW5lcmljUmVzdWx0KTsK
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGlubGluZVJlc3VsdCwgb3V0T2ZMaW5lUmVz
dWx0LCBzbG93Q2FzZVJlc3VsdCkpOwotICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2Vu
ZXJpY0lDUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVu
Z3RoKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoKSk7CisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5waGkoSW50NjQsIGdlbmVyaWNJQ1Jlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBpbmxpbmVSZXN1
bHQpOworICAgICAgICBpZiAoYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpCisgICAgICAgICAg
ICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHJlc3VsdCwgYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1
bHQpOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdm9pZCBjb21w
aWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0
aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoU2xv
d1BhdGhGdW5jdGlvblR5cGUgc2xvd1BhdGhGdW5jdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdp
bi5zZW1hbnRpYyk7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBD
ZWxsVXNlKQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdl
dFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0SlNW
YWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAg
IH0KLQotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpCi0gICAg
ewotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAg
ICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAg
ICAgICBMVmFsdWUgYmFzZSA9IGJhc2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlID8gbG93Q2Vs
bChiYXNlRWRnZSkgOiBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAgICAgICAgTFZhbHVlIHByb3Bl
cnR5TmFtZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDIpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMykpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5k
cyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOYW1lZEJsb2NrID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBtYXRjaGVzU3RydWN0dXJlQmxvY2sgPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvcGVyYXRpb25CbG9jayA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBt
X291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkpLAotICAgICAgICAgICAgdXN1YWxseShpbkJvdW5k
cyksIHJhcmVseShvdXRPZkJvdW5kcykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQudGVz
dE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6TmFtZWRNb2RlKSksIHVuc3VyZShpc05hbWVkQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxv
Y2spKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNOYW1lZEJsb2NrKTsKIAotICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5k
cyk7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBt
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
KTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3Io
Ci0gICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0
b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKSkpOworICAgICAgICBtX291dC5icmFuY2go
aXNDZWxsKGJhc2UsIHByb3ZlblR5cGUoYmFzZUVkZ2UpKSwgdW5zdXJlKGlzQ2VsbEJsb2NrKSwg
dW5zdXJlKG9wZXJhdGlvbkJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNDZWxs
QmxvY2spOworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwg
bV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
ZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAgICAgICAgICAgdXN1
YWxseShtYXRjaGVzU3RydWN0dXJlQmxvY2spLCByYXJlbHkob3BlcmF0aW9uQmxvY2spKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhtYXRjaGVzU3RydWN0dXJlQmxvY2spOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBuYW1lZFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1
ZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhvdXRPZkJvdW5kcywgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgb3V0T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1Zh
bHVlOjpWYWx1ZU51bGwpKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3BlcmF0aW9uQmxvY2sp
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3Io
dW5ib3hCb29sZWFuKHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhGdW5jdGlvbiwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgbW9kZSkpKTsKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKEludDY0LCBpbkJvdW5kc1Jlc3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKworICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0
LnBoaShJbnQzMiwgbmFtZWRSZXN1bHQsIG9wZXJhdGlvblJlc3VsdCkpOwogICAgIH0KIAotICAg
IHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUoKQorICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JJbkJ5VmFsKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBt
X291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IG1fb3V0
Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7Ci0KLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291
dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5k
R2VuZXJpY1Byb3BlcnR5SW5kZXgpKSwKLSAgICAgICAgICAgIHVzdWFsbHkoaW5Cb3VuZHMpLCBy
YXJlbHkob3V0T2ZCb3VuZHMpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBzdG9y
YWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2Fk
UHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIo
aW5kZXgpKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHMsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVl
RnJvbUJsb2NrIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50
NjQoSlNWYWx1ZTo6VmFsdWVOdWxsKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgaW5Cb3VuZHNSZXN1bHQs
IG91dE9mQm91bmRzUmVzdWx0KSk7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVy
dHkob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bXBpbGVUb0luZGV4U3RyaW5nKCkKKworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSgpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGluZGV4KSk7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHko
b3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5KTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKQpAQCAtMTczNDQsNyArMTc0MTEsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRT
cGVjdWxhdGVJbnQzMigpICYmIGNhblNwZWN1bGF0ZSkgewogICAgICAgICAgICAgc3BlY3VsYXRl
KAogICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxl
c3NUaGFuKHJlc3VsdCwgbV9vdXQuaW50MzJaZXJvKSk7CkBAIC0yMDI5Niw2ICsyMDM2MywyNyBA
QCBwcml2YXRlOgogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KIAorICAgIC8v
IFRoaXMgb25seSB3b3JrcyBmb3IgaW50cyByaWdodCBub3cuCisgICAgUGF0Y2hwb2ludFZhbHVl
KiBkYXRhTG9nRm9yRGVidWdnaW5nKGNvbnN0IGNoYXIqIHByZWZpeCwgTFZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBvaW50
KFZvaWQpOworICAgICAgICByZXN1bHQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7
CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKHZhbHVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJl
Z1QwKSk7CisgICAgICAgIFR5cGUgdmFsdWVUeXBlID0gdmFsdWUtPnR5cGUoKTsKKyAgICAgICAg
cmVzdWx0LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2tt
YXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdp
c3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisgICAgICAgICAgICBqaXQucHJvYmVEZWJ1
ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHZh
bHVlVHlwZSA9PSBJbnQzMikKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwg
Y29udGV4dC5ncHI8aW50MzJfdD4oR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPEpT
VmFsdWU+KEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICBBdmFpbGFiaWxpdHlNYXAmIGF2
YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWls
YWJpbGl0eTsgfQogICAgIAogICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgppbmRleCA3MzE3MTAwOTZjZjNlMjQ5
OGFlNDVkZGEyNmFhODJlNzljZDQ2YTRlLi42OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlm
NGY1MTliMDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RT
TC5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTM4
LDYgKzEzOCw3IEBAIG1vZHVsZSBEU0wKICNpbmNsdWRlICJHZXRCeVZhbEhpc3RvcnkuaCIKICNp
bmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvbk1vZGVNZXRhZGF0YS5o
IgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29k
ZS5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlk
U3RhdHVzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
UmVnaXN0ZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5o
CmluZGV4IDQ0NDYzNWU5ODBkOTBhZjgzN2ViZDYzYjk2MmZhZWRlMmVjNTM1MDMuLmQ4NzljOTBi
ZTMxMTc4NjIzM2Y1MjZiMTgzZWRmMWNiM2M3YmIzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZyYW1l
Kik7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sq
KTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTU2NvcGUqKTsK
LSAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7Cisg
ICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU0NlbGwqKTsKICAgICAg
ICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEVuY29kZWRKU1ZhbHVlKTsKIAog
ICAgICAgICBpbnQzMl90IGkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaAppbmRleCBjNTZlZjVlNDU1NGNiMTAzYWJl
YmU3MmU2Mjk4ZjhjNDhhYWQ5ODYwLi41OTNlZjY2NjhkZTJlMDNhNjU5YjM5ZjMxYWY2MGY4OGMy
NzgzOTg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVn
aXN0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVySW5saW5lcy5oCkBAIC02Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIm
IFJlZ2lzdGVyOjpvcGVyYXRvcj0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgcmV0dXJuICp0
aGlzOwogfQogCi1BTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpT
T2JqZWN0KiBvYmplY3QpCitBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0
b3I9KEpTQ2VsbCogb2JqZWN0KQogewogICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZShvYmplY3QpKTsKICAgICByZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuaAppbmRleCBhYzhiNTEzN2Q4NTM1NDUwNmFlZWRjZWRiZDFj
NWJkNzcyNTc5YzAxLi40MTU5ZTdlNTA0OTY5MzdlZTFlNTZhZmI3YzIwYWU5Y2YyYTg5ZWU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTg4OSw3
ICs4ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAgICAg
QmVsb3csIEFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0aGF0
IGZpcnN0IGFuZCBsYXN0IGFyZSBpbmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUoR1BS
UmVnIGNlbGxHUFIsIEpTVHlwZVJhbmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAppbmRleCA0MmI4Y2FmNWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0Li4z
YTg0NWFhYjdjMjYxZjI1NTQ2YjYwNzZjNjU5YjYxOGNhOTRmM2YxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCkBAIC0zMDgsMTAgKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFk
KQogICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBERUZJ
TkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxl
X2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkp
CiAgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAg
ICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09Q
KGVudW1lcmF0b3JfbmV4dCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9h
cmd1bWVudHMpCiAgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRz
KQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKQEAgLTM2
NSw2ICszNjMsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAg
ICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9P
UChvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0
b3JfaGFzX293bl9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcml2YXRlX25h
bWUpCiAgICAgICAgIERFRklORV9PUChvcF9zZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAgREVG
SU5FX09QKG9wX2NoZWNrX3ByaXZhdGVfYnJhbmQpCkBAIC00NzMsMTQgKzQ3NCw2IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9m
cm9tX2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX09QKG9wX3B1dF90b19hcmd1bWVudHMpCiAK
LSAgICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi0g
ICAgICAgIERFRklORV9PUChvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0g
ICAgICAgIERFRklORV9PUChvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAg
REVGSU5FX09QKG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9w
X2dldF9kaXJlY3RfcG5hbWUpCi0gICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX3N0cnVj
dHVyZV9wbmFtZSkKLSAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFt
ZSkKLSAgICAgICAgICAgIAogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwp
CiAKQEAgLTU3OCw2ICs1NzEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMo
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Ao
b3BfZ2V0X3ByaXZhdGVfbmFtZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3NldF9w
cml2YXRlX2JyYW5kKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfcHJpdmF0
ZV9icmFuZCkKQEAgLTYwOSw3ICs2MDMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dD
QVNFX09QKG9wX3N1YikKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVtZXJh
YmxlX2luZGV4ZWRfcHJvcGVydHkpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKQEAgLTY0
MiwxMSArNjM1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Aobm90KQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChzdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobnN0cmlj
dGVxKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChnZXRfZGlyZWN0X3BuYW1lKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChnZXRfcHJvdG90eXBlX29mKQotICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVy
dHkpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJlX3By
b3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJv
cGVydHkpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAppbmRleCA0ODdhNWFjNWI4ZTVkOGE5ZDgwYjJjNmQzMDZlMDgxNTIxYjgyODE0Li40ZmM5YTAy
YjcyOWEzMjk0NWI3NTg0Zjc4YTE2MzVkZTZhOGIyZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKQEAgLTY3MCwyMSArNjcwLDIzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVt
aXRfb3BfdW5leHBlY3RlZF9sb2FkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF91bnNpZ25lZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfdXJzaGlmdChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgT3BDb2RlVHlwZT4KLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1cmVf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9k
aXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZv
aWQgZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9n
dWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl90YWlsKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90
b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAorICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBPcGNvZGVUeXBlPgorICAgICAgICB2b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZShjb25zdCBPcGNvZGVUeXBlJiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwor
CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhG
dW5jdGlvblR5cGU+CisgICAgICAgIHZvaWQgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUlt
cGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBPcGNvZGVUeXBlJiwgU2xvd1BhdGhGdW5jdGlv
blR5cGUpOworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
YWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYp
OwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bf
dGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYpOwpAQCAtNzM1LDcgKzczNyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZh
dGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY2ZGIzZjU5YzRhYTRlMDI3YTE1NjExZWRiYmEyNjFj
YWQ4ZWZlZDYuLjliYTEwZWQ2NzcyZmFlYzNmMjBlNjM0YmFiZTE0YWRkOWExMDg5MDcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTY5Miw0NiArMTY5Miwx
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVf
cHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1l
cmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwot
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3Bf
aGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVy
dHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19vd25f
c3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0cnVj
dHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5TdHJ1
Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAg
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAorCiAg
ICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5k
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAgSnVt
cExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9u
LCBhcnJheU1vZGUsIGJhZFR5cGUsIG51bGxwdHIpOwpAQCAtMTczOSw3ICsxNzA1LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmls
ZTo6SW5saW5lQ2FjaGUpOwotICAgIAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBi
eVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
cywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAKQEAgLTE3NDgsNyArMTcxNCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFM
SVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklU
U3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0
eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jayku
ZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBpZiAo
SklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewogICAgICAgICBieVZh
bEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAg
ICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5R2VuZXJpYzsKQEAgLTE3NTgsMTcxICsxNzI0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHQKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVn
VDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLQotICAgIC8vIFRo
aXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50
MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNr
IHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5n
dGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQg
c2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRo
ZSB0b3RhbCBhbGxvY2F0aW9uCi0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYiku
IEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVu
ZGluZyB0aGUgdmFsdWUKLSAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdz
IHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0
aGFuIHNpZ24KLSAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJl
LXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQo
cmVnVDEsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwg
cHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVn
VDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7
Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBt
b2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotCi0gICAgaWYgKCFKSVRD
b2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2Fz
ZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVs
IGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsK
LQotICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25l
LCBuZXh0SG90UGF0aCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFi
bGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0
ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHk7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBzbG93
UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCi0g
ICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxp
bmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9u
SGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5
VmFsSW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRl
Y2x0eXBlKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQpPihBZGRyZXNzKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3Qs
IFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1Qx
LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYnlWYWxJ
bmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9i
eVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVj
dF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxs
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBzdHJ1
Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9m
ZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJl
Z1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWln
aHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgLy8gT3Ro
ZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVn
VDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRl
cmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9y
ID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5
dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAg
SnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkp
KTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCBy
ZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlz
KTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCBy
ZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUu
bV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJh
bmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJl
Z1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IDRkNzQxMjZiZTFlM2RlNDMwZDNh
NmQ5Y2I3ZmRkYjZkYzg2ZjdlYjQuLjJhZTNhMDRhM2M1ZmQyZjY5NDAyYzI1YTNlZTNmNzQ0ODI0
Yzk3N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAKQEAgLTExNDIsMjI3ICsxMTQyLDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4K
LXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5t
X2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1l
cmF0b3I7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJh
dG9yLCByZWdUMSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3Bl
cnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0
aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1cnJl
bnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5PihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIAotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlr
ZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRM
b2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlLCBu
dWxscHRyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJs
b2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgCi0gICAgcGF0Y2hC
dWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0KLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0KLSAgICBi
eVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAg
bV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAg
IkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdn
ZWRWYWx1ZSgpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJ
bmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRh
Zz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNz
ZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+
KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNz
KSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3Bl
cnR5R2VuZXJpYykpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsK
LSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKLQotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywg
cmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLQotICAg
IC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcg
YW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdl
IGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0
b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBz
aWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNp
bmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFu
IDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5k
IGV4dGVuZGluZyB0aGUgdmFsdWUKLSAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5j
ZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJh
dGhlciB0aGFuIHNpZ24KLSAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVy
IHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJU
b1dvcmQocmVnVDEsIHJlZ1QxKTsKLQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2Vs
bChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGlu
Z1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJy
YXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLQotICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRk
U2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAg
ICAKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotCi0gICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLSAgICAK
LSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHByb3BlcnR5
LCByZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IGJ5VmFsSW5mbyk7Ci0KLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwot
ICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dl
dF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBu
YW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBW
aXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGEgY2VsbAotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQot
ICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJl
c3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDIpOwot
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBs
b2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKLQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0
T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSwgcmVnVDIpOwotICAgIG5lZzMyKHJlZ1QyKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQ
cm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQzMihCYXNl
SW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2Fk
MzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3Bl
cnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDAp
OwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNv
ZGUubV9pbmRleDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwotICAgIGVt
aXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJy
YW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5s
aW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMik7Ci0KLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0g
ICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRz
ID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5k
cy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsK
LSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMik7Ci0gICAgCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Ci19
Ci0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDE1ZTFkMzQ1NzliNmQ0YzhjMTcwZDIzNTBjNmMz
NjQ0M2ZmZWE0MTUuLmQ1OTQ1NjIyNTg4OTE1ZTc4ODY5OTRkMjZiMDhjOTY3MjNmNzRhY2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgorI2lu
Y2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCkBA
IC04NiwxMCArODcsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNv
ZGVUeXBlPgordm9pZCBKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVU
eXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKQEAgLTEzNiw2ICsxMzcsMTEgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICB9CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNs
b3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisK
ICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRU
aHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3Io
Vk0mIHZtKQogewpAQCAtMzU0MCw2ICszNTQ2LDEzNiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRU
eQogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
dEJ5VmFsPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2Rl
QmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBi
eXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRl
Y29kZS5tX3Byb3BlcnR5TmFtZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRh
dGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CisKKyAgICBhdXRv
IHJlc3VsdEdQUiA9IHJlZ1QwOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIG9yOChyZWdU
MiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAg
IC8vIFRoaXMgaXMgYWx3YXlzIGFuIGludDMyIGVuY29kZWQgdmFsdWUuCisgICAgSnVtcCBpc05v
dE5hbWVkTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlKSk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDApKTsKKworICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOworICAgIEp1bXAgc3RydWN0dXJl
TWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAg
Ly8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVzdWx0
R1BSKTsKKworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlc3VsdEdQUik7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAg
c3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNo
KSwgJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKworICAgIGlzTm90TmFtZWRNb2Rl
LmxpbmsodGhpcyk7CisgICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywg
cmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSk7CisgICAgLy8gUmVwbGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgorICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKworICAgIGlzTm90SW5kZXhlZC5saW5r
KHRoaXMpOworICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIs
IHByb2ZpbGUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdU
MSk7CisKKyAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2Nr
LCBKSVRUeXBlOjpCYXNlbGluZUpJVCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVJbmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3Rl
clNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7
CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29kZTo6dXNl
RGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9n
ZXRCeVZhbHMuYXBwZW5kKGdlbik7CisKKyAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKKworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAg
IGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckdldEJ5VmFsPigpLCBpdGVyKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5
cGUsIHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVy
YXRvcl9oYXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5l
cmFsQ2FzZSkKK3sKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lz
dGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QwKTsKKyAgICBvcjgocmVnVDAs
IEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKworICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgc2xvd0Nhc2VzLmxp
bmsodGhpcyk7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgZ2VuZXJhbENhc2UpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisK
KyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
aW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckluQnlWYWw+KCksIHNsb3dfcGF0aF9lbnVt
ZXJhdG9yX2luX2J5X3ZhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFz
X293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKSwgc2xv
d19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IDU4ZTVkNTJmZTViMDhh
ZTI5ZTNlNWRkZGUzZDc0Njc5NjdmMjMwMTkuLjI1N2NhZWEyNzg2ODgzYmJhMDhjN2EyYzRiMjM4
ZDUwNDRlNzI5NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtMTUwNSw2ICsxNTA1LDI1IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlW
YWw+KGNvbnN0IEluc3RydWN0aW9uKik7CiAKKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxs
KCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9y
X2luX2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVy
dHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCAzN2I2ZGYzMGYxMGMzYTAw
MWE1NjU1ZWExYmIxZGI1OTU3M2NmNjA4Li5lNzE4M2E3MmEzNjhmMWEyODA0Njg0ZDJiMDc2NDdm
MjIwNjhmMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xOTkyLDE5ICsxOTkyLDE0IEBAIHNsb3dQYXRoT3AoY3Jl
YXRlX2dlbmVyYXRvcikKIHNsb3dQYXRoT3AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKIHNsb3dQ
YXRoT3AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQogc2xvd1BhdGhPcChkZWZpbmVfZGF0YV9w
cm9wZXJ0eSkKLXNsb3dQYXRoT3AoZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQotc2xvd1BhdGhP
cChlbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKIHNsb3dQYXRoT3AoZ2V0X2J5X3ZhbF93aXRo
X3RoaXMpCi1zbG93UGF0aE9wKGdldF9kaXJlY3RfcG5hbWUpCi1zbG93UGF0aE9wKGdldF9lbnVt
ZXJhYmxlX2xlbmd0aCkKIHNsb3dQYXRoT3AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi1zbG93
UGF0aE9wKGhhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi1zbG93UGF0aE9wKGhhc19l
bnVtZXJhYmxlX3Byb3BlcnR5KQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX25leHQpCitzbG93UGF0
aE9wKGVudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9pbl9ieV92
YWwpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKIAogaWYgbm90IEpT
VkFMVUU2NAotICAgIHNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5
KQotICAgIHNsb3dQYXRoT3AoaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xvd1Bh
dGhPcChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgc2xvd1BhdGhPcChnZXRfcHJvdG90eXBl
X29mKQogZW5kCiAKQEAgLTIwMjEsNyArMjAxNiw2IEBAIHNsb3dQYXRoT3AocmVzb2x2ZV9zY29w
ZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiBzbG93UGF0aE9wKHNwcmVhZCkKIHNs
b3dQYXRoT3Aoc3RyY2F0KQogc2xvd1BhdGhPcCh0aHJvd19zdGF0aWNfZXJyb3IpCi1zbG93UGF0
aE9wKHRvX2luZGV4X3N0cmluZykKIHNsb3dQYXRoT3AodHlwZW9mKQogc2xvd1BhdGhPcCh0eXBl
b2ZfaXNfb2JqZWN0KQogc2xvd1BhdGhPcCh0eXBlb2ZfaXNfZnVuY3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmlu
ZGV4IGJkODg1NWViZmQ2ZmMxOWIxNWMxYjU4ODZkNGZhNTU2NDM4MmQ4N2QuLjhhNWY3ZDIzZTY0
NzYzYmEyNTllMWIyYzVkODdmOGQxNmI4MjlhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0zMTQxLDM0ICsz
MTQxLDYgQEAgbGxpbnRPcChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCwgT3BMb2dTaGFkb3dD
aGlja2VuVGFpbCwgbWFjcm8gKHNpemUsIGdldCwgZGkKICAgICBkaXNwYXRjaCgpCiBlbmQpCiAK
LW1hY3JvIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1
cm4sIHNsb3dQYXRoQ2FsbCkKLSAgICBnZXQobV9iYXNlLCB0MCkKLSAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MSkKLSAgICBidHFueiB0MSwgbm90Q2VsbE1hc2ssIC5zbG93
UGF0aAotCi0gICAgbG9hZFZhcmlhYmxlKGdldCwgbV9lbnVtZXJhdG9yLCB0MCkKLSAgICBsb2Fk
aSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDFdLCB0MQotICAgIGJpbmVxIHQxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Om1fY2FjaGVkU3RydWN0dXJlSURbdDBdLCAuc2xvd1BhdGgKLQotICAg
IHJldHVybihWYWx1ZVRydWUpCi0KLS5zbG93UGF0aDoKLSAgICBjYWxsU2xvd1BhdGgoc2xvd1Bh
dGhDYWxsKQotICAgIGRpc3BhdGNoKCkKLWVuZAotCi1sbGludE9wV2l0aFJldHVybihvcF9oYXNf
ZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVBy
b3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGhhc1N0cnVj
dHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xvd19wYXRo
X2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhS
ZXR1cm4ob3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSGFzT3duU3RydWN0dXJlUHJv
cGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0
dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhf
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi1lbmQpCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9w
X2luX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BJblN0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChz
aXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLWVuZCkKLQogb3AoZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludCwgbWFj
cm8gKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IDExMjk1NGJiOWI2ZTUwMTM2ODgzYjc0NTZj
YjFlODMxOGZiNWE1MTEuLmIxNWQzNTQ4MDE5YjcyZWQxZDY4Mzc3NTNmMzAyNjAyNjBlYTNkYTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcApAQCAtOTYyLDE2MSArOTYyLDEzNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX3RvX3Byb3BlcnR5X2tleSkKICAgICBSRVRVUk4oR0VUX0MoYnl0ZWNvZGUubV9z
cmMpLmpzVmFsdWUoKS50b1Byb3BlcnR5S2V5VmFsdWUoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUpT
Q19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcikKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BH
ZXRFbnVtZXJhYmxlTGVuZ3RoPigpOwotICAgIEpTVmFsdWUgZW51bWVyYXRvclZhbHVlID0gR0VU
X0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKGVudW1lcmF0b3JWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBSRVRVUk4oanNOdW1iZXIoMCkpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBp
ZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTih2bS5lbXB0
eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CiAKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oZW51bWVy
YXRvclZhbHVlLmFzQ2VsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09i
amVjdChnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgUkVUVVJO
KGpzTnVtYmVyKGVudW1lcmF0b3ItPmluZGV4ZWRMZW5ndGgoKSkpOworICAgIFJFVFVSTihwcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5F
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVy
dHkpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4
dCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BF
bnVtZXJhdG9yTmV4dD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jayk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2Up
LmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigp
OwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1
ZSgpOwotICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+
c3RydWN0dXJlKHZtKSk7Ci0gICAgQVNTRVJUKHByb3BlcnR5LmlzVUludDMyQXNBbnlJbnQoKSk7
Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eS5hc1VJbnQzMkFzQW55SW50KCkpKSk7Ci19CisgICAgUmVnaXN0ZXIm
IG1vZGVSZWdpc3RlciA9IEdFVChieXRlY29kZS5tX21vZGUpOworICAgIFJlZ2lzdGVyJiBpbmRl
eFJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpOworICAgIFJlZ2lzdGVyJiBuYW1lUmVn
aXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpOwogCi1KU0NfREVGSU5FX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkK
LXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJh
YmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRl
Y29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNL
X0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29k
ZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgaWYgKGJhc2UtPnN0cnVj
dHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAg
ICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKLSAgICBKU1N0cmluZyogc3RyaW5n
ID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50
b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBS
RVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSkpKTsKLX0KKyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KG1vZGVSZWdpc3Rlci5qc1ZhbHVlKCkuYXNVSW50MzIo
KSk7CisgICAgdWludDMyX3QgaW5kZXggPSBpbmRleFJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQz
MigpOwogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3Ry
dWN0dXJlX3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIEpTVmFsdWUgYmFzZSA9IEdF
VF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgp
LmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS5pc0NlbGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUodm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAg
ICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlmCisgICAgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+
KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKCFiYXNl
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFs
dWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICBt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZS0+c3RydWN0dXJl
SUQoKSk7CiAKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAg
ICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBKU1N0cmlu
ZyogbmFtZSA9IGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9iamVjdCwgYmFzZSwgaW5k
ZXgsIG1vZGUpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgUkVUVVJOKGpzQm9vbGVh
bihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3Bl
cnR5TmFtZSkpKTsKKyAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNf
Y2FzdDx1aW50OF90Pihtb2RlKTsKKyAgICBtb2RlUmVnaXN0ZXIgPSBqc051bWJlcihzdGF0aWNf
Y2FzdDx1aW50OF90Pihtb2RlKSk7CisgICAgaW5kZXhSZWdpc3RlciA9IGpzTnVtYmVyKGluZGV4
KTsKKyAgICBuYW1lUmVnaXN0ZXIgPSBuYW1lID8gbmFtZSA6IGpzTnVsbCgpOworICAgIEVORCgp
OwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VUX0Mo
Ynl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2Vs
bCgpKTsKLSAgICBpZiAoYmFzZS5pc0NlbGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
dm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAgICAgIFJF
VFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlmCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdF
VChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJv
cGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6
Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2UsIGFzU3RyaW5nKHByb3BlcnR5KSkpKTsKLX0K
KyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1
dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VU
KGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworCisgICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzSW50
MzIoKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlOiB7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJv
ZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgp
KTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSkpOworICAgICAgICB9CisgICAgICAgIGNh
c2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGU6IHsKKyAgICAgICAgICAgIGlm
IChiYXNlVmFsdWUuaXNDZWxsKCkgJiYgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgp
ID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBXZSdsbCBvbmx5IG1hdGNoIHRoZSBzdHJ1Y3R1cmUgSUQgaWYgdGhlIGJhc2UgaXMgYW4gb2Jq
ZWN0LgorICAgICAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXgoKSk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJh
c2VWYWx1ZS5nZXRPYmplY3QoKS0+Z2V0RGlyZWN0KGluZGV4IDwgZW51bWVyYXRvci0+Y2FjaGVk
SW5saW5lQ2FwYWNpdHkoKSA/IGluZGV4IDogaW5kZXggLSBlbnVtZXJhdG9yLT5jYWNoZWRJbmxp
bmVDYXBhY2l0eSgpICsgZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9k
ZVN0cnVjdHVyZU1pc21hdGNoKTsKKyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICB9
CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVf
cHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
SGFzRW51bWVyYWJsZVByb3BlcnR5PigpOwotICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVD
S19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAg
SlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhD
RVBUSU9OKCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSk7Ci19CisgICAgICAgIGNhc2UgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTogeworICAgICAgICAgICAgaWYgKGJhc2VW
YWx1ZS5pc0NlbGwoKSAmJiBtb2RlICE9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRN
b2RlKQorICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1
Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAgICAgICAgICAg
SlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSku
anNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lk
ZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgICAgIC8vIFRPRE8gRG9lcyB0aGlzIGFj
dHVhbGx5IGV2ZXIgdGhyb3c/IElzbid0IHN0cmluZyBiYWNrZWQgYnkgYSBVVUlEPworICAgICAg
ICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFz
ZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpOworICAgICAgICB9CiAKLUpT
Q19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkKLXsK
LSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXREaXJlY3RQbmFt
ZT4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNW
YWx1ZSgpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
anNWYWx1ZSgpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1N0cmlu
Zyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
c3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04o
KTsKLSAgICBSRVRVUk4oYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkp
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH07CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9n
ZXRfcHJvcGVydHlfZW51bWVyYXRvcikKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKTsKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIGlmIChiYXNlVmFs
dWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVydHlO
YW1lRW51bWVyYXRvcigpKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIo
KSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4obW9kZSk7CiAKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChn
bG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIGlmIChhdXRvKiBi
YXNlID0gYmFzZVZhbHVlLmdldE9iamVjdCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0g
ZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jv
b2xlYW4odHJ1ZSkpOwogCi0gICAgUkVUVVJOKHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xvYmFs
T2JqZWN0LCBiYXNlKSk7Ci19Ci0KLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxs
KCkpOwotICAgIHVpbnQzMl90IGluZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUo
KS5hc1VJbnQzMkFzQW55SW50KCk7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJh
c2UtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFs
dWUoKS5hc1VJbnQzMigpKSkpOworICAgIH0KIAotICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUg
PSBudWxscHRyOwotICAgIGlmIChpbmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3Bl
cnR5SW5kZXgoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlO
YW1lQXRJbmRleChpbmRleCk7Ci0gICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFt
ZSA6IGpzTnVsbCgpKTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVj
b2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29t
bW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN0cmluZywg
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlKSkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKK0pTQ19ERUZJTkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogewog
ICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JHZW5l
cmljUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0g
anNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0
b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNv
ZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpOworICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9
IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2Rl
Lm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOwogCi0gICAgSlNTdHJpbmcq
IHByb3BlcnR5TmFtZSA9IG51bGxwdHI7Ci0gICAgaWYgKGVudW1lcmF0b3ItPmVuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXgoKSA8PSBpbmRleCAmJiBpbmRleCA8IGVudW1lcmF0b3ItPmVuZEdlbmVy
aWNQcm9wZXJ0eUluZGV4KCkpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9IGVudW1lcmF0b3ItPnBy
b3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOwotICAgIFJFVFVSTihwcm9wZXJ0eU5hbWUgPyBwcm9w
ZXJ0eU5hbWUgOiBqc051bGwoKSk7Ci19CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29k
ZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFs
dWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5j
YWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7
CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5n
KQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvSW5kZXhT
dHJpbmc+KCk7Ci0gICAgSlNWYWx1ZSBpbmRleFZhbHVlID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgp
LmpzVmFsdWUoKTsKLSAgICBBU1NFUlQoaW5kZXhWYWx1ZS5pc1VJbnQzMkFzQW55SW50KCkpOwot
ICAgIFJFVFVSTihqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXhWYWx1ZS5h
c1VJbnQzMkFzQW55SW50KCkpLnN0cmluZygpKSk7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNC
b29sZWFuKGJhc2UtPmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1f
aW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpKSkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiBz
dHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7
CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmpl
Y3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIFJFVFVSTihqc0Jvb2xlYW4ob2JqZWN0
UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHByb3BlcnR5
TmFtZSkpKTsKIH0KIAogSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9m
aWxlX3R5cGVfY2xlYXJfbG9nKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuaAppbmRleCBkOGQxNTAxZmIzNWJhYzI3OTRjNmQ5NDEwMjcxYmI2OGY0
Y2MwNTdlLi5hNWUwMTVkNTNhNjllNjA1M2FmNGRiYjMxYjJjOGYyNTdjMGRiMWUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaApAQCAtMjU0
LDE3ICsyNTQsMTEgQEAgSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaXNf
Y29uc3RydWN0b3IpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfc3Ry
Y2F0KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3ByaW1pdGl2
ZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0eV9r
ZXkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFi
bGVfbGVuZ3RoKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19l
bnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsK
LUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJl
X3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0
cnVjdHVyZV9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9nZXRfZGlyZWN0X3BuYW1lKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk7Ci1KU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOworSlND
X0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKK0pT
Q19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3Zh
bCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2lu
X2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJh
dG9yX2hhc19vd25fcHJvcGVydHkpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfcHJvZmlsZV90eXBlX2NsZWFyX2xvZyk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF91bnJlYWNoYWJsZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKaW5kZXgg
ZTJjYTE2MmUwYjU0ZTI1Y2YwNjllZWE4Yzg3ZTFlZWEyZTRjZDViZS4uMWIwMzEzMGYwYTVjMDdj
MzM1Y2M1ODU2ODNiYjY0NWVlNTNlMDhiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcApAQCAtOTAsNyArOTAsNiBA
QCBTcGVjdWxhdGVkVHlwZSBGaWxlQmFzZWRGdXp6ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbkludGVy
bmFsKENvZGVCbG9jayogY29kZUJsb2NrLAogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ugb3Bf
Z2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAg
IGNhc2Ugb3BfY29uc3RydWN0OgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAg
Y2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcAppbmRleCBmMTM5ZDRhNDQ3
YjI3MGY5ZWQzM2Y3ZGZkMzVlMDJhZmZjMzFjNzAzLi5jMjZjMDAzNzQwMzkwYzdiMzgzNjA3NjBl
M2MyMjljMWZkMWI4OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBPcGNv
ZGVJRCBGaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2U6Om9wY29kZUFsaWFzRm9yTG9va3VwS2V5KGNv
bnN0IE9wY29kZUlEJiBvcGNvZAogewogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9jYWxsX3ZhcmFy
Z3MgfHwgb3Bjb2RlSWQgPT0gb3BfY2FsbF9ldmFsIHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2Fs
bCB8fCBvcGNvZGVJZCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKICAgICAgICAgcmV0dXJuIG9w
X2NhbGw7Ci0gICAgaWYgKG9wY29kZUlkID09IG9wX2dldF9kaXJlY3RfcG5hbWUgfHwgb3Bjb2Rl
SWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCisgICAgaWYgKG9wY29kZUlkID09IG9wX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCB8fG9wY29kZUlkID09IG9wX2dldF9ieV92YWxfd2l0aF90aGlz
KQogICAgICAgICByZXR1cm4gb3BfZ2V0X2J5X3ZhbDsKICAgICBpZiAob3Bjb2RlSWQgPT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MpCiAgICAgICAgIHJldHVybiBvcF9jb25zdHJ1Y3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMjRm
Y2YwODE1ZTI1MDQ5NWUwMzE3OTRhMDZlNGIzMTA1Yzc4NGZiNC4uMTVmNWIwNjRlY2JmYzY1OGE5
OTBkMmViNTk2MzViZjJiZGJlODg4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTQ2MSw2ICsxNDYxLDEwIEBAIGNhcGl0YWxO
YW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxh
ZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgIH0pOwogI2VuZGlmCiAKKyAgICBtX2xpbmtUaW1lQ29u
c3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50OjplbXB0eVByb3Bl
cnR5TmFtZUVudW1lcmF0b3IpXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2Vs
bD4mIGluaXQpIHsKKyAgICAgICAgaW5pdC5zZXQoaW5pdC52bS5lbXB0eVByb3BlcnR5TmFtZUVu
dW1lcmF0b3IoKSk7CisgICAgfSk7CisKICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlUHJvZmlsZXJz
T25HbG9iYWxPYmplY3QoKSkgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIiKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0
aGlzLCAxLCBTdHJpbmcoKSwgZW5hYmxlU2FtcGxpbmdQcm9maWxlciksIFByb3BlcnR5QXR0cmli
dXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlB
dHRyaWJ1dGU6OlJlYWRPbmx5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCmluZGV4IDIxYzcwYTI3YjY5
MWJlMDU2OTBhMmZhZTc3YzY5OTEyYWVlYzExOWQuLmNmMGE0YTUxMzRmODJkZWU5OWFhYjI1YjY2
MzU5OGU1N2RjZTJjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcApAQCAtNDksMTMgKzQ5LDE5IEBA
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQz
Ml90IGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdy
aXRlQmFycmllcjxKU1N0cmluZz4qIHByb3BlcnR5TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHByb3Bl
cnR5TmFtZXNTaXplKQogICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
U3RydWN0dXJlLmdldCgpKQotICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0
eU5hbWVzQnVmZmVyKQogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUgPyBzdHJ1
Y3R1cmUtPmlkKCkgOiAwKQogICAgICwgbV9pbmRleGVkTGVuZ3RoKGluZGV4ZWRMZW5ndGgpCiAg
ICAgLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgobnVtYmVyU3RydWN0dXJlUHJvcGVydGll
cykKICAgICAsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgocHJvcGVydHlOYW1lc1NpemUpCiAg
ICAgLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aW5saW5l
Q2FwYWNpdHkoKSA6IDApCisgICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5
TmFtZXNCdWZmZXIpCiB7CisgICAgaWYgKG1faW5kZXhlZExlbmd0aCkKKyAgICAgICAgbV9tb2Rl
U2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGU7CisgICAgaWYgKG1f
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOworICAgIGlmIChtX2VuZEdlbmVyaWNQcm9wZXJ0
eUluZGV4IC0gbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVTZXQg
fD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTsKIH0KIAogdm9pZCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUmVmUHRyPFByb3Bl
cnR5TmFtZUFycmF5RGF0YT4mJiBpZGVudGlmaWVycykKQEAgLTE0OCw0ICsxNTQsNzAgQEAgdm9p
ZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBKU09iamVjdCogYmFzZSwgUHIKICAgICB9CiB9CiAKK0pTU3RyaW5nKiBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
T2JqZWN0KiBiYXNlLCB1aW50MzJfdCYgaW5kZXgsIE1vZGUmIG1vZGUsIGJvb2wgc2hvdWxkQWxs
b2NhdGVJbmRleGVkTmFtZVN0cmluZykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQVNT
RVJUKGluZGV4ZWRMZW5ndGgoKSB8fCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpOworCisgICAgaW5k
ZXgrKzsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEluaXRNb2RlOiB7CisgICAgICAg
IG1vZGUgPSBJbmRleGVkTW9kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGU6IHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpICYmICFiYXNl
LT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpIHsKKyAgICAgICAg
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworCisg
ICAgICAgIGlmIChpbmRleCA8IGluZGV4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBz
aG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nID8ganNTdHJpbmcodm0sIElkZW50aWZpZXI6
OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSkgOiBudWxscHRyOworCisgICAgICAgIGlmICghc2l6
ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgbW9kZSA9IE5hbWVkTW9kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRN
b2RlOgorICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTogewor
ICAgICAgICBKU1N0cmluZyogbmFtZSA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZUF0SW5kZXgo
aW5kZXgpOworICAgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgaWYgKGluZGV4IDwgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYmIGJh
c2UtPnN0cnVjdHVyZUlEKCkgPT0gY2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBuYW1lLT52YWx1ZShnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIHNjb3BlLmFzc2VydE5v
RXhjZXB0aW9uKCk7CisgICAgICAgICAgICBpZiAoYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5
KGdsb2JhbE9iamVjdCwgaWQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBuYW1lID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUu
YXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgICAgICBpZiAoaW5kZXggPj0gZW5kU3RydWN0dXJl
UHJvcGVydHlJbmRleCgpICYmIGluZGV4IDwgc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAg
ICAgICAgbW9kZSA9IEdlbmVyaWNNb2RlOworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCmluZGV4IDAyMDExZDQxYzdmNjZkYWQ4ODNhZThkNzcwYjVkM2Qy
ODZjZDUwODcuLmEwMDliYjI5MDFiNGFhMTcwZDczOGE1OTg2MGEwOWExNTZkMjA0NWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCi0jaW5j
bHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTM3LDYgKzM3LDE3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0g
SlNDZWxsOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBC
YXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKKyAgICBlbnVtIE1v
ZGUgOiB1aW50OF90IHsKKyAgICAgICAgSW5pdE1vZGUgPSAwLAorICAgICAgICBJbmRleGVkTW9k
ZSA9IDEgPDwgMCwKKyAgICAgICAgTmFtZWRNb2RlID0gMSA8PCAxLAorICAgICAgICBHZW5lcmlj
TW9kZSA9IDEgPDwgMiwKKyAgICAgICAgLy8gUHJvZmlsaW5nIE9ubHkKKyAgICAgICAgSGFzU2Vl
bk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoID0gMSA8PCAzLAorICAgIH07CisKKyAgICBzdGF0
aWMgY29uc3RleHByIHVpbnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9kZSA8
PCAxKSAtIDE7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nl
c3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAg
ICB7CkBAIC03NCwxNiArODUsMjAgQEAgcHVibGljOgogICAgIHVpbnQzMl90IGVuZEdlbmVyaWNQ
cm9wZXJ0eUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsg
fQogICAgIHVpbnQzMl90IGNhY2hlZElubGluZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9j
YWNoZWRJbmxpbmVDYXBhY2l0eTsgfQogICAgIHVpbnQzMl90IHNpemVPZlByb3BlcnR5TmFtZXMo
KSBjb25zdCB7IHJldHVybiBlbmRHZW5lcmljUHJvcGVydHlJbmRleCgpOyB9CisgICAgdWludDMy
X3QgbW9kZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZVNldDsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3QgY2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZUlEKTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3QgaW5kZXhlZExlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1faW5kZXhlZExlbmd0aCk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IGVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2VuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBlbmRHZW5lcmljUHJvcGVy
dHlJbmRleE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRp
ZmZfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkpOyB9Cisg
ICAgc3RhdGljIHB0cmRpZmZfdCBtb2RlU2V0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9tb2RlU2V0KTsgfQogICAgIHN0YXRpYyBw
dHJkaWZmX3QgY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpCiAgICAgewogICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9w
ZXJ0eU5hbWVzKTsKICAgICB9CiAKKyAgICBKU1N0cmluZyogY29tcHV0ZU5leHQoSlNHbG9iYWxP
YmplY3QqLCBKU09iamVjdCogYmFzZSwgdWludDMyX3QmIGN1cnJlbnRJbmRleCwgTW9kZSYsIGJv
b2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyA9IHRydWUpOworCiAgICAgREVDTEFS
RV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKQEAgLTkyLDEzICsxMDcsMTQgQEAgcHJpdmF0
ZToKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJf
dCwgdWludDMyX3QsIFdyaXRlQmFycmllcjxKU1N0cmluZz4qLCB1bnNpZ25lZCk7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+JiYpOwog
Ci0gICAgQXV4aWxpYXJ5QmFycmllcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9wZXJ0
eU5hbWVzOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVDaGFp
bjsKICAgICBTdHJ1Y3R1cmVJRCBtX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIHVpbnQzMl90IG1f
aW5kZXhlZExlbmd0aDsKICAgICB1aW50MzJfdCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXg7
CiAgICAgdWludDMyX3QgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJfdCBt
X2NhY2hlZElubGluZUNhcGFjaXR5OworICAgIHVpbnQzMl90IG1fbW9kZVNldCB7IDAgfTsKKyAg
ICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5TmFt
ZXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWluOwog
fTsKIAogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIEpT
T2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWlu
dDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpOwpAQCAtMTM0LDcgKzE1MCwxMCBAQCBpbmxp
bmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzID0g
MDsKICAgICB9CiAKLSAgICBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
cmVhdGUodm0sIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMsIGluZGV4ZWRMZW5n
dGgsIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdURk1vdmUocHJvcGVydHlOYW1lcykpOwor
ICAgIGlmICghaW5kZXhlZExlbmd0aCAmJiAhcHJvcGVydHlOYW1lcy5zaXplKCkpCisgICAgICAg
IGVudW1lcmF0b3IgPSB2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKKyAgICBlbHNl
CisgICAgICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2
bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwgbnVt
YmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CiAgICAgaWYg
KCFpbmRleGVkTGVuZ3RoICYmIHN1Y2Nlc3NmdWxseU5vcm1hbGl6ZWRDaGFpbiAmJiBzdHJ1Y3R1
cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzID09IHN0cnVjdHVyZSkgewogICAgICAgICBlbnVt
ZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5wcm90b3R5cGVD
aGFpbihnbG9iYWxPYmplY3QsIGJhc2UpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2FuQ2Fj
aGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtKSkKQEAgLTE0Myw0ICsxNjIsNiBAQCBpbmxpbmUg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBlbnVtZXJhdG9yOwogfQogCit1c2luZyBFbnVt
ZXJhdG9yTWV0YWRhdGEgPSBzdGQ6OnVuZGVybHlpbmdfdHlwZV90PEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6TW9kZT47CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRp
bmdGdXp6ZXJBZ2VudC5jcHAKaW5kZXggY2RjZmE5OWQ0OWE2OTE3NDAxZDY4MzE2OGJhMTlhYmRl
YmFlOWE0ZC4uYzdhOGUzMWY3ZTQ3YmQ2OTExZmU0YWM0NWZkZjc3ZDY4Mzk2NDEwNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGlu
Z0Z1enplckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVk
aWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgU3BlY3VsYXRl
ZFR5cGUgUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50
ZXJuYWwoQ29kZUJsb2MKICAgICBjYXNlIG9wX2dldF9ieV9pZDoKICAgICBjYXNlIG9wX2dldF9i
eV9pZF93aXRoX3RoaXM6CiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKLSAgICBj
YXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92
YWw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJn
czoKICAgICBjYXNlIG9wX2NhbGw6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434445</attachid>
            <date>2021-07-28 12:10:58 -0700</date>
            <delta_ts>2021-07-28 12:16:54 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728151057.patch</filename>
            <type>text/plain</type>
            <size>369475</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjgyN2MwYjVlNmRhZTQ4
YWY5Njg3MTE1NmNjNGYyYzg5MjMzYTVmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQyNDQs
MjUgKzQyNDgsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKLSAgICAgICAgY2xvYmJlcldvcmxk
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eTogeworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTQyODEs
MjYgKzQyNjgsNTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKCk7Ci0gICAg
ICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorCiAg
ICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNT
YW5lQ2hhaW4oKSkKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEo
KSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKTsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUgfHwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkg
IT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworCisgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCAwKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVy
YXRvckdlbmVyaWNQbmFtZTogeworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZTogewogICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzog
ewotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVm
aW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKKyAgICAgICAgLy8gdmFsdWUgaW5mb3Jt
YXRpb24uCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCmluZGV4IDExMTFmODlmOWQ3YjViOTc3
NzhjMTZjOGQ1NDY0MGJlYTM3NDQyYjIuLmEwMjZhYWQxODkzYmYyM2M1NzE5NmZjYzZjOTFmYzIw
MDAzYzQ1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaApAQCAt
Mjg5LDYgKzI4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09
IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICB9CiAKKyAgICBib29sIGlzU2FuZUNo
YWluKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0luQm91bmRzU2FuZUNoYWluKCkg
fHwgaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpOworICAgIH0KKwogICAgIGJvb2wgaXNPdXRPZkJv
dW5kcygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgfHwgc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBkYjM3ZjRkZGRiZjgwY2Q2NmViNTc4N2Q3
YmFhMmJmNTNhZjg5MDc2Li45ZGJkMGI0N2Q5ZGZmNGNmNjAzOGFmNTAwMTc5MzQ4YmUwYWVhMjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTM5MCw3ICszOTAsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2Rl
TmVlZHNOZWdaZXJvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbDogewogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VG
bGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5v
ZGVCeXRlY29kZVVzZXNBc090aGVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVj
b2RlVXNlc0FzQXJyYXlJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGEyOTZjNGI4N2M4NTg4NjRmYmRlZGQ3NGVmNzI3ZTU0
ZDk1ZmQ2OTQuLjJjOTgzYmFjMzcwMGM4ZDI5NTcyMzFkYmRlZjJlYmYzNTBkMzBiN2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC04
Mzg3LDEwMyArODM4NywxMzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19wcml2YXRlX2JyYW5k
KTsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0aCwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KTsKKyAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cjogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUubV9iYXNl
KSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3Ip
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVByb3BlcnR5LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwg
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9o
YXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbnVt
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6
UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Cisg
ICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChieXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAg
ICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKTsKKyAgICAg
ICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNvZGUubV9tb2RlKTsKIAotICAgICAgICBjYXNl
IG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5Pigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc093blN0cnVj
dHVyZVByb3BlcnR5LAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBn
ZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAgICB9CisgICAgICAgICAgICBhdXRv
IHNlZW5Nb2RlcyA9IG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhOwogCi0gICAgICAgIGNh
c2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAg
ICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9w
ZXJ0eT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsK
LSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAg
ICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOwotICAgICAgICAg
ICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSk7
Ci0gICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBIYXNJbmRleGVkUHJvcGVydHkgbXVz
dCBiZSB0cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIHNpbmNlIEZpeHVwUGhh
c2UgbWF5IG1ha2UgaXQgZ2VuZXJpYy4KLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
aGFzSXRlcmFibGVQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGlu
ZGV4KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxs
cHRyKTsgLy8gc3RvcmFnZSBmb3IgSW5kZXhlZE1vZGUgb25seS4KKyAgICAgICAgICAgIE5vZGUq
IHVwZGF0ZWRJbmRleEFuZE1vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRv
ck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8oc2Vlbk1vZGVzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRNb2RlID0gYWRkVG9H
cmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCB1cGRhdGVkSW5kZXhBbmRNb2RlKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX21vZGUsIHVwZGF0ZWRNb2RlKTsKKworICAgICAgICAg
ICAgTm9kZSogdXBkYXRlZEluZGV4ID0gYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RJ
bmRleCwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9p
bmRleCwgdXBkYXRlZEluZGV4KTsKKworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fcHJvcGVy
dHlOYW1lLCBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB1cGRh
dGVkSW5kZXgsIHVwZGF0ZWRNb2RlLCBlbnVtZXJhdG9yKSk7CisKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudW1lcmF0b3JfbmV4dCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9w
X2dldF9kaXJlY3RfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7Ci0gICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6IHsKKyAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFy
cmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4
aXQoKTsKKwogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwot
ICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eU5hbWUgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgTm9kZSogaW5kZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7Cisg
ICAgICAgICAgICBOb2RlKiBtb2RlID0gZ2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAgICAgICAgICAg
ICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CiAKKyAgICAg
ICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gT3B0aW9uU2V0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6TW9kZT46OmZyb21SYXcobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgICAg
ICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9T
UkV4aXQpOworCisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYWRNb2RlID0g
YWRkVG9HcmFwaChBcml0aEJpdEFuZCwgbW9kZSwganNDb25zdGFudChqc051bWJlcihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBBcml0aEJp
dEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNvIGl0J3Mgb2sgdG8gZXhpdCBoZXJlLgorICAgICAg
ICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEV4
aXRPSyk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJ
bmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzTnVtYmVyKDApKSksIGJhZE1vZGUpOworCisgICAg
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5k
ZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxw
dHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXRC
eVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsK
KworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGVudW1lcmF0b3IpOworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVja2luZyBmb3IgYSBCYWRDb25zdGFudFZh
bHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNlIHRoZSBHZW5lcmljIHZhcmlhbnQgaWYgd2Ugc3dp
dGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJbmRleGVkTW9kZSArIE5hbWVkTW9kZSBldmVuIHRo
b3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAgICAgICAgICBpZiAoIXNlZW5Nb2Rlcy5jb250
YWluc0FueSh7IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoIH0pCisg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbW9kZVRlc3QgPSBhZGRUb0dyYXBoKFNhbWVWYWx1ZSwgbW9kZSwganNDb25zdGFu
dChqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlKSkpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25z
dGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzQm9vbGVhbihmYWxzZSkpKSwgbW9k
ZVRlc3QpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNl
IHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRC
eVZhbC4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJv
cGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0
byBtYXRjaCBHZXRCeVZhbC4KICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGlj
dGlvbikpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2Rl
OjpWYXJBcmcsIEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKIAotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X2RpcmVjdF9wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcjogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUu
bV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3IpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9pbl9ieV92YWw6
IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CiAK
LSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogewotICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLAotICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2luZGV4
KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUpOwotICAgICAgICB9CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKIAotICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvciksCi0gICAgICAg
ICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKLSAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3RyaW5nLCBnZXQoYnl0ZWNv
ZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmlu
Zyk7CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHk6IHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckhhc093blByb3BlcnR5PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwor
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Vu
dW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2dldF9pbnRlcm5hbF9maWVsZDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmNwcAppbmRleCBjYzBkMDE0ZGEyOTMxZmYzZWNkY2U5NDI5Y2MyNjI1NjFlMmY3Zjc2Li4w
NmQxOWQxNzM5NzMwM2Y3NDFiZTZiMDJiZjAxMDU3ZjcyMjU2NDgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBkYXRhTG9nKCIgICBGb3VuZCBtdXN0LWhhbmRsZSBibG9jazogIiwgKmJs
b2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgbWVyZ2VzIHNuYXBzaG90IG9m
IHN0YWNrIHZhbHVlcyB3aGlsZSBDRkEgcGhhc2Ugd2FudCB0byBoYXZlIHByb3ZlbiB0eXBlcyBh
bmQgdmFsdWVzLiBUaGlzIGlzIHNvbWV3aGF0IHRyaWNreS4KLSAgICAgICAgLy8gQnV0IHRoaXMg
aXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlkYXRlcyB0aGUgaW5wdXRzIHdpdGgg
KnByb3ZlbiogQWJzdHJhY1ZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMK
KyAgICAgICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlk
YXRlcyB0aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY3RWYWx1ZSB2YWx1ZXMuIEFuZCBp
dCB0dXJucyBvdXQgdGhhdCB0aGlzCiAgICAgICAgIC8vIHR5cGUgd2lkZW5pbmcgaXMgY3JpdGlj
YWwgdG8gbmF2aWVyLXN0b2tlcy4gV2l0aG91dCBpdCwgbmF2aWVyLXN0b2tlcyBoYXMgbW9yZSBz
dHJpY3QgY29uc3RyYWludCBvbiBPU1IgZW50cnkgYW5kCiAgICAgICAgIC8vIGZhaWxzIE9TUiBl
bnRyeSByZXBlYXRlZGx5LgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBjNzE2NGIzMGY0
NjRlYjBkNDM4MmUyY2NhNDJkNTY5OTY0ZDFiZjY3Li5hYzc4MmQ5OWI0NTNjNTA4MjYxYTdmM2E4
Nzk1NTg4MDBkMDA1Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCkBAIC0yNTQsMTcgKzI1NCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJ
CiAgICAgY2FzZSBvcF9oYXNfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX2dldF9zY29wZToK
ICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoOgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eToKLSAg
ICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHk6Ci0gICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBv
cF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6
Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKLSAgICBjYXNlIG9wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKLSAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAg
ICBjYXNlIG9wX25ld19mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jOgpAQCAtMjk5LDYgKzI4OSwxMCBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSQogICAgIGNhc2Ugb3Bfc2V0X3ByaXZhdGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9j
aGVja19wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX2VudW1lcmF0b3JfbmV4dDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOgorICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9oYXNfb3duX3Byb3BlcnR5OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
IAogICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAppbmRleCA5ZDEwMDRmZTUzZjNkNDQ3ZGYxMDNmYWNhMGQyZTEwZWM0ZmY1ZjQ2
Li41ZGQ2NTE0ZDFlMWFmY2E3YzM3YWMxOTg4YWFiMzIxNGI3ZmI2YWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheU9yRW1wdHk6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
R2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0
VmVjdG9yTGVuZ3RoOgpAQCAtMTY0LDcgKzE2OCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgogICAg
ICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5OgogICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0FuZDoKICAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgpAQCAtMzM3
LDIxICszNDAsODAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgd3JpdGUoTWF0
aERvdFJhbmRvbVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBHZXRFbnVtZXJh
YmxlTGVuZ3RoOiB7Ci0gICAgICAgIHJlYWQoSGVhcCk7Ci0gICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RJbmRleDogeworICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNhc2UgVG9JbmRleFN0cmluZzoKLSAgICBjYXNlIEdldEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsK
LSAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgcmVhZChOYW1lZFByb3BlcnRpZXMpOworICAg
ICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpICE9IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIGNsb2Ji
ZXJUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFycmF5
TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CisgICAgICAgICAgICB3cml0
ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0
aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywg
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwg
TGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
cmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNsb2JiZXJUb3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eTogeworICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJlYWQoSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KTsKICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewpAQCAtNzA1LDYgKzc2Nyw4IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNlIFRv
UHJvcGVydHlLZXk6CiAgICAgY2FzZSBJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAg
LTcxNiwxMiArNzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6
CiAgICAgY2FzZSBUb09iamVjdDoKLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0
cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNl
IEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgIGNh
c2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICBjYXNlIFRvTnVtYmVyOgogICAgIGNhc2UgVG9OdW1l
cmljOgpAQCAtOTA2LDYgKzk2NSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0
PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGZhciB0b28gY29uc2VydmF0aXZlIGZvciB0aGUgY2hpbGQxKCkudXNlS2luZCgpID09IElu
dDMyVXNlIGNhc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY2xv
YmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEdl
dEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZlYTkxZGYyMjRi
ZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1
M2MzN2UxOGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
MjA1LDcgKzIwNSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgogICAg
IGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hl
Y2tCYWRWYWx1ZToKQEAgLTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIEdldEJ5SWRX
aXRoVGhpczoKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CiAg
ICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhl
ZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAg
IGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6Ci0g
ICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJv
cGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSGFz
UHJpdmF0ZU5hbWU6CkBAIC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBUaHJvd1N0
YXRpY0Vycm9yOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNhc2UgR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1h
dGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3Jl
YXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5
NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li43ZjIxYWE0NGRiZGM2ODQ4YTViODU0ZTg3NDYwY2RmNTRl
Njc2MzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
QEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEw
NjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUo
KS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9T
UiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE5hbWVkTW9kZS4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV0Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlw
ZShBcnJheTo6R2VuZXJpYykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTEwOTYsNyArMTExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0
aGUgZnVsbC1ibG93bgogICAgICAgICAgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzIHNsb3cg
cGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBOZWdhdGl2ZUluZGV4KSkKQEAgLTExMTEsNyArMTEyNyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6SW5Cb3VuZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3Bl
Y3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0
IGNhcmUKQEAgLTExMjEsNyArMTEzNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBOZWdhdGl2ZUluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5l
Q2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTc4LDcgKzExOTQsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAorCisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3Qgc2V0IGEgbm9uLUpTVmFsdWUgcmVz
dWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgc2luY2Ugd2UgY291bGQgc3RpbGwgZG8gYSBOYW1l
ZE1vZGUgcHJvcGVydHkgYWNjZXNzLiBXZSBhbHNvIGRvbid0IGhhdmUgYSBnb29kIHdheSB0bwor
ICAgICAgICAgICAgLy8gcHJvdmUgdGhlcmUncyBubyBzdHJ1Y3R1cmUgcHJvcGVydGllcyBhdCB0
aGlzIHBvaW50LgorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5
VmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgc3dpdGNoIChhcnJheU1v
ZGUudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAg
ICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpCkBAIC0yMjc1LDI4ICsyMjk1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhF
ZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93
bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duU3RyaW5nVXNlPihub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewor
ICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKAogICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKQEAgLTIzMTUsMzYgKzIzMTQsNjQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsIEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAgICAgICBFZGdlJiBiYXNlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UmIHByb3BlcnR5
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIEVkZ2UmIGluZGV4
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgIEVkZ2UmIGVudW1l
cmF0b3IgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihiYXNlKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihwcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihpbmRleCk7Ci0gICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKICAgICAg
ICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBu
YW1lOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAg
IEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAg
RWRnZSYgaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAg
RWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFk
YXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkt
PnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSktPnByZWRpY3Rpb24oKSkpOworCisgICAgICAgICAgICAgICAgZml4RWRnZTxD
ZWxsVXNlPihiYXNlKTsKKyAgICAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGJhc2Us
IGluZGV4LCBzdG9yYWdlRWRnZSk7CisKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlN
b2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5i
ZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHNldFNhbmVD
aGFpbklmUG9zc2libGUobm9kZSwgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzID8gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91bmRzU2Fu
ZUNoYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmICFt
X2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUpKQorICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMy
VXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVj
dGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0Lgog
ICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5l
ZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKQEAgLTM2
OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAorICAgIHZvaWQg
c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9uOworICAgICAg
ICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKSB7CisgICAg
ICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsgb24gYSBwZXIt
dHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEp
IFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJuIHVuZGVmaW5l
ZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNoYW5nZSB0byB0
aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAgICAgLy8gdGhp
bmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBhY3R1YWxseSBo
YWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9tIGEgaG9s
ZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2VseSB0aGUgYmVz
dCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQgb2YKKyAgICAg
ICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5vdyB3ZSBq
dXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5hTiBhcmUgaW5k
aXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiwgYW5kIGp1
c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0IGNhc2UuIFRo
aXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRvIGhhdmUgdG8g
ZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0byBVbmRlZmlu
ZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3YW50IHRvCisg
ICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMyLiBGSVhN
RTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAvLyBiYXNlZD8K
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGljYXRpb25z
LiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAgICAgICAgICAg
IC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNo
ZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9s
ZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAgICAgIC8vIG91
dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKKworICAg
ICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5z
cGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0
ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAg
ICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5h
dHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHJldHVybmVk
IGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0aWxsIGRv
CisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVpcmUgdGFr
aW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgp
ICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9n
cmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJv
dW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3Vs
YXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFp
blNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAg
ICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vz
bid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAv
LyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRC
aXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYg
IW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4
KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0
T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAgICAgICBzZXRT
YW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7CisgICAgfQor
CiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFycmF5OjpTcGVj
dWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2MzI1YzVk
NGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQxOTJkMTc1MmQ0
NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAt
Mzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
Y2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRT
dGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygp
KTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRp
bWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQwZWY0MDMzMGMy
MzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4OTIyMTUxZTQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9w
dGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVOb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgu
CiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0UmVsYXRpb25z
aGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAgICAgICAgICAg
c2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4NmQzOTNmZDg3
YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2
NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTEx
LDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyU2V0
UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToK
KyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBicmVhazsKIAor
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBTdHJD
YXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2ZDBhNDM4ZTVl
ZDgxLi40NzA2NTZiZWY4NTg4NTk5NTExMjI2OGY5ZGE5MGJmYzBhMTEyYjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkRlbGV0
ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRl
ICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAgICAgICBjYXNl
IEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdl
dEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKICAgICAgICAg
Y2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAg
ICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFz
U3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAg
ICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0Ogor
ICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JH
ZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAg
ICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NF
eGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNz
T3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6
CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAg
ICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAg
IGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIHN0b3Jh
Z2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdlQ2hpbGQoKSk7
CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAg
ICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2lu
dEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRC
eVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgorICAgICAgICBj
YXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKKyAg
ICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0xvYWQ6Cisg
ICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToKKyAgICAg
ICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6CisgICAgICAgICAg
ICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBBcnJheVBvcDoK
KyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAyOworCisg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0dXJuIDI7CisK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
ICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3MgdG8gZGV0ZXJt
aW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiArMjI4MiwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgpAQCAtMjIx
Niw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICBj
YXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgY2FzZSBBdG9t
aWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0Nv
bXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJl
NTY1NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdl
bmVyYXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAg
ICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVy
ZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBt
YWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRv
SW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFw
IGFuZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3
ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLjViOTk5MGNjZjI3NTVlYjcxOGIxOTk4YmYyYzMxNDVkMTM1
MzNmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNl
KTsKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFt
ZSkpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxP
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAg
ICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1v
ZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1l
U3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9i
amVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpO
dW1iZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5k
ZXgpOworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBt
b2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3It
PnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVu
dW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVW
YWx1ZSwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51
bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5n
ZXRPYmplY3QoKS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpT
U3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFs
KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwg
aW50MzJfdCBtb2RlTnVtYmVyKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5z
dHJpbmcoKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFz
T3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9w
ZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHBy
b3BlcnR5TmFtZVZhbHVlKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50
b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2Us
IGlkZW50aWZpZXIpKSkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
TmV3UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogcmVnZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFm
ZWRlNTk1ZDBmYjhmYTgzNWVmNzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQx
M2JmMTg4MGNlNzYzNGVlMzEzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5z
dGFuY2U7CiBjbGFzcyBKU0JpZ0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsK
K2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTEwNCwxMiArMTA1LDE0IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvdG90eXBlT2YsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqLCBpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25I
YXNFbnVtZXJhYmxlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEpTU3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25JblN0cnVjdHVyZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiwgSlNTdHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBK
U0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQz
Ml90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dWludDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikp
OworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0
SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwg
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3Ry
dWN0dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3
ZTMwNmJhYjg1MzdjMGU4OWUyZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1
ZTM3NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsK
ICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAg
ICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hp
bGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51
bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxl
SW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAg
ICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNh
c2UgUmVnRXhwRXhlYzoKQEAgLTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEdldFByaXZhdGVOYW1lOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAg
ICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgog
ICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1l
cmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBJbkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBI
YXNQcml2YXRlTmFtZToKICAgICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNh
c2UgSGFzT3duUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0g
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZTogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7
CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAg
ICAgICAgICAgLy8gVGhpcyBjYW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJh
bmNoIG9mIHRoYXQgY2FzZSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50
IHRvIG1lc3Mgd2l0aAorICAgICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAg
IHNldFByZWRpY3Rpb24oU3BlY0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQ
cm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZh
bHVlIHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3Ry
aW5nLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDog
ewogICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHBy
b2R1Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0
IHByb2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBj
OTYzN2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJi
ZWFiMDJhZDBjNTEzZGRiNDljYTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91
bmRzQ2hlY2sobV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwg
MSksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewog
ICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJk
MGI5YjQ2MGUyYzUwLi4xZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2
LDEwICsyOTYsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRl
LCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRv
TnVtYmVyOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5
OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWU6Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJv
b2wgaWdubwogICAgICAgICAvLyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBp
biBjb250cm9sIGZsb3cgaGVyZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoK
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxl
bmd0aDoKQEAgLTQ5Niw2ICs0OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAg
ICAgcmV0dXJuIGlzU2FmZTsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOgorICAgIC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0
cyBidXQgdGhleSdsbCBvbmx5IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUgc28gd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNl
IFRvVGhpczoKICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpA
QCAtNTk1LDYgKzU5Nyw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNh
c2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAg
ICBjYXNlIEhhc093blByb3BlcnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgogICAgIGNhc2UgTXVsdGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1
MThhNjA4NzEzNDJkNjQ0ZWQ5NzhiMWU1YjguLjE0ODcyMjJhYzUzMDZlMzk3ZWUyZDYzNGUzNjVm
NTZiYjdhMjBhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1Zh
bHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQp
Ci0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0
LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVS
ZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBS
ZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1f
cGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNl
bmRpZgogewotICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1f
cGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAg
bV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3Bh
eWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAg
LTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29k
ZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJy
ZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3Ry
aW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVn
cywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAw
KSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFs
aWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0
VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6
IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVy
IG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6
Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRh
Rm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsy
NjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1
Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFBy
b3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdl
bmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdz
KHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKLSAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAg
ICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5n
SW50LAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwot
I2Vsc2UKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChz
Y3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0g
ZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9k
ZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2Rl
KE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5
UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9h
ZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBp
ZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBp
c1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChz
aG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
bk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0
LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6
OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlz
VUludDMyKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBl
KSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3Vs
YXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBz
dHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9k
ZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAg
QVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUs
IFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAg
ICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7
CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1p
dFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAg
bG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcs
IHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNh
blNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwg
cmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2Fk
UmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
IH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgK
QEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1
bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBU
eXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwog
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJl
c3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcs
IHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5
VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAK
LSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERh
dGFGb3JtYXRKUykgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcw
Myw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0
aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmlu
ZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJS
ZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0
SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCks
IGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9i
amVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFH
UFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIg
PSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQz
MlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3Qg
U2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3Jt
YXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgw
ODIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1
bWVudHMoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgLy8gVE9ETzogQXJlIGJvdGggb2YgdGhlc2UgbmVj
ZXNzYXJ5Pz8KICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0g
c2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsK
ICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKKworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKQEAgLTEzNDQyLDQ0
ICsxMzQ0NywzMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRocm93U3RhdGljRXJy
b3IoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKiBu
b2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGVudW1lcmF0
b3IpOworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworCisg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIG1vZGVHUFIgPSBt
b2RlLmdwcigpOwogICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsK
KworICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgUmV1c2UsIGlu
ZGV4KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBpbmNyZW1lbnRMb29wOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lOworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geworCisgICAgICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGluaXRNb2RlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBt
b2RlR1BSKTsKKworICAgICAgICAgICAgaW5jcmVtZW50TG9vcCA9IG1faml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2guZ3ByKCkpOwor
CisgICAgICAgICAgICBpbml0TW9kZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25lID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaC5ncHIo
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzY3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Cisg
ICAgICAgIH0pKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkubGlua1RvKGluY3JlbWVudExvb3AsICZtX2pp
dCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkg
PDwgMzIpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0Lm9yNjQoc2Ny
YXRjaC5ncHIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChu
b2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5h
bWVkTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwor
CisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGVudW1lcmF0b3IuCisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgp
LCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAg
ICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBtX2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBi
YXNlUmVncyA9IGJhc2UucmVncygpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BS
KTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleChOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVwZGF0
ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVncyA9
IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYWly
UmVncy5wYXlsb2FkR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIG1faml0LmFuZDMy
KFRydXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXls
b2FkR1BSLCByZXN1bHRHUFIpOworCiAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9w
ZXJ0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBh
aXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGFpckdQUiA9IGlzNjRCaXQoKSA/IHBhaXJS
ZWdzLnBheWxvYWRHUFIoKSA6IHBhaXJSZWdzLnRhZ0dQUigpOwogCi0gICAgSlNWYWx1ZVJlZ3Mg
YmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBt
X2ppdC5yc2hpZnQ2NChwYWlyR1BSLCBUcnVzdGVkSW1tMzIoMzIpLCByZXN1bHRHUFIpOworI2Vs
c2UKKyAgICBtX2ppdC5tb3ZlKHBhaXJHUFIsIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICBtX2pp
dC5hbmQzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlv
bk1vZGVNYXNrKSwgcmVzdWx0R1BSKTsKKworICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBpbmRleE9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvck9wZXJhbmQodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworCisgICAgR1BSUmVnIGluZGV4ID0gaW5kZXhPcGVyYW5kLmdwcigpOworICAg
IEdQUlJlZyBtb2RlID0gbW9kZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIGVudW1lcmF0b3Ig
PSBlbnVtZXJhdG9yT3BlcmFuZC5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
SlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVncywgcHJvcGVydHlHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcik7CiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgbm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9k
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSog
bm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmVTbG93UGF0aDsKKworICAgICAg
ICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQpIHsKKyAgICAgICAg
ICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdl
RWRnZSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLmVtcGxhY2UodGhpcywgc3RvcmFnZUVkZ2Up
OworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgNSkpOworCisgICAgICAgICAgICBHUFJSZWcgbW9kZUdQUiA9IG1v
ZGUuZ3ByKCk7CisgICAgICAgICAgICBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgcmVzdWx0UmVncyA9
IHJlc3VsdC5yZWdzKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpOworCisgICAgICAgICAgICBib29sIGhhdmVTdG9yYWdlID0gISFzdG9y
YWdlRWRnZTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlVGVtcG9yYXJ5OworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdl
KSB7CisgICAgICAgICAgICAgICAgc3RvcmFnZVRlbXBvcmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlz
LCBSZXVzZSwgZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2VUZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG5vdEZhc3ROYW1lZENhc2VzOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGdlbmVyYXRlIHRoaXMgY29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGFuIG9i
amVjdC4KKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIGJhc2UgaXMgYSBjZWxsIGhlcmUgc2luY2Ug
d2Ugd29uJ3QgZ2VuZXJhdGUgTmFtZWRNb2RlIHByb3BlcnRpZXMgZm9yIG5vbi1vYmplY3RzLgor
ICAgICAgICAgICAgICAgIC8vIFRPRE86IHB1dCBBc3NlcnQgaGVyZT8KKworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYg
d2Uga25vdyB0aGVyZSdzIG9ubHkgb25lIHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBl
bWJlZCBpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisKKyAgICAgICAgICAgICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNo
b3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byByZXByZXNlbnQgSW5kZXhlZCtOYW1lZD8KKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCkgPT0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAzKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGJh
ZFN0cnVjdHVyZVNsb3dQYXRoID0gYmFkU3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKGJhZFN0cnVjdHVy
ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgICAg
ICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5s
aW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworCisgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUNlbGxHUFIs
IGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
aXQncyBvdXQgb2YgbGluZQorICAgICAgICAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIoc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlQ2VsbEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgfSkpOworCisgICAgICAgIC8vIFdlIHJlbHkgb24gY29tcGlsZUdldEJ5VmFsIHRv
IGNhbGwganNWYWx1ZVJlc3VsdCBmb3IgdXMuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGtp
bmRhIGhhY2t5Li4uCisgICAgICAgIEFTU0VSVChnZW5lcmF0aW9uSW5mbyhub2RlKS5qc1ZhbHVl
UmVncygpID09IHJlc3VsdFJlZ3MgJiYgZ2VuZXJhdGlvbkluZm8obm9kZSkucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0SlMpOworCisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93UGF0
aC5pc1NldCgpKQorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KGJhZFN0cnVjdHVyZVNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5h
bWVBbmRHZXRCeVZhbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VDZWxsR1BSLCBpbmRleEdQUiwgZW51bWVyYXRvckdQUikpOworCisgICAgICAgIGRvbmVDYXNl
cy5saW5rKCZtX2ppdCk7CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2lu
ZCgpKSkgeworICAgICAgICAvLyBVc2UgbWFudWFsIG9wZXJhbmQgc3BlY3VsYXRpb24gc2luY2Ug
Rml4dXAgbWF5IGhhdmUgcGlja2VkIGEgVXNlS2luZCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gQ2Vs
bFVzZS4KKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZU9wZXJhbmQodGhpcywgYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRn
ZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShOb2RlKiBub2RlLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9uKQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIp
IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMykpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOwogCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJp
bmcsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKLSAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlOYW1lUmVncyA9IHByb3BlcnR5TmFtZS5y
ZWdzKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBH
UFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvci5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKwor
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlKS5tX3R5cGUgJiB+U3BlY0NlbGwp
CisgICAgICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxs
KGJhc2UpKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRoaXMg
Y29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGEgY2VsbC4KKyAgICAgICAgb3BlcmF0aW9uQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQ
UiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOwor
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOworCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsoJm1faml0KTsKKworICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigp
KTsKKyAgICAgICAgYXV0byBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKGJhc2VDZWxsR1BSLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyNlbHNlCisgICAgICAgIGF1dG8gYmFzZVJlZ3MgPSBiYXNlOwor
I2VuZGlmCisgICAgICAgIGNhbGxPcGVyYXRpb24oc2xvd1BhdGhGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eU5hbWVSZWdz
LCBpbmRleEdQUiwgbW9kZUdQUik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgYmxlc3NlZEJvb2xlYW5SZXN1
bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOworICAgIH07CisKKyAgICBpZiAoaXND
ZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UuZ3ByKCksIGJhc2Uu
Z3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
YmFzZUVkZ2UpOworICAgICAgICBnZW5lcmF0ZShiYXNlLnJlZ3MoKSwgYmFzZS5yZWdzKCkucGF5
bG9hZEdQUigpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9ySW5CeVZhbChOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJv
cGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqIG5vZGUpCit7
CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJh
dG9ySGFzT3duUHJvcGVydHkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlJZEZsdXNoKE5vZGUqIG5vZGUpCkBAIC0xMzYyMiw2NyArMTM5MDEsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKICAgICBibGVzc2Vk
Qm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2RlKQotewotICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQot
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdTdHJ1Y3R1cmU7Ci0KLSAgICB3cm9uZ1N0
cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdzKSk7Ci0KLSAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZ3MucGF5bG9hZEdQUigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIG1vdmVUcnVlVG8o
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJv
cGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywg
cHJvcGVydHlHUFIpKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSwgbm9kZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoTm9kZSog
bm9kZSwgRnVuY3Rpb24gc2xvd1BhdGgpCi17Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdT
dHJ1Y3R1cmU7Ci0KLSAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOwotICAgIHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigpLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICBtb3ZlVHJ1
ZVRvKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgc2xvd1BhdGgsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOwotICAg
IGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKLX0K
LQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KE5v
ZGUqIG5vZGUpCi17Ci0gICAgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2Rl
LCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgY29t
cGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2RlLCBvcGVyYXRpb25JblN0cnVjdHVy
ZVByb3BlcnR5KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5
RW51bWVyYXRvcihOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgewpAQCAtMTM3MDksMzkgKzEzOTI3LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKiBub2RlKQogICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEVudW1lcmF0b3JQbmFtZShOb2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSB8fCBub2RlLT5vcCgpID09IEdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3Io
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVn
IGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBpbmRleEdQUiwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgKG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKQotICAgICAg
ICAgICAgPyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXhPZmZzZXQoKQotICAgICAgICAgICAgOiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1faml0Lm1vdmVWYWx1ZShqc051
bGwoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwotICAgIGluQm91bmRzLmxpbmsoJm1faml0KTsKLQotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7Ci0jZW5kaWYKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRF
eGVjdXRhYmxlKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rp
b24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTQ5MzQsMjggKzE1MTE5LDI4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2Rl
LCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9u
X0dDWiBzbG93UGF0aE9wZXJhdGlvbiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BS
UmVnLCBHUFJSZWc+KCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CiAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIEFycmF5TW9kZSBtb2RlID0g
bm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgIGNhc2Ug
QXJyYXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgQVNT
RVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAg
IEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5k
ZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
IAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwog
CiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE0OTgzLDEyICsxNTE2OCwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5v
ZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BS
LCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5k
cygpKQpAQCAtMTUwMTIsMTMgKzE1MTk5LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFn
ZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZp
eCgpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgb3V0T2ZC
b3VuZHMpOwpAQCAtMTUwNDcsNzMgKzE1MjM2LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNs
CiAgICAgZGVmYXVsdDogewogICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgVHlwZWRBcnJheXMg
aW4gSGFzSW5kZXhlZFByb3BlcnR5IElDCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJl
c3VsdEdQUikgPSBwcmVmaXgoKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgc2xvd1BhdGhPcGVyYXRpb24sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGluZGV4R1BSKSk7
Ci0KLSAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci19Ci0KLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREaXJlY3RQbmFtZShOb2RlKiBub2RlKQotewot
ICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsK
LSAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDEpOwotICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMik7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsK
LSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwot
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eS5ncHIoKTsKLQotICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgaW5kZXgodGhpcywgaW5kZXhFZGdlKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVt
ZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBHUFJS
ZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVu
dW1lcmF0b3IuZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBzbG93UGF0aC5hcHBl
bmQoCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldAotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAotICAgICAgICBpbmRleEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0KLSAgICBtX2ppdC5sb2FkVmFs
dWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdFJlZ3MpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKLQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKLSAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKLSAgICBt
X2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKLSAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zaWduRXh0ZW5k
MzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIG1faml0Lmxv
YWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsoJm1faml0KTsKLQotICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHlHUFIpKSk7Ci0KLSAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA5OGM3NjE2YjhmZDJmYmY1YzRkZDhh
NTc3MTUwOGFkMjY3OWY5OWQxLi5kMTIwYjdiNGZiODQ0MzY5ZDcyY2Q2MDE4MWJjMDhjMGI2Yzkx
N2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CkBAIC00Nyw2ICs0Nyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNs
YXNzIEdQUlRlbXBvcmFyeTsKK2NsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OwogY2xhc3MgSlNW
YWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZl
SklUOwpAQCAtMjQ2LDYgKzI0Nyw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgR1BSUmVnIGFsbG9j
YXRlKEdQUlJlZyBzcGVjaWZpYykKICAgICB7CisgICAgICAgIGlmIChzcGVjaWZpYyA9PSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdGUoKTsKICNpZiBFTkFCTEUoREZHX1JFR0lT
VEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxv
Y2F0aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKQEAgLTEzNDUsMTIg
KzEzNDgsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQ
dXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICB9CiAgICAgCisgICAg
Ly8gV2UgdXNlIGEgc2NvcGVkTGFtYmRhIHRvIHBsYWNhdGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2
YWxpZGF0aW9uLgorICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKE5vZGUqLCBjb25zdCBTY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKwogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQo
Tm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1h
dCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZUZyb21DaGFyQ29kZShOb2RlKik7IAogCi0g
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7Ci0gICAgdm9p
ZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9y
bWF0KT4mIHByZWZpeCk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFG
b3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAKICAgICB2b2lk
IGNvbXBpbGVHZXRQcml2YXRlTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJpdmF0
ZU5hbWVCeUlkKE5vZGUqKTsKQEAgLTE0MjQsMTIgKzE0MzAsMTIgQEAgcHVibGljOgogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGp1bXBGb3JUeXBlZEFycmF5SXNEZXRhY2hlZElmT3V0T2ZCb3VuZHMo
Tm9kZSosIEdQUlJlZyBiYXNlR1BSLCBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyk7CiAg
ICAgdm9pZCBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKE5vZGUqLCBHUFJSZWcgYmFzZUdQUiwg
R1BSUmVnIGluZGV4R1BSKTsKICAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNl
dChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSos
IFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpT
VmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVm
aXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5
VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0
eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTdHJpbmcoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN5bWJvbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3RyaW5nKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSosIGNvbnN0IFNjb3Bl
ZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHBy
ZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2Vs
bFdpdGhTdHJpbmcoTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGls
ZDMpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSosIEVk
Z2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsV2l0aFRoaXMoTm9kZSopOwpAQCAtMTQ1OCw3ICsxNDY0LDcgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgICAgIEVkZ2UgdmFsdWVVc2UpOwogICAgIHZvaWQgbG9hZEZyb21JbnRUeXBl
ZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyByZXN1
bHRSZWcsIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIHNldEludFR5cGVkQXJyYXlMb2FkUmVz
dWx0KE5vZGUqLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSwgYm9vbCBjYW5TcGVj
dWxhdGUpOworICAgIHZvaWQgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSwgYm9v
bCBzaG91bGRCb3gpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgY29t
cGlsZU5ld0Z1bmN0aW9uQ29tbW9uKEdQUlJlZywgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgR1BSUmVn
LCBHUFJSZWcsIEdQUlJlZywgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Jiwgc2l6ZV90LCBGdW5j
dGlvbkV4ZWN1dGFibGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKQEAgLTE1MjQsMjEgKzE1MzAs
MjIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRvTG93ZXJDYXNlKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVUaHJvdyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVGhyb3dTdGF0aWNFcnJv
cihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChOb2RlKik7Ci0g
ICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKLSAg
ICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZVRvSW5kZXhTdHJpbmcoTm9kZSopOworCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5v
ZGUqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoTm9kZSosIFNsb3dQYXRoRnVuY3Rpb25U
eXBlKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqKTsKKwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
UHV0QnlJZFdpdGhUaGlzKE5vZGUqKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKE5vZGUqLCBGdW5j
dGlvbik7Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwot
ICAgIHZvaWQgY29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZUdldERpcmVjdFBuYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVu
dW1lcmF0b3IoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0RXhlY3V0YWJsZShOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlR2V0R2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRTZXR0ZXIoTm9kZSopOwpA
QCAtMTU2OCw3ICsxNTc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUNhbGxOdW1iZXJD
b25zdHJ1Y3RvcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbChOb2RlKik7
Ci0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlv
bl9HQ1opOworICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiwgU19KSVRP
cGVyYXRpb25fR0NaLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJl
Zz4oKT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUNsZWFyQ2F0Y2hMb2NhbHMoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZVByb2ZpbGVUeXBlKE5vZGUqKTsKQEAgLTE5MjYsNiArMTkzMyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCisgICAgSlNWYWx1ZVJlZ3MgcmVn
cygpIHsgcmV0dXJuIGpzVmFsdWVSZWdzKCk7IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
R1BSUmVnIGdwcigpCiAgICAgewpAQCAtMTk2NSw3ICsxOTc0LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIoKSk7CiAgICAgfQogCi0g
ICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCkKKyAgICBHUFJSZWcgZ3ByKFdoaWNo
VmFsdWVXb3JkIHdoaWNoID0gUGF5bG9hZFdvcmQpCiAgICAgewogICAgICAgICByZXR1cm4ganNW
YWx1ZVJlZ3MoKS5ncHIod2hpY2gpOwogICAgIH0KQEAgLTIwMDMsMjEgKzIwMTIsMjAgQEAgcHJp
dmF0ZToKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKKyAgICBTdG9yYWdlT3BlcmFuZCgpID0gZGVmYXVsdDsKKwogICAgIGV4cGxp
Y2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKICAgICAg
ICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJP
ckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdCk7Ci0g
ICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2lu
ZCgpID09IEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkp
Ci0gICAgICAgICAgICBncHIoKTsKKyAgICAgICAgZW1wbGFjZShqaXQsIGVkZ2UpOwogICAgIH0K
ICAgICAKICAgICB+U3RvcmFnZU9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3By
T3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3By
T3JJbnZhbGlkKTsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAg
CiAgICAgRWRnZSBlZGdlKCkgY29uc3QKQEAgLTIwMzYsNiArMjA0NCwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShlZGdlKCkpOwog
ICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQorCisgICAgdm9pZCBlbXBsYWNl
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1faml0ID0g
aml0OworICAgICAgICBtX2VkZ2UgPSBlZGdlOworICAgICAgICBBU1NFUlQobV9ncHJPckludmFs
aWQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VSVChtX2ppdCk7CisgICAgICAgIEFT
U0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtu
b3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCisgICAgICAg
ICAgICBncHIoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKQEAgLTIwNDMs
OSArMjA2Miw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNwZWN1bGF0
aXZlSklUKiBtX2ppdDsKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQgeyBudWxscHRyIH07CiAg
ICAgRWRnZSBtX2VkZ2U7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOworICAgIEdQUlJlZyBt
X2dwck9ySW52YWxpZCB7IEludmFsaWRHUFJSZWcgfTsKIH07CiAKIApAQCAtMjEzNCwxMSArMjE1
MywxOSBAQCBjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB7CiBwdWJsaWM6CiAgICAgSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJ
VCopOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNw
ZWNpZmljUGF5bG9hZCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZpY1BheWxvYWQsIEdQUlJlZyBz
cGVjaWZpY1RhZyk7CisjZW5kaWYKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdo
aWNoVmFsdWVXb3JkIHJlc3VsdFJlZ1dvcmQgPSBQYXlsb2FkV29yZCk7CiAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgSlNWYWx1ZU9wZXJhbmQmKTsK
ICAgICB+SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgeyByZXR1cm4gISFyZWdzKCk7IH0KKworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
JiBvcGVyYXRvcj0oSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmJikgPSBkZWZhdWx0OworCiAgICAgSlNW
YWx1ZVJlZ3MgcmVncygpOwogCiBwcml2YXRlOgpAQCAtMjE1MCw2ICsyMTc3LDI2IEBAIHByaXZh
dGU6CiAjZW5kaWYKIH07CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2
ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCisgICAgOiBt
X2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQoreworfQorI2Vsc2UKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRp
dmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdoaWNoVmFsdWVXb3JkIHJlc3VsdFdv
cmQpCit7CisgICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQpIHsKKyAgICAgICAgbV9w
YXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgICAgICBt
X3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGF5
bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBv
cmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKKyAgICB9Cit9CisjZW5kaWYKKwogY2xhc3MgRlBS
VGVtcG9yYXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CmluZGV4IDlkNDAzNjk2MTBkODllNDFlNTE2ZjZjNGE0MjVlNWZkNzEwMmExYmUuLmFiYzhkMThh
YTM5NzY0YTJmOWMwYzA3NDFjZmQxZTlhNThkZGM0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgxMiw2ICsx
ODEyLDMzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFs
KE5vZGUqIG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZQogICAgIG5vUmVzdWx0KG5vZGUsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7ICAgIAogfQogCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVw
bGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4m
IHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2lmIENPTVBJ
TEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQorICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDAp
OworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogewor
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0
aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5k
ZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRC
eVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhu
b2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51
c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJs
eSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJv
cGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZp
eChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MpOworICAgICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1Zh
bHVlUmVncygpOworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5q
c1ZhbHVlUmVncygpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAg
IHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMp
OworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
YzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRl
QW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBt
X3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRo
aXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCBy
ZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKKworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlz
VHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJh
dG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VSZWdzLCBwcm9wZXJ0
eVJlZ3MpOworCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkp
OworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKKyAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZv
cm1hdEludDMyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzU2FuZUNoYWluKCkpOworCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsCisg
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCks
CisgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxv
YWRPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BS
KCksIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MudGFn
R1BSKCkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisg
ICAgICAgICAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJl
c3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omln
bm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVt
cHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgo
RGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOworICAgICAgICAgICAg
aWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUo
cmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYgIXJlc3VsdFJlZ3MpOworICAg
ICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBG
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZw
cigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgIGJveERvdWJsZSh0ZW1wUmVn
LCByZXN1bHRSZWdzKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7
CisKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRSZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVm
aXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0
LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChob2xlKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RB
cmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6
U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiB7CisgICAgICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4
KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKQEAgLTIyMzMsNyArMjU2MiwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIFN0
cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24gU3RyaW5nQ2hhckF0IG5vZGUgaGF2
aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0gICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7Cisg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+
KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJl
ZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTIyNjUsMzI2ICsyNTk5LDI3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZv
cmNlRXhpdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jaWYg
Q09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCi0gICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVS
ZWdzKCksIDApOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBpbmRleCk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLQotICAgICAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0g
cmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSBy
ZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7Ci0KLSAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0
QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVj
dFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwg
c3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgotICAgICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVn
cygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGws
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0
eVJlZ3MpOwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkganNWYWx1ZVJlc3VsdDsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IG9uZVJlZ1Jlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2gg
KHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMs
IFJldXNlLCBwcm9wZXJ0eSwgVGFnV29yZCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFBheWxvYWRXb3JkKTsKLQotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZXN1bHRUYWcuZ3ByKCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICgh
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVj
Q2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKLSAgICAgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnKTsKLQotICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCi0gICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUu
Zm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkp
Ci0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQot
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1Bh
dGguZ2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93
UGF0aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1Nh
bmVDaGFpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAot
ICAgICAgICAgICAgICAgICAgICByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0VGFn
LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBh
eWxvYWQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdFRhZ1JlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0g
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9h
ZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywg
cmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCAwLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHQuZnByKCkpKTsKLSAgICAgICAgICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAg
ICAgICAgICAgICBvbmVSZWdSZXN1bHQgPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShvbmVSZWdSZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1Jl
ZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVn
ID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVt
cC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgIGJv
eERvdWJsZSh0ZW1wUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpOwotCi0gICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1Jl
ZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMp
OwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJl
c3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCks
IHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgZGVmYXVsdDogeworICAg
ICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7
CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IGpzVmFsdWVSZXN1bHQucmVncygpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwotCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRo
aXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcp
OwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaElmRW1w
dHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGhvbGUpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0g
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwot
ICAgICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgCkBAIC00MTEyLDUxICs0MTQ3LDU1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJh
YmxlTGVuZ3RoKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJv
cGVydHkobm9kZSk7CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRl
eCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVn
PigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIo
KSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisK
KyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJv
cGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5
KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
b21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJv
cGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Io
bm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
SW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCmluZGV4IGI1ZTFjYzNlNDJkMmZiNGM5ZDRmMTMxMDdlOThlZmUwYjIwNWU1YzcuLjEw
NzcxMzE3MTRkYThhNDU1M2JiY2I1ZDhlNDZiZDMzOGI2ZjRhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjI0Niw2ICsy
MjQ2LDM3MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiAg
ICAgfQogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9k
ZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+
KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkFueVR5cGVkQXJyYXk6
CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5n
QXJndW1lbnRzOgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAg
Y2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlJl
ZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChE
YXRhRm9ybWF0SlMpOworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpT
VmFsdWVSZWdzKCksIG5vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KSk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0UmVncy5ncHIoKSk7CisKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CisgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJy
YXk6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Ns
b3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdV
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0
cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdw
cigpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87Cisg
ICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc3R1Yklu
Zm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBzdHViSW5mb0dQUiA9IHN0dWJJ
bmZvLmdwcigpOworICAgICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigpOwor
CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsK
KyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5k
R2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0
cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMt
PnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdK
SVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lz
dGVycywKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3Ry
aW5nID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICht
X3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNT
eW1ib2wpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQorICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CisgICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aElDQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5m
bygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBz
dHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAg
ICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0
ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgbV9qaXQuYWRk
R2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpJbnQzMjoK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisg
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9y
bWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0g
cmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAg
ICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpD
b250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0g
bV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHQpOworICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAg
ICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LCBub2RlLCBmb3JtYXQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgo
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3By
KCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKKworICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAg
ICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZyk7CisgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7CisgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgIH0KKworCisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
CisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAg
ICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91Ymxl
KTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9h
ZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0
ciwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0UmVnKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0
ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHRSZWcs
IHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChmb3Jt
YXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKKworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwor
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIERhdGFGb3JtYXQgZm9y
bWF0OworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KHJlc3Vs
dElzVW5ib3hlZCA/IERhdGFGb3JtYXREb3VibGUgOiBEYXRhRm9ybWF0SlMpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdCA9
PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQu
anVtcCgpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5
UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgTmFOID0gUE5hTjsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJk5hTiksIHRlbXBSZWcpOworICAgICAgICAgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHRlbXBSZWcsIG5vZGUpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
TmFOKHRlbXBSZWcpKTsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0
UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgYm94RG91Ymxl
KHRlbXBSZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRSZWdzLmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncy5ncHIoKSwgbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworCisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKKworICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAor
ICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgor
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25TY29wZWRBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6IHsKKyAgICAgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAg
IGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0g
fQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAg
Tm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMjcxMyw3ICszMDc3LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0
OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBi
YXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ID09
IERhdGFGb3JtYXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5yZWdzKCksIHByZWZlcnJlZEZv
cm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNzQ2LDM0
NSArMzExNSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgotICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVz
aW5nQXJndW1lbnRzOgotICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25z
OgotICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgICAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBpbmRleCk7Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1
c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2Uo
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50
NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5
VmFsLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RX
aXRoU3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5m
bzsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBwcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSW5mby5lbXBsYWNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8tPmdwcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxh
dGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAg
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVy
YXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0t
PnNpemUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+
dXNlZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7Ci0KLSAgICAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAg
ICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKLSAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0KLSAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7Ci0gICAg
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAotICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotCi0gICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMo
KSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOwotICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0
eShyZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBE
YXRhRm9ybWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVt
cG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJk
YTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2ggKHByZWZlcnJlZEZv
cm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7Ci0KLSAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3Vs
dFJlZyk7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51
bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmpl
Y3RJbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsK
LQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdFJlZykpOwotICAgICAgICAg
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICAgICAgZGVmYXVs
dDogeworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1h
dEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnQzMik7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+
YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxHUFJSZWc+IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNV
bmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBS
ZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBK
U1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAg
ICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAq
cmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgp
OwotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCks
IG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVy
dHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSwgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRS
ZWcsIG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7
Ci0gICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJl
ZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0g
ICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsK
LSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOwotICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50LAotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNj
b3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlN
b2RlKCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAg
ICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3Jt
YXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU4MSw3ICsz
NjI2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3Vs
YXRlID0gZmFsc2U7Ci0gICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJl
c3VsdEdQUiwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQm94ID0gZmFsc2U7CisgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTUyNjksNTIgKzUzMTUsNTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxl
U3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0RW51bWVyYWJs
ZUxlbmd0aChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3Ry
dWN0dXJlUHJvcGVydHkobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3Bl
cnR5KG5vZGUpOworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRl
eCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVn
PigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIo
KSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisK
KyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJv
cGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5
KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
b21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJv
cGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Io
bm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
SW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBi
ZWYxZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRkMDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJl
Y3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAgLTM1Miw2ICszNTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5k
ZXggMmUyZjA3ZGZjN2U4YzEzZGRiMGVkZDVhMmQwN2E1ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcy
MzBlMGUxYmQ0NDVmMzA2MjM0MzdmY2Q2MzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTExNCw2ICsxMTQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
bW9kZVNldE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVT
dHJpbmc6Om9mZnNldE9mRmxhZ3MoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19sZW5ndGgs
IEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmlu
Z19maWJlcjAsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGExYTVmZDI0NGNmMjEx
MDMyNjQxOTdhNzZhZTMwYzdmNjBmNzllNjQuLjAzZjg2NTJjNmNiODJjNjIwMjBkMWU2NmJiNTlm
NDY1OTFkODNlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKQEAgLTI4NiwxOCArMjg2LDE1IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIEJv
b2xlYW5Ub051bWJlcjoKICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBI
YXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0g
ICAgY2FzZSBHZXREaXJlY3RQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0UHJvcGVydHlF
bnVtZXJhdG9yOgotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNh
c2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Cisg
ICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRl
eDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2Fz
ZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNmZlMjlk
OTlmYTQ0MTQ5YzE0NmIyMWFiNDEwNGM0MDgwMzY5ZjM3MS4uMWU2OWIyYTczMmFhYjdkZTRkZjRm
YjM2N2ViZmRlZDAyOWVhZmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcApAQCAtMTAyLDYgKzEwMiw4IEBACiAjaW5jbHVkZSA8d3RmL1JlY3Vy
c2FibGVMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RkVW5vcmRlcmVkU2V0Lmg+CiAKKyNpbmNs
dWRlICJQcm9iZUNvbnRleHQuaCIKKwogI3VuZGVmIFJFTEVBU0VfQVNTRVJUCiAjZGVmaW5lIFJF
TEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCiAgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBc
CkBAIC0xNTIzLDQwICsxNTI1LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlU3Rv
cmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAg
IGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICAgICAgICAgIGNv
bXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc093
blN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9y
OgorICAgICAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAg
IGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGUoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1lKCk7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgICAgICBjb21waWxl
RW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51bWVy
YWJsZUxlbmd0aCgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6Cisg
ICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgICAgICAg
ICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOworICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lKCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCk7CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckluQnlWYWw6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckluQnlWYWwoKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Ci0gICAgICAg
ICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CkBAIC01
MDIwLDcgKzUwMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyB3ZSBkb21pbmF0ZSB0aGVtLgog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisgICAgTFZhbHVlIGNvbXBp
bGVHZXRCeVZhbEltcGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA0Nyw4ICs1MDQw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBh
bGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAg
ICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgZmFzdENhc2UgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTA4MCw4ICs1MDcyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRv
IGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOiB7CkBAIC01MTAwLDggKzUwOTEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBtX25v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG1fbm9kZS0+Zmxh
Z3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKQEAgLTUxNDEsMTggKzUxMzIsMTYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKQotICAg
ICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkoRG91YmxlLCBmYXN0UmVzdWx0LCBzbG93
UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOiB7CiAgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogCiAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZC
b3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50
MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogewpA
QCAtNTE2OSw4ICs1MTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
T3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5kcyk7CiAgICAgICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAg
ICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0
Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUxOTIsOCAr
NTE4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5w
aGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CkBAIC01MjQ2LDggKzUy
MzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBuYW1lZFJl
c3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5
OgpAQCAtNTI1NiwyNCArNTI0MiwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobV9ub2RlKSkgewogICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEp
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpT
VmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RT
dHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmlu
ZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJv
bFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN5bWJvbCwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgbG93
SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtNTM3Myw4ICs1MzU2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBzZXRKU1Zh
bHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IHBhdGNocG9pbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CkBAIC01MzkwLDggKzUzNzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQocmVz
dWx0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8g
a2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CkBAIC01NDE3LDEzICs1Mzk4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIC8v
IFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFs
aXZlLgogICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaW5n
Q2hhckF0SW1wbCgpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgpAQCAtNTQ0OCw5ICs1NDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvYWRGcm9tSW50VHlwZWRBcnJheShwb2ludGVyLCB0
eXBlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUg
c2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgICAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW50VHlwZWRB
cnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOwpAQCAtNTQ2OSw4ICs1NDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0
aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtNTQ4MCw4ICs1NDU2LDI0IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5
cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAg
aWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxh
dGUgPSB0cnVlOworICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0
LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIHNldERv
dWJsZShyZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBA
IC04NTcxLDcgKzg1NjMsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShJbnQ2NCwgZmFzdFJlc3VsdCwgZW1wdHlSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICBMVmFsdWUgY29tcGlsZVN0
cmluZ0NoYXJBdEltcGwoKQogICAgIHsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dTdHJpbmco
bV9ncmFwaC5jaGlsZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ncmFwaC5jaGlsZChtX25vZGUsIDEpKTsKQEAgLTg2NzksNyArODY3MSwxMiBAQCBwcml2
YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9y
YWdlIGFsaXZlLgogICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQ2NCwgcmVzdWx0cyk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlU3RyaW5n
Q2hhckF0KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoY29tcGlsZVN0cmluZ0NoYXJBdElt
cGwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQpA
QCAtMTI5MDYsMTcgKzEyOTAzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRTdG9yZUJhcnJp
ZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3Jl
QmFycmllcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCisgICAgTFZhbHVlIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKExWYWx1ZSBpbmRleCwgU19KSVRPcGVyYXRpb25fR0Na
IHNsb3dQYXRoT3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKSk7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbV9ub2RlLT5hcnJheU1vZGUo
KTsKIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgp
KSk7CiAKICAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtb2RlLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIgPwogICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMy
UHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwpAQCAtMTI5
NTEsMTEgKzEyOTQ3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9s
ZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwor
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZERv
dWJsZVByb3BlcnRpZXM7CiAgICAgICAgICAgICAKQEAgLTEyOTg5LDEyICsxMjk4NCwxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQs
IHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
X291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwor
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKIAogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEzMDI2LDE5NiAr
MTMwMjAsMjY5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3Vs
dCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9
CiAKICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3Ra
ZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKTsKICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KCkK
KyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChpbmRleCwgb3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0
UHJvcGVydHlFbnVtZXJhdG9yKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0
aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFNsb3dQYXRoQ2FsbD4KLSAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eUlt
cGwoTFZhbHVlIGJhc2UsIFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwpCisgICAgdm9pZCBjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3Jp
Z2luLnNlbWFudGljKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3Ig
PSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CiAKLSAgICAgICAgTEJh
c2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvcnJlY3RTdHJ1Y3R1cmUgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIGlmIChtX25vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1f
b3V0Lm5vdFplcm8zMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSk7CiAKLSAgICAgICAgbV9v
dXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAg
ICAgICAgICAgIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVseShzbG93UGF0aCkpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNoZWNrSGFzUHJvcGVydHkgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKIAot
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2Us
IGNvcnJlY3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5pdGlhbElu
ZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlu
aXRpYWxJbmRleEZvckhhc1Byb3BlcnR5ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihtb2RlKSwgdW5zdXJlKGNoZWNrSGFzUHJv
cGVydHkpLCB1bnN1cmUoaW5jcmVtZW50KSk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hl
YXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAg
ICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb3JyZWN0U3RydWN0dXJlKSk7CisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAgICAgICAgTFZhbHVlIGlu
ZGV4UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgpOworICAgICAgICAgICAgTFZh
bHVlIGluY3JlbWVudGVkSW5kZXggPSBtX291dC5hZGQoaW5kZXhQaGksIG1fb3V0LmludDMyT25l
KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3JlbWVudGVkSW5kZXhSZXN1bHQgPSBt
X291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmaW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubGVzc1RoYW4oaW5jcmVtZW50ZWRJbmRl
eCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yX2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvcnJlY3RTdHJ1Y3R1cmUsIHNs
b3dQYXRoKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSGFzUHJvcGVydHkp
OworICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5SW5kZXggPSBtX291dC5waGkoSW50MzIsIGlu
aXRpYWxJbmRleEZvckhhc1Byb3BlcnR5LCBpbmNyZW1lbnRlZEluZGV4UmVzdWx0KTsKKyAgICAg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXhQaGksIG1fb3V0LmFuY2hvcihwcm9w
ZXJ0eUluZGV4KSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaW5hbFByb3BlcnR5SW5k
ZXggPSBtX291dC5hbmNob3IocHJvcGVydHlJbmRleCk7CisgICAgICAgICAgICBMVmFsdWUgaGFz
UHJvcGVydHkgPSBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChwcm9wZXJ0eUluZGV4LCBv
cGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChoYXNQcm9wZXJ0eSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpbmNyZW1l
bnQpKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3IoCi0g
ICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1D
YWxsKEludDY0LCBzbG93UGF0aENhbGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2Us
IHByb3BlcnR5KSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIGZp
bmFsSW5kZXggPSBtX291dC5waGkoSW50MzIsIGZpbmFsSW5jcmVtZW50ZWRJbmRleCwgZmluYWxQ
cm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQu
emVyb0V4dChmaW5hbEluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVt
YmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGUpIDw8IDMyKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjb3JyZWN0U3RydWN0dXJlUmVzdWx0LCBzbG93
UGF0aFJlc3VsdCkpOworICAgICAgICBFZGdlJiBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2lu
ZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChiYXNl
RWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2Rl
LCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9tb2RlU2V0KSwgbV9v
dXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihp
bmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNy
ZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJP
bmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ID0gbV9v
dXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1
ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25F
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKICAgICB9CiAKLSAgICB2b2lkIGNv
bXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCkKICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1
Y3R1cmVQcm9wZXJ0eUltcGwobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9u
SGFzRW51bWVyYWJsZVByb3BlcnR5KTsKKyAgICAgICAgTFZhbHVlIGJveGVkUGFpciA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRv
SW50MzIoYm94ZWRQYWlyKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0
dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUo
KQogICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7Cisg
ICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
CisgICAgICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LmxTaHIo
Ym94ZWRQYWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQzMihtX291
dC5iaXRBbmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUlu
U3RydWN0dXJlUHJvcGVydHkoKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgaGF2
ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNvdmVyeSBmb3IgdGhpcyBub2RlIHNpbmNlIGl0J3MgImVm
ZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxpdmUgaW4gYnl0ZWNvZGUuCisgICAgdm9pZCBjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKQogICAgIHsKLSAgICAgICAgY29tcGls
ZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVy
YXRpb25JblN0cnVjdHVyZVByb3BlcnR5KTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1
ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0
eU5hbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9y
KSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoKQorICAgIHZvaWQg
Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRv
ciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKyAgICAgICAgRWRn
ZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgRWRn
ZSBwcm9wZXJ0eU5hbWVFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpOworICAg
ICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpOwor
ICAgICAgICBFZGdlIGluZGV4RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKTsK
IAotICAgICAgICBMQmFzaWNCbG9jayBjaGVja09mZnNldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWQgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAg
ICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUg
YmFzZSA9IERGRzo6aXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkgPyBsb3dDZWxsKGJhc2VFZGdl
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pIDogbG93SlNWYWx1ZShiYXNlRWRnZSk7CisKKyAg
ICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBzdG9yYWdlRWRnZSA/IGxvd1N0b3JhZ2Uoc3RvcmFnZUVk
Z2UpIDogbnVsbHB0cjsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgcHJv
cGVydHlOYW1lIGhlcmUgaW4gY2FzZSBpdCByZXF1aXJlcyBib3hpbmcgc2luY2UgdGhlIElDIHBh
dGggd29uJ3QgZG9taW5hdGUgc3Vic2VxdWVudCB1c2VzIGluIHN1YnNlcXVlbnQgbm9kZXMuCisg
ICAgICAgIC8vIElmIGl0J3MgYW4gSW50MzIgYW5kIHdlIHVzZSBpdCBhcyBzdWNoIHRoaXMgYm94
aW5nIHdpbGwgYmUgRENFJ2QgYnkgYjMgbGF0ZXIgYW55d2F5LgorICAgICAgICBsb3dKU1ZhbHVl
KHByb3BlcnR5TmFtZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKworICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihpbmRleEVkZ2UpOworICAgICAgICBMVmFsdWUgbW9k
ZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KSk7CisgICAgICAgIExW
YWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNSkp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2sg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVMb2FkQmxvY2sg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBnZW5lcmljSUNCbG9j
ayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFs
KAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNldCkpOworICAgICAgICBMVmFsdWUgaXNO
b3ROYW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROYW1lZCwgdW5z
dXJlKGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNrU3RydWN0dXJlQmxvY2spKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgLy8gVE9E
TyBjaGVjayBjZWxsPworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8g
c3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUu
b25seVN0cnVjdHVyZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlKQorICAgICAgICAgICAgc3Ry
dWN0dXJlSUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMu
SlNDZWxsX3N0cnVjdHVyZUlEKTsKKworICAgICAgICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVj
dHVyZSA9IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKKwor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdDsKKyAgICAg
ICAgaWYgKGluZGV4RWRnZS5ub2RlKCkgPT0gcHJvcGVydHlOYW1lRWRnZS5ub2RlKCkpIHsKKyAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBiYWRT
dHJ1Y3R1cmVTbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZM
aW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYmFkU3RydWN0dXJlU2xvd1BhdGgpOworICAgICAgICAgICAgYmFkU3RydWN0dXJl
U2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVt
ZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
YmFzZSwgaW5kZXgsIGVudW1lcmF0b3IpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9y
T3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNoZWNrT2Zmc2V0LCBpbmxpbmVMb2Fk
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQu
bG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hl
ZElubGluZUNhcGFjaXR5KSksCi0gICAgICAgICAgICB1bnN1cmUob3V0T2ZMaW5lTG9hZCksIHVu
c3VyZShpbmxpbmVMb2FkKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5saW5lT3JP
dXRPZkxpbmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBpbmxpbmVDYXBhY2l0eSA9IG51bGxwdHI7
CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgICAg
IGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9
ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgICAgICBpbmxpbmVDYXBh
Y2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5KQorICAgICAgICAgICAgaW5saW5l
Q2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOworICAgICAgICBMVmFsdWUgaXNJbmxp
bmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291dC5pbnQzMk9uZSA6IG1fb3V0LmJl
bG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0lubGlu
ZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayksIHVuc3VyZShvdXRPZkxpbmVMb2FkQmxvY2spKTsK
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkLCBvdXRPZkxpbmVMb2FkKTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaW5saW5lTG9hZEJsb2NrKTsKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9h
ZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCisg
ICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGll
cy5hdEFueU51bWJlcigpLAogICAgICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5k
ZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob3V0T2ZMaW5lTG9hZCwgc2xvd0Nhc2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAg
ICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkQmxvY2spOworICAgICAgICBpZiAoIXN0
b3JhZ2UpCisgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSk7CisKICAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0
LnNpZ25FeHQzMlRvNjQoCi0gICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBt
X291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
Y2FjaGVkSW5saW5lQ2FwYWNpdHkpKSkpOworICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1
YihpbmRleCwgaW5saW5lQ2FwYWNpdHkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1f
b3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVy
KCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgdm1DYWxsKEludDY0
LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJv
cGVydHkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291
dC5hcHBlbmRUbyhnZW5lcmljSUNCbG9jayk7CisgICAgICAgIExWYWx1ZSBnZW5lcmljUmVzdWx0
ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
bV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQo
dHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveEludDMyKGdlbmVy
aWNSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1
bHQgPSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChnZW5lcmljUmVzdWx0LT50eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgZ2VuZXJp
Y1Jlc3VsdCA9IGJveERvdWJsZShnZW5lcmljUmVzdWx0KTsKIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkoSW50NjQsIGlubGluZVJlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBzbG93Q2FzZVJlc3VsdCkp
OwotICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAg
IExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
c2V0SW50MzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yX2luZGV4TGVuZ3RoKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJ
Q1Jlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBpbmxpbmVSZXN1bHQpOworICAgICAgICBpZiAoYmFk
U3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpCisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKHJlc3VsdCwgYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpOworICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJh
dG9yKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xv
d1BhdGhGdW5jdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNl
bGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgZW51
bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRl
eCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBFZGdlIGJhc2VFZGdlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICBMVmFsdWUgYmFzZSA9IGJh
c2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlID8gbG93Q2VsbChiYXNlRWRnZSkgOiBsb3dKU1Zh
bHVlKGJhc2VFZGdlKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5TmFtZSA9IGxvd0pTVmFsdWUo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVl
IG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworICAgICAg
ICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDQpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNOYW1lZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBtYXRjaGVzU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBvcGVyYXRpb25CbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleCkpLAotICAgICAgICAgICAgdXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5k
cykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291
dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSksIHVuc3Vy
ZShpc05hbWVkQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxvY2spKTsKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNOYW1lZEJsb2NrKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5s
b2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQ
dHIoaW5kZXgpKSkpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5
cGUoYmFzZUVkZ2UpKSwgdW5zdXJlKGlzQ2VsbEJsb2NrKSwgdW5zdXJlKG9wZXJhdGlvbkJsb2Nr
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNDZWxsQmxvY2spOworICAgICAgICBMVmFs
dWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1f
b3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAgICAgICAgICAgdXN1YWxseShtYXRjaGVzU3RydWN0dXJl
QmxvY2spLCByYXJlbHkob3BlcmF0aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhtYXRjaGVzU3RydWN0dXJlQmxvY2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBuYW1lZFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywg
Y29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpWYWx1ZU51bGwpKTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ob3BlcmF0aW9uQmxvY2spOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3IodW5ib3hCb29sZWFuKHZtQ2FsbChJ
bnQ2NCwgc2xvd1BhdGhGdW5jdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwg
cHJvcGVydHlOYW1lLCBpbmRleCwgbW9kZSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBpbkJvdW5kc1Jl
c3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24pOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1
bHQsIG9wZXJhdGlvblJlc3VsdCkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCkK
ICAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7
Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAg
ICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgp
KSwKLSAgICAgICAgICAgIHVzdWFsbHkoaW5Cb3VuZHMpLCByYXJlbHkob3V0T2ZCb3VuZHMpKTsK
LQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRz
LCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0
eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBt
X291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
Q29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKSkpOwotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZC
b3VuZHMsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRz
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVOdWxs
KSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LnBoaShJbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91bmRzUmVzdWx0KSk7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRv
ckluQnlWYWwpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkK
KworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSgpCiAgICAgewotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4KSk7Cisg
ICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRvckhh
c093blByb3BlcnR5KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUoKQpAQCAtMTczNDQsNyArMTc0MTEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpICYmIGNh
blNwZWN1bGF0ZSkgewogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIE92
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJlc3VsdCwgbV9vdXQu
aW50MzJaZXJvKSk7CkBAIC0yMDI5Niw2ICsyMDM2MywyNyBAQCBwcml2YXRlOgogICAgICAgICBt
X291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KIAorICAgIC8vIFRoaXMgb25seSB3b3JrcyBmb3Ig
aW50cyByaWdodCBub3cuCisgICAgUGF0Y2hwb2ludFZhbHVlKiBkYXRhTG9nRm9yRGVidWdnaW5n
KGNvbnN0IGNoYXIqIHByZWZpeCwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAgICByZXN1
bHQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC0+YXBw
ZW5kKHZhbHVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIFR5cGUg
dmFsdWVUeXBlID0gdmFsdWUtPnR5cGUoKTsKKyAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworCisgICAgICAgICAgICBqaXQucHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PSBJbnQzMikKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8aW50MzJfdD4o
R1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPEpTVmFsdWU+KEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKICAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0
dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0RTTC5yYgppbmRleCA3MzE3MTAwOTZjZjNlMjQ5OGFlNDVkZGEyNmFhODJlNzljZDQ2
YTRlLi42OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTM4LDYgKzEzOCw3IEBAIG1vZHVsZSBE
U0wKICNpbmNsdWRlICJHZXRCeVZhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5o
IgogI2luY2x1ZGUgIkl0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlByaXZh
dGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCmluZGV4IDQ0NDYzNWU5ODBkOTBh
ZjgzN2ViZDYzYjk2MmZhZWRlMmVjNTM1MDMuLmQ4NzljOTBiZTMxMTc4NjIzM2Y1MjZiMTgzZWRm
MWNiM2M3YmIzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3Rlci5oCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBTFdBWVNf
SU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZyYW1lKik7CiAgICAgICAgIEFMV0FZU19J
TkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sqKTsKICAgICAgICAgQUxXQVlTX0lO
TElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTU2NvcGUqKTsKLSAgICAgICAgQUxXQVlTX0lOTElO
RSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7CisgICAgICAgIEFMV0FZU19JTkxJTkUg
UmVnaXN0ZXImIG9wZXJhdG9yPShKU0NlbGwqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdp
c3RlciYgb3BlcmF0b3I9KEVuY29kZWRKU1ZhbHVlKTsKIAogICAgICAgICBpbnQzMl90IGkoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
cklubGluZXMuaAppbmRleCBjNTZlZjVlNDU1NGNiMTAzYWJlYmU3MmU2Mjk4ZjhjNDhhYWQ5ODYw
Li41OTNlZjY2NjhkZTJlMDNhNjU5YjM5ZjMxYWY2MGY4OGMyNzgzOTg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCkBAIC02
Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0o
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1BTFdBWVNfSU5M
SU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTT2JqZWN0KiBvYmplY3QpCitBTFdB
WVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTQ2VsbCogb2JqZWN0KQog
ewogICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShvYmplY3QpKTsKICAgICBy
ZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCBhYzhiNTEzN2Q4NTM1NDUwNmFlZWRjZWRiZDFjNWJkNzcyNTc5YzAxLi40MTU5ZTdl
NTA0OTY5MzdlZTFlNTZhZmI3YzIwYWU5Y2YyYTg5ZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTg4OSw3ICs4ODksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAgICAgQmVsb3csIEFkZHJlc3MoY2VsbEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBl
KSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBp
bmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUoR1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJh
bmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA0MmI4Y2Fm
NWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0Li4zYTg0NWFhYjdjMjYxZjI1NTQ2YjYw
NzZjNjU5YjYxOGNhOTRmM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0zMDgs
MTAgKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
REVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQogICAgICAgICBERUZJTkVfU0xP
V19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9X
X09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19p
bmRleF9zdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGVudW1lcmF0b3JfbmV4dCkKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiAgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKQEAgLTM2NSw2ICszNjMsOSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlf
aWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAg
ICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2luX2J5
X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkK
ICAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcml2YXRlX25hbWUpCiAgICAgICAgIERFRklORV9P
UChvcF9zZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2NoZWNrX3ByaXZh
dGVfYnJhbmQpCkBAIC00NzMsMTQgKzQ3NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX2FyZ3VtZW50cykKICAgICAg
ICAgREVGSU5FX09QKG9wX3B1dF90b19hcmd1bWVudHMpCiAKLSAgICAgICAgREVGSU5FX09QKG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9o
YXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2luX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCi0g
ICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLSAgICAgICAg
REVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKLSAgICAgICAgICAgIAogICAg
ICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAKQEAgLTU3OCw2ICs1NzEsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9n
ZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X3ByaXZhdGVfbmFtZSkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTYwOSw3ICs2
MDMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKQEAgLTY0MiwxMSArNjM1LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1Aobm90KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChzdHJpY3RlcSkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobnN0cmljdGVxKQotICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChnZXRfZGlyZWN0X3BuYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChnZXRfcHJvdG90eXBlX29mKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZl
X3Njb3BlKQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA0ODdhNWFjNWI4ZTVk
OGE5ZDgwYjJjNmQzMDZlMDgxNTIxYjgyODE0Li40ZmM5YTAyYjcyOWEzMjk0NWI3NTg0Zjc4YTE2
MzVkZTZhOGIyZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTY3MCwyMSArNjcwLDIz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9sb2Fk
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLSAgICAg
ICAgdm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgor
ICAgICAgICB2b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworCisgICAgICAgIHZvaWQgZW1pdF9v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+CisgICAgICAg
IHZvaWQgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBjb25zdCBPcGNvZGVUeXBlJiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgICAgICB2b2lk
IGVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzM1LDcgKzcz
Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmlu
ZGV4IGY2ZGIzZjU5YzRhYTRlMDI3YTE1NjExZWRiYmEyNjFjYWQ4ZWZlZDYuLjliYTEwZWQ2Nzcy
ZmFlYzNmMjBlNjM0YmFiZTE0YWRkOWExMDg5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcApAQCAtMTY5Miw0NiArMTY5MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlw
ZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlv
bik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVu
dEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAorCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwpAQCAtMTczOSw3ICsxNzA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0
aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAg
IAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFy
Z2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7CiAKQEAgLTE3NDgsNyArMTcxNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAg
ICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewogICAgICAgICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBU
YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYzsKQEAgLTE3NTgs
MTcxICsxNzI0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2st
PmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5j
b3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0
aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3
YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5
cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGgg
aXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0g
ICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRp
bmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAgICAv
LyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3Mg
Y2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAvLyBleHRl
bmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhl
IHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLQotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtl
IFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExv
YWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbElu
Zm8pOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwotCi0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAg
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAgIExhYmVsIG5leHRIb3RQ
YXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVm
YXVsdDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eURlZmF1bHQpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEJ5VmFs
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0g
c2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgr
KzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwot
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwot
ICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
c3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJl
Z1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5C
b3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCmluZGV4IDRkNzQxMjZiZTFlM2RlNDMwZDNhNmQ5Y2I3ZmRkYjZkYzg2ZjdlYjQu
LjJhZTNhMDRhM2M1ZmQyZjY5NDAyYzI1YTNlZTNmNzQ0ODI0Yzk3N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTExNDIsMjI3ICsxMTQy
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLXZvaWQgSklUOjplbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
b2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0KLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Qm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVf
c3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJ
bXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQot
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIAotICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBi
eVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
cywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmUsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVk
X3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29k
ZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
KTsKLQotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDEpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2Fs
bHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3Qg
cGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBp
ZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxs
IGFsd2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JM
ZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0
aW9uCi0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBl
eHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUK
LSAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFk
ZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAv
LyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUg
aW4gdGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsK
LQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2Zp
bGUpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsK
LQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAg
IFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLQotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
b3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgotICAgIC8vIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNs
b3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwg
YmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwot
Ci0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOwotCi0gICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwotICAgIAot
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQot
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0TG9hZChiYXNlLCBy
ZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVm
YXVsdCwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIGJ5VmFsSW5mbyk7Ci0KLSAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRh
cmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlv
bkluZGV4Kys7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRMb2Fk
UGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRMb2FkUGF5bG9hZChl
bnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAot
ICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDIpOwotICAgIC8vIElmIGluZGV4IGlzIGxl
c3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdz
IGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIGxvYWQz
MihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhp
cyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDIpOwotICAgIG5lZzMy
KHJlZ1QyKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1
Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1
Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVt
aXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJh
dG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwg
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9w
ZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChy
ZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCByZWdUMik7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2VuZXJpY1BuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQ
cm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRl
eChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMik7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CmluZGV4IDE1ZTFkMzQ1NzliNmQ0YzhjMTcwZDIzNTBjNmMzNjQ0M2ZmZWE0MTUuLmQ1OTQ1NjIy
NTg4OTE1ZTc4ODY5OTRkMjZiMDhjOTY3MjNmNzRhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5j
bHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5o
IgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCkBAIC04NiwxMCArODcsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgordm9pZCBKSVQ6Omdl
bmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKQEAgLTEzNiw2ICsxMzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
ICAgICB9CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQogewpAQCAtMzU0MCw2
ICszNTQ2LDEzNiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5
VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeQogICAgIHJldHVybiBzbG93Q2Fz
ZXM7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9
IGJ5dGVjb2RlLm1fbW9kZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsK
KyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisK
KyAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CisKKyAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFu
IGludDMyIGVuY29kZWQgdmFsdWUuCisgICAgSnVtcCBpc05vdE5hbWVkTW9kZSA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7
CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKworICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDMpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAvLyBJZiBp
bmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2Us
IHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKKworICAgIGRvbmVDYXNl
cy5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisg
ICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3ViMzIoQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOworICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7Cisg
ICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgc3RydWN0dXJlTWlzbWF0Y2gubGlu
ayh0aGlzKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhKTsKKworICAgIGlzTm90TmFtZWRNb2RlLmxpbmsodGhpcyk7CisgICAgSnVt
cCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgLy8gUmVwbGFjZSB0
aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKKworICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisKKyAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7CisgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBl
bHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CisKKyAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVy
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRo
RnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUm
IGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3sKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5t
X21vZGU7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1vZGUsIHJlZ1QwKTsKKyAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgc2xvd0Nhc2VzLmxpbmsodGhpcyk7CisKKyAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZ2VuZXJh
bENhc2UpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19w
cm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckluQnlWYWw+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFz
X293bl9wcm9wZXJ0eSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwCmluZGV4IDU4ZTVkNTJmZTViMDhhZTI5ZTNlNWRkZGUzZDc0Njc5Njdm
MjMwMTkuLjI1N2NhZWEyNzg2ODgzYmJhMDhjN2EyYzRiMjM4ZDUwNDRlNzI5NzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNw
cApAQCAtMTUwNSw2ICsxNTA1LDI1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9m
aWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB0ZW1wbGF0ZSB2
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9u
Kik7CiAKKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9y
X2dldF9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7CisgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNf
b3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOworICAgIHNsb3dQYXRoQ2Fs
bC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gVVNFKEpTVkFM
VUUzMl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQppbmRleCAzN2I2ZGYzMGYxMGMzYTAwMWE1NjU1ZWExYmIxZGI1OTU3M2Nm
NjA4Li5lNzE4M2E3MmEzNjhmMWEyODA0Njg0ZDJiMDc2NDdmMjIwNjhmMTI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBA
IC0xOTkyLDE5ICsxOTkyLDE0IEBAIHNsb3dQYXRoT3AoY3JlYXRlX2dlbmVyYXRvcikKIHNsb3dQ
YXRoT3AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKIHNsb3dQYXRoT3AoZGVmaW5lX2FjY2Vzc29y
X3Byb3BlcnR5KQogc2xvd1BhdGhPcChkZWZpbmVfZGF0YV9wcm9wZXJ0eSkKLXNsb3dQYXRoT3Ao
ZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQotc2xvd1BhdGhPcChlbnVtZXJhdG9yX3N0cnVjdHVy
ZV9wbmFtZSkKIHNsb3dQYXRoT3AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi1zbG93UGF0aE9wKGdl
dF9kaXJlY3RfcG5hbWUpCi1zbG93UGF0aE9wKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKIHNsb3dQ
YXRoT3AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi1zbG93UGF0aE9wKGhhc19lbnVtZXJhYmxl
X2luZGV4ZWRfcHJvcGVydHkpCi1zbG93UGF0aE9wKGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQor
c2xvd1BhdGhPcChlbnVtZXJhdG9yX25leHQpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9pbl9ieV92YWwpCitzbG93UGF0aE9wKGVudW1l
cmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKIAogaWYgbm90IEpTVkFMVUU2NAotICAgIHNsb3dQYXRo
T3AoaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotICAgIHNsb3dQYXRoT3AoaGFz
X293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xvd1BhdGhPcChpbl9zdHJ1Y3R1cmVfcHJv
cGVydHkpCiAgICAgc2xvd1BhdGhPcChnZXRfcHJvdG90eXBlX29mKQogZW5kCiAKQEAgLTIwMjEs
NyArMjAxNiw2IEBAIHNsb3dQYXRoT3AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19k
ZWNsX2luX2V2YWwpCiBzbG93UGF0aE9wKHNwcmVhZCkKIHNsb3dQYXRoT3Aoc3RyY2F0KQogc2xv
d1BhdGhPcCh0aHJvd19zdGF0aWNfZXJyb3IpCi1zbG93UGF0aE9wKHRvX2luZGV4X3N0cmluZykK
IHNsb3dQYXRoT3AodHlwZW9mKQogc2xvd1BhdGhPcCh0eXBlb2ZfaXNfb2JqZWN0KQogc2xvd1Bh
dGhPcCh0eXBlb2ZfaXNfZnVuY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGJkODg1NWViZmQ2ZmMxOWIx
NWMxYjU4ODZkNGZhNTU2NDM4MmQ4N2QuLjhhNWY3ZDIzZTY0NzYzYmEyNTllMWIyYzVkODdmOGQx
NmI4MjlhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0zMTQxLDM0ICszMTQxLDYgQEAgbGxpbnRPcChvcF9s
b2dfc2hhZG93X2NoaWNrZW5fdGFpbCwgT3BMb2dTaGFkb3dDaGlja2VuVGFpbCwgbWFjcm8gKHNp
emUsIGdldCwgZGkKICAgICBkaXNwYXRjaCgpCiBlbmQpCiAKLW1hY3JvIGhhc1N0cnVjdHVyZVBy
b3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4sIHNsb3dQYXRoQ2FsbCkKLSAg
ICBnZXQobV9iYXNlLCB0MCkKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0
MSkKLSAgICBidHFueiB0MSwgbm90Q2VsbE1hc2ssIC5zbG93UGF0aAotCi0gICAgbG9hZFZhcmlh
YmxlKGdldCwgbV9lbnVtZXJhdG9yLCB0MCkKLSAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJl
SURbdDFdLCB0MQotICAgIGJpbmVxIHQxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1fY2Fj
aGVkU3RydWN0dXJlSURbdDBdLCAuc2xvd1BhdGgKLQotICAgIHJldHVybihWYWx1ZVRydWUpCi0K
LS5zbG93UGF0aDoKLSAgICBjYWxsU2xvd1BhdGgoc2xvd1BhdGhDYWxsKQotICAgIGRpc3BhdGNo
KCkKLWVuZAotCi1sbGludE9wV2l0aFJldHVybihvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVf
cHJvcGVydHksIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXpl
LCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4ob3BfaGFzX293bl9zdHJ1
Y3R1cmVfcHJvcGVydHksIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUs
IGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJv
cGVydHkpCi1lbmQpCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0
eSwgT3BJblN0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0
dXJuKQotICAgIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAg
cmV0dXJuLCBfc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQogb3AoZnV6
emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludCwgbWFjcm8gKCkKICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgdDAKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwg
dDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwCmluZGV4IDExMjk1NGJiOWI2ZTUwMTM2ODgzYjc0NTZjYjFlODMxOGZiNWE1MTEuLmIxNWQz
NTQ4MDE5YjcyZWQxZDY4Mzc3NTNmMzAyNjAyNjBlYTNkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtOTYyLDE2MSArOTYy
LDEzNyBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3Byb3BlcnR5
X2tleSkKICAgICBSRVRVUk4oR0VUX0MoYnl0ZWNvZGUubV9zcmMpLmpzVmFsdWUoKS50b1Byb3Bl
cnR5S2V5VmFsdWUoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorSlNDX0RFRklORV9DT01NT05f
U0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcikKIHsKICAgICBCRUdJ
TigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigp
OwotICAgIEpTVmFsdWUgZW51bWVyYXRvclZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5q
c1ZhbHVlKCk7Ci0gICAgaWYgKGVudW1lcmF0b3JWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICBSRVRVUk4oanNOdW1iZXIoMCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRf
QyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTih2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0
b3IoKSk7CiAKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nh
c3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oZW51bWVyYXRvclZhbHVlLmFzQ2VsbCgpKTsK
KyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwor
ICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgUkVUVVJOKGpzTnVtYmVyKGVudW1lcmF0b3It
PmluZGV4ZWRMZW5ndGgoKSkpOworICAgIFJFVFVSTihwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCitKU0NfREVGSU5FX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCkKIHsKICAgICBCRUdJTigpOwot
ICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5
PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKICAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgSlNP
YmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChn
bG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVy
dHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIG1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3RydWN0dXJlKHZtKSk7Ci0gICAg
QVNTRVJUKHByb3BlcnR5LmlzVUludDMyQXNBbnlJbnQoKSk7Ci0gICAgUkVUVVJOKGpzQm9vbGVh
bihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eS5hc1VJ
bnQzMkFzQW55SW50KCkpKSk7Ci19CisgICAgUmVnaXN0ZXImIG1vZGVSZWdpc3RlciA9IEdFVChi
eXRlY29kZS5tX21vZGUpOworICAgIFJlZ2lzdGVyJiBpbmRleFJlZ2lzdGVyID0gR0VUKGJ5dGVj
b2RlLm1faW5kZXgpOworICAgIFJlZ2lzdGVyJiBuYW1lUmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUu
bV9wcm9wZXJ0eU5hbWUpOwogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLXsKLSAgICBCRUdJTigpOwotICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+
KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUo
KS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIEpT
VmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAg
IFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJf
NjQpCi0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFs
dWUoKS5hc0NlbGwoKSk7Ci0gICAgaWYgKGJhc2UtPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51
bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0
cnVlKSk7Ci0jZW5kaWYKLSAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkp
OwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2Ut
Pmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKLX0K
KyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1v
ZGU+KG1vZGVSZWdpc3Rlci5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgdWludDMyX3QgaW5k
ZXggPSBpbmRleFJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigpOwogCi1KU0NfREVGSU5FX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotewot
ICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc093blN0cnVjdHVy
ZVByb3BlcnR5PigpOwotICAgIEpTVmFsdWUgYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSku
anNWYWx1ZSgpOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
R0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAo
YmFzZS5pc0NlbGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pLT5pZCgpID09IGVu
dW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAgICAgIFJFVFVSTihqc0Jvb2xlYW4o
dHJ1ZSkpOwotI2VuZGlmCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1l
cmF0b3IpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVQoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKCFiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51
bGwoKSk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZS0+c3RydWN0dXJlSUQoKSk7CiAKLSAgICBKU1ZhbHVl
IHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBSRUxF
QVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1N0cmluZyogc3RyaW5nID0g
YXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lk
ZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBKU1N0cmluZyogbmFtZSA9IGVudW1lcmF0b3It
PmNvbXB1dGVOZXh0KGdsb2JhbE9iamVjdCwgYmFzZSwgaW5kZXgsIG1vZGUpOwogICAgIENIRUNL
X0VYQ0VQVElPTigpOwogCi0gICAgUkVUVVJOKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNP
d25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFtZSkpKTsKKyAgICBtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsK
KyAgICBtb2RlUmVnaXN0ZXIgPSBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKSk7
CisgICAgaW5kZXhSZWdpc3RlciA9IGpzTnVtYmVyKGluZGV4KTsKKyAgICBuYW1lUmVnaXN0ZXIg
PSBuYW1lID8gbmFtZSA6IGpzTnVsbCgpOworICAgIEVORCgpOwogfQogCi1KU0NfREVGSU5FX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSkKK0pTQ19ERUZJ
TkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKQogewog
ICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEluU3RydWN0dXJlUHJv
cGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1Zh
bHVlKCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5
dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS5p
c0NlbGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pLT5pZCgpID09IGVudW1lcmF0
b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkp
OwotI2VuZGlmCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5
KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0g
ICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW5CeVZhbChnbG9iYWxPYmpl
Y3QsIGJhc2UsIGFzU3RyaW5nKHByb3BlcnR5KSkpKTsKLX0KKyAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
R0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0
PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNW
YWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChi
eXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBH
RVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzSW50MzIoKTsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
OiB7CisgICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJl
SUQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgICAgIFJFVFVS
Tl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGluZGV4KSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpOYW1lZE1vZGU6IHsKKyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkg
JiYgYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3ItPmNhY2hl
ZFN0cnVjdHVyZUlEKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdsbCBvbmx5IG1hdGNoIHRo
ZSBzdHJ1Y3R1cmUgSUQgaWYgdGhlIGJhc2UgaXMgYW4gb2JqZWN0LgorICAgICAgICAgICAgICAg
IEFTU0VSVChpbmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSk7
CisgICAgICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+
Z2V0RGlyZWN0KGluZGV4IDwgZW51bWVyYXRvci0+Y2FjaGVkSW5saW5lQ2FwYWNpdHkoKSA/IGlu
ZGV4IDogaW5kZXggLSBlbnVtZXJhdG9yLT5jYWNoZWRJbmxpbmVDYXBhY2l0eSgpICsgZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoKTsK
KyAgICAgICAgICAgIEZBTExUSFJPVUdIOworICAgICAgICB9CiAKLUpTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCi17Ci0gICAgQkVH
SU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5
PigpOwotICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVl
KCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBK
U1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAg
ICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGFz
U3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJO
KGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9w
ZXJ0eU5hbWUpKSk7Ci19CisgICAgICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpH
ZW5lcmljTW9kZTogeworICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBtb2Rl
ICE9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKQorICAgICAgICAgICAgICAg
IG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAgICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFz
U3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0
KTsKKyAgICAgICAgICAgIC8vIFRPRE8gRG9lcyB0aGlzIGFjdHVhbGx5IGV2ZXIgdGhyb3c/IElz
bid0IHN0cmluZyBiYWNrZWQgYnkgYSBVVUlEPworICAgICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7CisgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldChnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSkpOworICAgICAgICB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUg
cHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIEFTU0VS
VChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmco
cHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIo
Z2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBSRVRVUk4oYmFzZVZh
bHVlLmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH07CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotSlND
X0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cikKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9i
eV92YWwpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0
UHJvcGVydHlFbnVtZXJhdG9yPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVt
ZXJhdG9ySW5CeVZhbD4oKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2Rl
Lm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpKTsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0
byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQo
Ynl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9l
bnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CiAKLSAgICBK
U09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENI
RUNLX0VYQ0VQVElPTigpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRv
ciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIGlmIChhdXRvKiBiYXNlID0gYmFzZVZhbHVlLmdldE9i
amVjdCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TmFtZWRNb2RlICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3Ry
dWN0dXJlSUQoKSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwogCi0gICAg
UkVUVVJOKHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7Ci19Ci0K
LUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9zdHJ1Y3R1
cmVfcG5hbWUpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIHVpbnQzMl90IGlu
ZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMkFzQW55SW50KCk7
CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5KGdsb2Jh
bE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpKSkpOwor
ICAgIH0KIAotICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBudWxscHRyOwotICAgIGlmIChp
bmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSkKLSAgICAgICAg
cHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7Ci0g
ICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVsbCgpKTsKKyAgICBK
U1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5q
c1ZhbHVlKCkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlW
YWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN0cmluZywgJm1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlKSkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwo
KSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgp
LmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVy
YXRvckhhc093blByb3BlcnR5PigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFz
VUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KG1vZGUpOwogCi0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IG51bGxw
dHI7Ci0gICAgaWYgKGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSA8PSBp
bmRleCAmJiBpbmRleCA8IGVudW1lcmF0b3ItPmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCkpCi0g
ICAgICAgIHByb3BlcnR5TmFtZSA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5k
ZXgpOwotICAgIFJFVFVSTihwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5hbWUgOiBqc051bGwoKSk7
Ci19CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFs
dWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAg
ICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYg
YmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQor
ICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQotewotICAgIEJFR0lOKCk7Ci0g
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgSlNWYWx1
ZSBpbmRleFZhbHVlID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKTsKLSAgICBBU1NF
UlQoaW5kZXhWYWx1ZS5pc1VJbnQzMkFzQW55SW50KCkpOwotICAgIFJFVFVSTihqc1N0cmluZyh2
bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXhWYWx1ZS5hc1VJbnQzMkFzQW55SW50KCkpLnN0
cmluZygpKSk7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc093blBy
b3BlcnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJ
bnQzMigpKSkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQ
VElPTigpOworICAgIFJFVFVSTihqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSkpKTsKIH0KIAogSlNDX0RF
RklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVfY2xlYXJfbG9nKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAppbmRl
eCBkOGQxNTAxZmIzNWJhYzI3OTRjNmQ5NDEwMjcxYmI2OGY0Y2MwNTdlLi5hNWUwMTVkNTNhNjll
NjA1M2FmNGRiYjMxYjJjOGYyNTdjMGRiMWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaApAQCAtMjU0LDE3ICsyNTQsMTEgQEAgSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaXNfY29uc3RydWN0b3IpOwogSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfc3RyY2F0KTsKIEpTQ19ERUNMQVJFX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CiBKU0NfREVDTEFSRV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0eV9rZXkpOwotSlNDX0RFQ0xBUkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKLUpTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1l
cmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci1K
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsK
IEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVt
ZXJhdG9yKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0
b3Jfc3RydWN0dXJlX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7CitKU0NfREVDTEFS
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkp
OwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfcHJvZmlsZV90eXBlX2Ns
ZWFyX2xvZyk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF91bnJlYWNo
YWJsZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKaW5kZXggZTJjYTE2MmUwYjU0ZTI1Y2YwNjll
ZWE4Yzg3ZTFlZWEyZTRjZDViZS4uMWIwMzEzMGYwYTVjMDdjMzM1Y2M1ODU2ODNiYjY0NWVlNTNl
MDhiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2Vk
RnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVC
YXNlZEZ1enplckFnZW50LmNwcApAQCAtOTAsNyArOTAsNiBAQCBTcGVjdWxhdGVkVHlwZSBGaWxl
QmFzZWRGdXp6ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbkludGVybmFsKENvZGVCbG9jayogY29kZUJs
b2NrLAogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6
Ci0gICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfY29uc3RydWN0Ogog
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6
ZXJBZ2VudEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2Vk
RnV6emVyQWdlbnRCYXNlLmNwcAppbmRleCBmMTM5ZDRhNDQ3YjI3MGY5ZWQzM2Y3ZGZkMzVlMDJh
ZmZjMzFjNzAzLi5jMjZjMDAzNzQwMzkwYzdiMzgzNjA3NjBlM2MyMjljMWZkMWI4OGUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2Vu
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1
enplckFnZW50QmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBPcGNvZGVJRCBGaWxlQmFzZWRGdXp6ZXJB
Z2VudEJhc2U6Om9wY29kZUFsaWFzRm9yTG9va3VwS2V5KGNvbnN0IE9wY29kZUlEJiBvcGNvZAog
ewogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSWQgPT0gb3Bf
Y2FsbF9ldmFsIHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJZCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncykKICAgICAgICAgcmV0dXJuIG9wX2NhbGw7Ci0gICAgaWYgKG9wY29k
ZUlkID09IG9wX2dldF9kaXJlY3RfcG5hbWUgfHwgb3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93
aXRoX3RoaXMpCisgICAgaWYgKG9wY29kZUlkID09IG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCB8
fG9wY29kZUlkID09IG9wX2dldF9ieV92YWxfd2l0aF90aGlzKQogICAgICAgICByZXR1cm4gb3Bf
Z2V0X2J5X3ZhbDsKICAgICBpZiAob3Bjb2RlSWQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCiAg
ICAgICAgIHJldHVybiBvcF9jb25zdHJ1Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMjRmY2YwODE1ZTI1MDQ5NWUwMzE3OTRh
MDZlNGIzMTA1Yzc4NGZiNC4uMTVmNWIwNjRlY2JmYzY1OGE5OTBkMmViNTk2MzViZjJiZGJlODg4
MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcApAQCAtMTQ2MSw2ICsxNDYxLDEwIEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBs
b3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAg
ICAgIH0pOwogI2VuZGlmCiAKKyAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19jYXN0PHVu
c2lnbmVkPihMaW5rVGltZUNvbnN0YW50OjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpXS5p
bml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAg
aW5pdC5zZXQoaW5pdC52bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CisgICAgfSk7
CisKICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlUHJvZmlsZXJzT25HbG9iYWxPYmplY3QoKSkgewog
I2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJfX2VuYWJsZVNhbXBsaW5n
UHJvZmlsZXIiKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgZW5h
YmxlU2FtcGxpbmdQcm9maWxlciksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuY3BwCmluZGV4IDIxYzcwYTI3YjY5MWJlMDU2OTBhMmZhZTc3YzY5OTEy
YWVlYzExOWQuLmNmMGE0YTUxMzRmODJkZWU5OWFhYjI1YjY2MzU5OGU1N2RjZTJjOGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcApAQCAtNDksMTMgKzQ5LDE5IEBAIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0CiAKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluZGV4ZWRMZW5ndGgsIHVp
bnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdyaXRlQmFycmllcjxKU1N0cmluZz4q
IHByb3BlcnR5TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHByb3BlcnR5TmFtZXNTaXplKQogICAgIDog
SlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlLmdldCgpKQotICAg
ICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5hbWVzQnVmZmVyKQogICAgICwg
bV9jYWNoZWRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlkKCkgOiAwKQogICAg
ICwgbV9pbmRleGVkTGVuZ3RoKGluZGV4ZWRMZW5ndGgpCiAgICAgLCBtX2VuZFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXgobnVtYmVyU3RydWN0dXJlUHJvcGVydGllcykKICAgICAsIG1fZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXgocHJvcGVydHlOYW1lc1NpemUpCiAgICAgLCBtX2NhY2hlZElubGluZUNh
cGFjaXR5KHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSA6IDApCisgICAg
LCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5TmFtZXNCdWZmZXIpCiB7CisgICAg
aWYgKG1faW5kZXhlZExlbmd0aCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGU7CisgICAgaWYgKG1fZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFt
ZWRNb2RlOworICAgIGlmIChtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4IC0gbV9lbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpHZW5lcmljTW9kZTsKIH0KIAogdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4mJiBp
ZGVudGlmaWVycykKQEAgLTE0OCw0ICsxNTQsNzAgQEAgdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVy
dHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgUHIK
ICAgICB9CiB9CiAKK0pTU3RyaW5nKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVO
ZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJf
dCYgaW5kZXgsIE1vZGUmIG1vZGUsIGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmlu
ZykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGluZGV4ZWRMZW5ndGgoKSB8
fCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpOworCisgICAgaW5kZXgrKzsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEluaXRNb2RlOiB7CisgICAgICAgIG1vZGUgPSBJbmRleGVkTW9kZTsK
KyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9CisKKyAgICBj
YXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGU6IHsKKyAgICAgICAgd2hp
bGUgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpICYmICFiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpIHsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAg
ICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgICAgIGlmIChpbmRleCA8IGlu
ZGV4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybiBzaG91bGRBbGxvY2F0ZUluZGV4ZWRO
YW1lU3RyaW5nID8ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJp
bmcoKSkgOiBudWxscHRyOworCisgICAgICAgIGlmICghc2l6ZU9mUHJvcGVydHlOYW1lcygpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgbW9kZSA9IE5hbWVkTW9kZTsK
KyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9CisKKyAgICBj
YXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOgorICAgIGNhc2UgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTogeworICAgICAgICBKU1N0cmluZyogbmFt
ZSA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoaW5k
ZXggPj0gc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgICAgICAgICAg
aWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGluZGV4
IDwgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0g
Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lLT52YWx1ZShnbG9iYWxP
YmplY3QpKTsKKyAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAg
ICAgICBpZiAoYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaWQpKQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBuYW1lID0gbnVsbHB0cjsKKyAgICAgICAgICAg
IGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
KworICAgICAgICBpZiAoaW5kZXggPj0gZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYmIGlu
ZGV4IDwgc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgbW9kZSA9IEdlbmVyaWNN
b2RlOworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCmlu
ZGV4IDAyMDExZDQxYzdmNjZkYWQ4ODNhZThkNzcwYjVkM2QyODZjZDUwODcuLmEwMDliYjI5MDFi
NGFhMTcwZDczOGE1OTg2MGEwOWExNTZkMjA0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCisj
aW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM3LDYg
KzM3LDE3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8
IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKKyAgICBlbnVtIE1vZGUgOiB1aW50OF90IHsKKyAgICAg
ICAgSW5pdE1vZGUgPSAwLAorICAgICAgICBJbmRleGVkTW9kZSA9IDEgPDwgMCwKKyAgICAgICAg
TmFtZWRNb2RlID0gMSA8PCAxLAorICAgICAgICBHZW5lcmljTW9kZSA9IDEgPDwgMiwKKyAgICAg
ICAgLy8gUHJvZmlsaW5nIE9ubHkKKyAgICAgICAgSGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1p
c21hdGNoID0gMSA8PCAzLAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3Qg
ZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5lcmljTW9kZSA8PCAxKSAtIDE7CisKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMg
SXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CkBAIC03NCwxNiArODUsMjAg
QEAgcHVibGljOgogICAgIHVpbnQzMl90IGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsgfQogICAgIHVpbnQzMl90IGNhY2hl
ZElubGluZUNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsg
fQogICAgIHVpbnQzMl90IHNpemVPZlByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBlbmRH
ZW5lcmljUHJvcGVydHlJbmRleCgpOyB9CisgICAgdWludDMyX3QgbW9kZVNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZVNldDsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkU3RydWN0dXJl
SURPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLCBtX2NhY2hlZFN0cnVjdHVyZUlEKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhl
ZExlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IsIG1faW5kZXhlZExlbmd0aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGVuZFN0
cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpOyB9CiAg
ICAgc3RhdGljIHB0cmRpZmZfdCBlbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IsIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBt
b2RlU2V0T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciwgbV9tb2RlU2V0KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3Rvck9mZnNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAK
KyAgICBKU1N0cmluZyogY29tcHV0ZU5leHQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFz
ZSwgdWludDMyX3QmIGN1cnJlbnRJbmRleCwgTW9kZSYsIGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRl
eGVkTmFtZVN0cmluZyA9IHRydWUpOworCiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAog
cHJpdmF0ZToKQEAgLTkyLDEzICsxMDcsMTQgQEAgcHJpdmF0ZToKICAgICBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCwgdWludDMyX3QsIFdyaXRlQmFy
cmllcjxKU1N0cmluZz4qLCB1bnNpZ25lZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYs
IFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+JiYpOwogCi0gICAgQXV4aWxpYXJ5QmFycmll
cjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9wZXJ0eU5hbWVzOwotICAgIFdyaXRlQmFy
cmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVDaGFpbjsKICAgICBTdHJ1Y3R1cmVJRCBt
X2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIHVpbnQzMl90IG1faW5kZXhlZExlbmd0aDsKICAgICB1
aW50MzJfdCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXg7CiAgICAgdWludDMyX3QgbV9lbmRH
ZW5lcmljUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJfdCBtX2NhY2hlZElubGluZUNhcGFjaXR5
OworICAgIHVpbnQzMl90IG1fbW9kZVNldCB7IDAgfTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPFdy
aXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5TmFtZXM7CisgICAgV3JpdGVCYXJyaWVy
PFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWluOwogfTsKIAogdm9pZCBnZXRFbnVtZXJh
YmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1l
QXJyYXkmLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3Bl
cnR5Q291bnQpOwpAQCAtMTM0LDcgKzE1MCwxMCBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgog
ICAgICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzID0gMDsKICAgICB9CiAKLSAgICBlbnVt
ZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZUFm
dGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMsIGluZGV4ZWRMZW5ndGgsIG51bWJlclN0cnVjdHVyZVBy
b3BlcnRpZXMsIFdURk1vdmUocHJvcGVydHlOYW1lcykpOworICAgIGlmICghaW5kZXhlZExlbmd0
aCAmJiAhcHJvcGVydHlOYW1lcy5zaXplKCkpCisgICAgICAgIGVudW1lcmF0b3IgPSB2bS5lbXB0
eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKKyAgICBlbHNlCisgICAgICAgIGVudW1lcmF0b3Ig
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0
aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGll
cywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CiAgICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmIHN1
Y2Nlc3NmdWxseU5vcm1hbGl6ZWRDaGFpbiAmJiBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0
eU5hbWVzID09IHN0cnVjdHVyZSkgewogICAgICAgICBlbnVtZXJhdG9yLT5zZXRDYWNoZWRQcm90
b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihnbG9iYWxPYmplY3QsIGJh
c2UpKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKHZtKSkKQEAgLTE0Myw0ICsxNjIsNiBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAg
IHJldHVybiBlbnVtZXJhdG9yOwogfQogCit1c2luZyBFbnVtZXJhdG9yTWV0YWRhdGEgPSBzdGQ6
OnVuZGVybHlpbmdfdHlwZV90PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT47CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAKaW5k
ZXggY2RjZmE5OWQ0OWE2OTE3NDAxZDY4MzE2OGJhMTlhYmRlYmFlOWE0ZC4uYzdhOGUzMWY3ZTQ3
YmQ2OTExZmU0YWM0NWZkZjc3ZDY4Mzk2NDEwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6
emVyQWdlbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgU3BlY3VsYXRlZFR5cGUgUHJlZGljdGlvbkZpbGVD
cmVhdGluZ0Z1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwoQ29kZUJsb2MKICAgICBj
YXNlIG9wX2dldF9ieV9pZDoKICAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CiAgICAg
Y2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5h
bWU6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CiAgICAgY2FzZSBvcF9jb25z
dHJ1Y3Q6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGw6
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434446</attachid>
            <date>2021-07-28 12:16:57 -0700</date>
            <delta_ts>2021-07-28 12:28:24 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728151656.patch</filename>
            <type>text/plain</type>
            <size>369597</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjgyN2MwYjVlNmRhZTQ4
YWY5Njg3MTE1NmNjNGYyYzg5MjMzYTVmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQyNDQs
MjUgKzQyNDgsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKLSAgICAgICAgY2xvYmJlcldvcmxk
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eTogeworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTQyODEs
MjYgKzQyNjgsNTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKCk7Ci0gICAg
ICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorCiAg
ICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNT
YW5lQ2hhaW4oKSkKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEo
KSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKTsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUgfHwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkg
IT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworCisgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCAwKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVy
YXRvckdlbmVyaWNQbmFtZTogeworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZTogewogICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzog
ewotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVm
aW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKKyAgICAgICAgLy8gdmFsdWUgaW5mb3Jt
YXRpb24uCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCmluZGV4IDExMTFmODlmOWQ3YjViOTc3
NzhjMTZjOGQ1NDY0MGJlYTM3NDQyYjIuLmEwMjZhYWQxODkzYmYyM2M1NzE5NmZjYzZjOTFmYzIw
MDAzYzQ1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaApAQCAt
Mjg5LDYgKzI4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09
IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICB9CiAKKyAgICBib29sIGlzU2FuZUNo
YWluKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0luQm91bmRzU2FuZUNoYWluKCkg
fHwgaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpOworICAgIH0KKwogICAgIGJvb2wgaXNPdXRPZkJv
dW5kcygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgfHwgc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBkYjM3ZjRkZGRiZjgwY2Q2NmViNTc4N2Q3
YmFhMmJmNTNhZjg5MDc2Li45ZGJkMGI0N2Q5ZGZmNGNmNjAzOGFmNTAwMTc5MzQ4YmUwYWVhMjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTM5MCw3ICszOTAsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2Rl
TmVlZHNOZWdaZXJvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbDogewogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VG
bGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5v
ZGVCeXRlY29kZVVzZXNBc090aGVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVj
b2RlVXNlc0FzQXJyYXlJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGEyOTZjNGI4N2M4NTg4NjRmYmRlZGQ3NGVmNzI3ZTU0
ZDk1ZmQ2OTQuLjJjOTgzYmFjMzcwMGM4ZDI5NTcyMzFkYmRlZjJlYmYzNTBkMzBiN2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC04
Mzg3LDEwMyArODM4NywxMzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19wcml2YXRlX2JyYW5k
KTsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0aCwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KTsKKyAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cjogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUubV9iYXNl
KSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3Ip
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVByb3BlcnR5LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwg
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9o
YXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbnVt
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6
UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Cisg
ICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChieXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAg
ICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKTsKKyAgICAg
ICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNvZGUubV9tb2RlKTsKIAotICAgICAgICBjYXNl
IG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5Pigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc093blN0cnVj
dHVyZVByb3BlcnR5LAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBn
ZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAgICB9CisgICAgICAgICAgICBhdXRv
IHNlZW5Nb2RlcyA9IG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhOwogCi0gICAgICAgIGNh
c2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAg
ICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9w
ZXJ0eT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsK
LSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAg
ICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOwotICAgICAgICAg
ICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSk7
Ci0gICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBIYXNJbmRleGVkUHJvcGVydHkgbXVz
dCBiZSB0cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIHNpbmNlIEZpeHVwUGhh
c2UgbWF5IG1ha2UgaXQgZ2VuZXJpYy4KLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
aGFzSXRlcmFibGVQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGlu
ZGV4KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxs
cHRyKTsgLy8gc3RvcmFnZSBmb3IgSW5kZXhlZE1vZGUgb25seS4KKyAgICAgICAgICAgIE5vZGUq
IHVwZGF0ZWRJbmRleEFuZE1vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRv
ck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8oc2Vlbk1vZGVzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRNb2RlID0gYWRkVG9H
cmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCB1cGRhdGVkSW5kZXhBbmRNb2RlKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX21vZGUsIHVwZGF0ZWRNb2RlKTsKKworICAgICAgICAg
ICAgTm9kZSogdXBkYXRlZEluZGV4ID0gYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RJ
bmRleCwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9p
bmRleCwgdXBkYXRlZEluZGV4KTsKKworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fcHJvcGVy
dHlOYW1lLCBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB1cGRh
dGVkSW5kZXgsIHVwZGF0ZWRNb2RlLCBlbnVtZXJhdG9yKSk7CisKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudW1lcmF0b3JfbmV4dCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9w
X2dldF9kaXJlY3RfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7Ci0gICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6IHsKKyAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFy
cmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4
aXQoKTsKKwogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwot
ICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eU5hbWUgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgTm9kZSogaW5kZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7Cisg
ICAgICAgICAgICBOb2RlKiBtb2RlID0gZ2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAgICAgICAgICAg
ICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CiAKKyAgICAg
ICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gT3B0aW9uU2V0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6TW9kZT46OmZyb21SYXcobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgICAg
ICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9T
UkV4aXQpOworCisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYWRNb2RlID0g
YWRkVG9HcmFwaChBcml0aEJpdEFuZCwgbW9kZSwganNDb25zdGFudChqc051bWJlcihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBBcml0aEJp
dEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNvIGl0J3Mgb2sgdG8gZXhpdCBoZXJlLgorICAgICAg
ICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEV4
aXRPSyk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJ
bmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzTnVtYmVyKDApKSksIGJhZE1vZGUpOworCisgICAg
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5k
ZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxw
dHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXRC
eVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsK
KworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGVudW1lcmF0b3IpOworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVja2luZyBmb3IgYSBCYWRDb25zdGFudFZh
bHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNlIHRoZSBHZW5lcmljIHZhcmlhbnQgaWYgd2Ugc3dp
dGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJbmRleGVkTW9kZSArIE5hbWVkTW9kZSBldmVuIHRo
b3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAgICAgICAgICBpZiAoIXNlZW5Nb2Rlcy5jb250
YWluc0FueSh7IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoIH0pCisg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbW9kZVRlc3QgPSBhZGRUb0dyYXBoKFNhbWVWYWx1ZSwgbW9kZSwganNDb25zdGFu
dChqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlKSkpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25z
dGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzQm9vbGVhbihmYWxzZSkpKSwgbW9k
ZVRlc3QpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNl
IHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRC
eVZhbC4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJv
cGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0
byBtYXRjaCBHZXRCeVZhbC4KICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGlj
dGlvbikpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2Rl
OjpWYXJBcmcsIEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKIAotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X2RpcmVjdF9wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcjogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUu
bV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3IpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9pbl9ieV92YWw6
IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CiAK
LSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogewotICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLAotICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2luZGV4
KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUpOwotICAgICAgICB9CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKIAotICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvciksCi0gICAgICAg
ICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKLSAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3RyaW5nLCBnZXQoYnl0ZWNv
ZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmlu
Zyk7CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHk6IHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckhhc093blByb3BlcnR5PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwor
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Vu
dW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2dldF9pbnRlcm5hbF9maWVsZDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmNwcAppbmRleCBjYzBkMDE0ZGEyOTMxZmYzZWNkY2U5NDI5Y2MyNjI1NjFlMmY3Zjc2Li4w
NmQxOWQxNzM5NzMwM2Y3NDFiZTZiMDJiZjAxMDU3ZjcyMjU2NDgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBkYXRhTG9nKCIgICBGb3VuZCBtdXN0LWhhbmRsZSBibG9jazogIiwgKmJs
b2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgbWVyZ2VzIHNuYXBzaG90IG9m
IHN0YWNrIHZhbHVlcyB3aGlsZSBDRkEgcGhhc2Ugd2FudCB0byBoYXZlIHByb3ZlbiB0eXBlcyBh
bmQgdmFsdWVzLiBUaGlzIGlzIHNvbWV3aGF0IHRyaWNreS4KLSAgICAgICAgLy8gQnV0IHRoaXMg
aXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlkYXRlcyB0aGUgaW5wdXRzIHdpdGgg
KnByb3ZlbiogQWJzdHJhY1ZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMK
KyAgICAgICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlk
YXRlcyB0aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY3RWYWx1ZSB2YWx1ZXMuIEFuZCBp
dCB0dXJucyBvdXQgdGhhdCB0aGlzCiAgICAgICAgIC8vIHR5cGUgd2lkZW5pbmcgaXMgY3JpdGlj
YWwgdG8gbmF2aWVyLXN0b2tlcy4gV2l0aG91dCBpdCwgbmF2aWVyLXN0b2tlcyBoYXMgbW9yZSBz
dHJpY3QgY29uc3RyYWludCBvbiBPU1IgZW50cnkgYW5kCiAgICAgICAgIC8vIGZhaWxzIE9TUiBl
bnRyeSByZXBlYXRlZGx5LgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBjNzE2NGIzMGY0
NjRlYjBkNDM4MmUyY2NhNDJkNTY5OTY0ZDFiZjY3Li5hYzc4MmQ5OWI0NTNjNTA4MjYxYTdmM2E4
Nzk1NTg4MDBkMDA1Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCkBAIC0yNTQsMTcgKzI1NCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJ
CiAgICAgY2FzZSBvcF9oYXNfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX2dldF9zY29wZToK
ICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoOgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eToKLSAg
ICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHk6Ci0gICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBv
cF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6
Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKLSAgICBjYXNlIG9wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKLSAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAg
ICBjYXNlIG9wX25ld19mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jOgpAQCAtMjk5LDYgKzI4OSwxMCBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSQogICAgIGNhc2Ugb3Bfc2V0X3ByaXZhdGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9j
aGVja19wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX2VudW1lcmF0b3JfbmV4dDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOgorICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9oYXNfb3duX3Byb3BlcnR5OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
IAogICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAppbmRleCA5ZDEwMDRmZTUzZjNkNDQ3ZGYxMDNmYWNhMGQyZTEwZWM0ZmY1ZjQ2
Li41ZGQ2NTE0ZDFlMWFmY2E3YzM3YWMxOTg4YWFiMzIxNGI3ZmI2YWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheU9yRW1wdHk6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
R2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0
VmVjdG9yTGVuZ3RoOgpAQCAtMTY0LDcgKzE2OCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgogICAg
ICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5OgogICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0FuZDoKICAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgpAQCAtMzM3
LDIxICszNDAsODAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgd3JpdGUoTWF0
aERvdFJhbmRvbVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBHZXRFbnVtZXJh
YmxlTGVuZ3RoOiB7Ci0gICAgICAgIHJlYWQoSGVhcCk7Ci0gICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RJbmRleDogeworICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNhc2UgVG9JbmRleFN0cmluZzoKLSAgICBjYXNlIEdldEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsK
LSAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgcmVhZChOYW1lZFByb3BlcnRpZXMpOworICAg
ICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpICE9IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIGNsb2Ji
ZXJUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFycmF5
TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CisgICAgICAgICAgICB3cml0
ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0
aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywg
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwg
TGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
cmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNsb2JiZXJUb3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eTogeworICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJlYWQoSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KTsKICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewpAQCAtNzA1LDYgKzc2Nyw4IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNlIFRv
UHJvcGVydHlLZXk6CiAgICAgY2FzZSBJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAg
LTcxNiwxMiArNzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6
CiAgICAgY2FzZSBUb09iamVjdDoKLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0
cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNl
IEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgIGNh
c2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICBjYXNlIFRvTnVtYmVyOgogICAgIGNhc2UgVG9OdW1l
cmljOgpAQCAtOTA2LDYgKzk2NSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0
PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGZhciB0b28gY29uc2VydmF0aXZlIGZvciB0aGUgY2hpbGQxKCkudXNlS2luZCgpID09IElu
dDMyVXNlIGNhc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY2xv
YmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEdl
dEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZlYTkxZGYyMjRi
ZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1
M2MzN2UxOGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
MjA1LDcgKzIwNSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgogICAg
IGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hl
Y2tCYWRWYWx1ZToKQEAgLTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIEdldEJ5SWRX
aXRoVGhpczoKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CiAg
ICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhl
ZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAg
IGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6Ci0g
ICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJv
cGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSGFz
UHJpdmF0ZU5hbWU6CkBAIC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBUaHJvd1N0
YXRpY0Vycm9yOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNhc2UgR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1h
dGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3Jl
YXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5
NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li43ZjIxYWE0NGRiZGM2ODQ4YTViODU0ZTg3NDYwY2RmNTRl
Njc2MzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
QEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEw
NjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUo
KS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9T
UiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE5hbWVkTW9kZS4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV0Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlw
ZShBcnJheTo6R2VuZXJpYykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTEwOTYsNyArMTExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0
aGUgZnVsbC1ibG93bgogICAgICAgICAgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzIHNsb3cg
cGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBOZWdhdGl2ZUluZGV4KSkKQEAgLTExMTEsNyArMTEyNyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6SW5Cb3VuZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3Bl
Y3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0
IGNhcmUKQEAgLTExMjEsNyArMTEzNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBOZWdhdGl2ZUluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5l
Q2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTc4LDcgKzExOTQsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAorCisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3Qgc2V0IGEgbm9uLUpTVmFsdWUgcmVz
dWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgc2luY2Ugd2UgY291bGQgc3RpbGwgZG8gYSBOYW1l
ZE1vZGUgcHJvcGVydHkgYWNjZXNzLiBXZSBhbHNvIGRvbid0IGhhdmUgYSBnb29kIHdheSB0bwor
ICAgICAgICAgICAgLy8gcHJvdmUgdGhlcmUncyBubyBzdHJ1Y3R1cmUgcHJvcGVydGllcyBhdCB0
aGlzIHBvaW50LgorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5
VmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgc3dpdGNoIChhcnJheU1v
ZGUudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAg
ICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpCkBAIC0yMjc1LDI4ICsyMjk1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhF
ZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93
bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duU3RyaW5nVXNlPihub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewor
ICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKAogICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKQEAgLTIzMTUsMzYgKzIzMTQsNjQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsIEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAgICAgICBFZGdlJiBiYXNlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UmIHByb3BlcnR5
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIEVkZ2UmIGluZGV4
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgIEVkZ2UmIGVudW1l
cmF0b3IgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihiYXNlKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihwcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihpbmRleCk7Ci0gICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKICAgICAg
ICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBu
YW1lOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAg
IEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAg
RWRnZSYgaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAg
RWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFk
YXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkt
PnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSktPnByZWRpY3Rpb24oKSkpOworCisgICAgICAgICAgICAgICAgZml4RWRnZTxD
ZWxsVXNlPihiYXNlKTsKKyAgICAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGJhc2Us
IGluZGV4LCBzdG9yYWdlRWRnZSk7CisKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlN
b2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5i
ZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHNldFNhbmVD
aGFpbklmUG9zc2libGUobm9kZSwgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzID8gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91bmRzU2Fu
ZUNoYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmICFt
X2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUpKQorICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMy
VXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVj
dGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0Lgog
ICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5l
ZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKQEAgLTM2
OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAorICAgIHZvaWQg
c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9uOworICAgICAg
ICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKSB7CisgICAg
ICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsgb24gYSBwZXIt
dHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEp
IFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJuIHVuZGVmaW5l
ZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNoYW5nZSB0byB0
aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAgICAgLy8gdGhp
bmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBhY3R1YWxseSBo
YWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9tIGEgaG9s
ZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2VseSB0aGUgYmVz
dCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQgb2YKKyAgICAg
ICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5vdyB3ZSBq
dXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5hTiBhcmUgaW5k
aXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiwgYW5kIGp1
c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0IGNhc2UuIFRo
aXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRvIGhhdmUgdG8g
ZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0byBVbmRlZmlu
ZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3YW50IHRvCisg
ICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMyLiBGSVhN
RTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAvLyBiYXNlZD8K
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGljYXRpb25z
LiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAgICAgICAgICAg
IC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNo
ZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9s
ZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAgICAgIC8vIG91
dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKKworICAg
ICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5z
cGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0
ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAg
ICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5h
dHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHJldHVybmVk
IGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0aWxsIGRv
CisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVpcmUgdGFr
aW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgp
ICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9n
cmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJv
dW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3Vs
YXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFp
blNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAg
ICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vz
bid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAv
LyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRC
aXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYg
IW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4
KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0
T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAgICAgICBzZXRT
YW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7CisgICAgfQor
CiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFycmF5OjpTcGVj
dWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2MzI1YzVk
NGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQxOTJkMTc1MmQ0
NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAt
Mzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
Y2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRT
dGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygp
KTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRp
bWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQwZWY0MDMzMGMy
MzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4OTIyMTUxZTQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9w
dGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVOb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgu
CiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0UmVsYXRpb25z
aGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAgICAgICAgICAg
c2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4NmQzOTNmZDg3
YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2
NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTEx
LDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyU2V0
UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToK
KyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBicmVhazsKIAor
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBTdHJD
YXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2ZDBhNDM4ZTVl
ZDgxLi40NzA2NTZiZWY4NTg4NTk5NTExMjI2OGY5ZGE5MGJmYzBhMTEyYjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkRlbGV0
ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRl
ICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAgICAgICBjYXNl
IEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdl
dEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKICAgICAgICAg
Y2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAg
ICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFz
U3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAg
ICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0Ogor
ICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JH
ZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAg
ICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NF
eGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNz
T3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6
CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAg
ICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAg
IGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIHN0b3Jh
Z2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdlQ2hpbGQoKSk7
CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAg
ICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2lu
dEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRC
eVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgorICAgICAgICBj
YXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKKyAg
ICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0xvYWQ6Cisg
ICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToKKyAgICAg
ICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6CisgICAgICAgICAg
ICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBBcnJheVBvcDoK
KyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAyOworCisg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0dXJuIDI7CisK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
ICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3MgdG8gZGV0ZXJt
aW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiArMjI4MiwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgpAQCAtMjIx
Niw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICBj
YXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgY2FzZSBBdG9t
aWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0Nv
bXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJl
NTY1NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdl
bmVyYXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAg
ICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVy
ZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBt
YWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRv
SW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFw
IGFuZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3
ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLjViOTk5MGNjZjI3NTVlYjcxOGIxOTk4YmYyYzMxNDVkMTM1
MzNmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNl
KTsKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFt
ZSkpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxP
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAg
ICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1v
ZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1l
U3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9i
amVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpO
dW1iZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5k
ZXgpOworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBt
b2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3It
PnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVu
dW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVW
YWx1ZSwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51
bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5n
ZXRPYmplY3QoKS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpT
U3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFs
KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwg
aW50MzJfdCBtb2RlTnVtYmVyKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5z
dHJpbmcoKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFz
T3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9w
ZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHBy
b3BlcnR5TmFtZVZhbHVlKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50
b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2Us
IGlkZW50aWZpZXIpKSkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
TmV3UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogcmVnZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFm
ZWRlNTk1ZDBmYjhmYTgzNWVmNzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQx
M2JmMTg4MGNlNzYzNGVlMzEzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5z
dGFuY2U7CiBjbGFzcyBKU0JpZ0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsK
K2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTEwNCwxMiArMTA1LDE0IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvdG90eXBlT2YsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqLCBpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25I
YXNFbnVtZXJhYmxlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEpTU3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25JblN0cnVjdHVyZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiwgSlNTdHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBK
U0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQz
Ml90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dWludDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikp
OworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0
SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwg
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3Ry
dWN0dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3
ZTMwNmJhYjg1MzdjMGU4OWUyZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1
ZTM3NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsK
ICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAg
ICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hp
bGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51
bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxl
SW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAg
ICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNh
c2UgUmVnRXhwRXhlYzoKQEAgLTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEdldFByaXZhdGVOYW1lOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAg
ICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgog
ICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1l
cmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBJbkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBI
YXNQcml2YXRlTmFtZToKICAgICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNh
c2UgSGFzT3duUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0g
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZTogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7
CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAg
ICAgICAgICAgLy8gVGhpcyBjYW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJh
bmNoIG9mIHRoYXQgY2FzZSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50
IHRvIG1lc3Mgd2l0aAorICAgICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAg
IHNldFByZWRpY3Rpb24oU3BlY0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQ
cm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZh
bHVlIHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3Ry
aW5nLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDog
ewogICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHBy
b2R1Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0
IHByb2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBj
OTYzN2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJi
ZWFiMDJhZDBjNTEzZGRiNDljYTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91
bmRzQ2hlY2sobV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwg
MSksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewog
ICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJk
MGI5YjQ2MGUyYzUwLi4xZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2
LDEwICsyOTYsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRl
LCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRv
TnVtYmVyOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5
OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWU6Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJv
b2wgaWdubwogICAgICAgICAvLyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBp
biBjb250cm9sIGZsb3cgaGVyZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoK
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxl
bmd0aDoKQEAgLTQ5Niw2ICs0OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAg
ICAgcmV0dXJuIGlzU2FmZTsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOgorICAgIC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0
cyBidXQgdGhleSdsbCBvbmx5IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUgc28gd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNl
IFRvVGhpczoKICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpA
QCAtNTk1LDYgKzU5Nyw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNh
c2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAg
ICBjYXNlIEhhc093blByb3BlcnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgogICAgIGNhc2UgTXVsdGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1
MThhNjA4NzEzNDJkNjQ0ZWQ5NzhiMWU1YjguLjE0ODcyMjJhYzUzMDZlMzk3ZWUyZDYzNGUzNjVm
NTZiYjdhMjBhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1Zh
bHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQp
Ci0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0
LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVS
ZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBS
ZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1f
cGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNl
bmRpZgogewotICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1f
cGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAg
bV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3Bh
eWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAg
LTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29k
ZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJy
ZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3Ry
aW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVn
cywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAw
KSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFs
aWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0
VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6
IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVy
IG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6
Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRh
Rm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsy
NjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1
Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFBy
b3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdl
bmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdz
KHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKLSAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAg
ICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5n
SW50LAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwot
I2Vsc2UKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChz
Y3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0g
ZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9k
ZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2Rl
KE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5
UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9h
ZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBp
ZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBp
c1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChz
aG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
bk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0
LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6
OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlz
VUludDMyKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBl
KSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3Vs
YXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBz
dHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9k
ZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAg
QVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUs
IFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAg
ICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7
CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1p
dFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAg
bG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcs
IHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNh
blNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwg
cmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2Fk
UmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
IH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgK
QEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1
bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBU
eXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwog
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJl
c3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcs
IHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5
VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAK
LSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERh
dGFGb3JtYXRKUykgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcw
Myw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0
aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmlu
ZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJS
ZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0
SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCks
IGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9i
amVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFH
UFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIg
PSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQz
MlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3Qg
U2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3Jt
YXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgw
ODIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1
bWVudHMoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgLy8gVE9ETzogQXJlIGJvdGggb2YgdGhlc2UgbmVj
ZXNzYXJ5Pz8KICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0g
c2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsK
ICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKKworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKQEAgLTEzNDQyLDQ0
ICsxMzQ0NywzMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRocm93U3RhdGljRXJy
b3IoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKiBu
b2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGVudW1lcmF0
b3IpOworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworCisg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIG1vZGVHUFIgPSBt
b2RlLmdwcigpOwogICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsK
KworICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgUmV1c2UsIGlu
ZGV4KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBpbmNyZW1lbnRMb29wOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lOworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geworCisgICAgICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGluaXRNb2RlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBt
b2RlR1BSKTsKKworICAgICAgICAgICAgaW5jcmVtZW50TG9vcCA9IG1faml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2guZ3ByKCkpOwor
CisgICAgICAgICAgICBpbml0TW9kZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25lID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaC5ncHIo
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzY3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Cisg
ICAgICAgIH0pKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkubGlua1RvKGluY3JlbWVudExvb3AsICZtX2pp
dCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkg
PDwgMzIpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0Lm9yNjQoc2Ny
YXRjaC5ncHIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChu
b2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5h
bWVkTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwor
CisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGVudW1lcmF0b3IuCisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgp
LCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAg
ICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBtX2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBi
YXNlUmVncyA9IGJhc2UucmVncygpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BS
KTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleChOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVwZGF0
ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVncyA9
IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYWly
UmVncy5wYXlsb2FkR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIG1faml0LmFuZDMy
KFRydXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXls
b2FkR1BSLCByZXN1bHRHUFIpOworCiAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9w
ZXJ0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBh
aXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGFpckdQUiA9IGlzNjRCaXQoKSA/IHBhaXJS
ZWdzLnBheWxvYWRHUFIoKSA6IHBhaXJSZWdzLnRhZ0dQUigpOwogCi0gICAgSlNWYWx1ZVJlZ3Mg
YmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBt
X2ppdC5yc2hpZnQ2NChwYWlyR1BSLCBUcnVzdGVkSW1tMzIoMzIpLCByZXN1bHRHUFIpOworI2Vs
c2UKKyAgICBtX2ppdC5tb3ZlKHBhaXJHUFIsIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICBtX2pp
dC5hbmQzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlv
bk1vZGVNYXNrKSwgcmVzdWx0R1BSKTsKKworICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBpbmRleE9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvck9wZXJhbmQodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworCisgICAgR1BSUmVnIGluZGV4ID0gaW5kZXhPcGVyYW5kLmdwcigpOworICAg
IEdQUlJlZyBtb2RlID0gbW9kZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIGVudW1lcmF0b3Ig
PSBlbnVtZXJhdG9yT3BlcmFuZC5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
SlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVncywgcHJvcGVydHlHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcik7CiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgbm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9k
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSog
bm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmVTbG93UGF0aDsKKworICAgICAg
ICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQpIHsKKyAgICAgICAg
ICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdl
RWRnZSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLmVtcGxhY2UodGhpcywgc3RvcmFnZUVkZ2Up
OworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgNSkpOworCisgICAgICAgICAgICBHUFJSZWcgbW9kZUdQUiA9IG1v
ZGUuZ3ByKCk7CisgICAgICAgICAgICBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgcmVzdWx0UmVncyA9
IHJlc3VsdC5yZWdzKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpOworCisgICAgICAgICAgICBib29sIGhhdmVTdG9yYWdlID0gISFzdG9y
YWdlRWRnZTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlVGVtcG9yYXJ5OworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdl
KSB7CisgICAgICAgICAgICAgICAgc3RvcmFnZVRlbXBvcmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlz
LCBSZXVzZSwgZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2VUZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG5vdEZhc3ROYW1lZENhc2VzOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGdlbmVyYXRlIHRoaXMgY29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGFuIG9i
amVjdC4KKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIGJhc2UgaXMgYSBjZWxsIGhlcmUgc2luY2Ug
d2Ugd29uJ3QgZ2VuZXJhdGUgTmFtZWRNb2RlIHByb3BlcnRpZXMgZm9yIG5vbi1vYmplY3RzLgor
ICAgICAgICAgICAgICAgIC8vIFRPRE86IHB1dCBBc3NlcnQgaGVyZT8KKworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYg
d2Uga25vdyB0aGVyZSdzIG9ubHkgb25lIHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBl
bWJlZCBpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisKKyAgICAgICAgICAgICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNo
b3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byByZXByZXNlbnQgSW5kZXhlZCtOYW1lZD8KKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCkgPT0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAzKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGJh
ZFN0cnVjdHVyZVNsb3dQYXRoID0gYmFkU3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKGJhZFN0cnVjdHVy
ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgICAg
ICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5s
aW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworCisgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUNlbGxHUFIs
IGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
aXQncyBvdXQgb2YgbGluZQorICAgICAgICAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIoc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlQ2VsbEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgfSkpOworCisgICAgICAgIC8vIFdlIHJlbHkgb24gY29tcGlsZUdldEJ5VmFsIHRv
IGNhbGwganNWYWx1ZVJlc3VsdCBmb3IgdXMuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGtp
bmRhIGhhY2t5Li4uCisgICAgICAgIEFTU0VSVChnZW5lcmF0aW9uSW5mbyhub2RlKS5qc1ZhbHVl
UmVncygpID09IHJlc3VsdFJlZ3MgJiYgZ2VuZXJhdGlvbkluZm8obm9kZSkucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0SlMpOworCisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93UGF0
aC5pc1NldCgpKQorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KGJhZFN0cnVjdHVyZVNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5h
bWVBbmRHZXRCeVZhbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VDZWxsR1BSLCBpbmRleEdQUiwgZW51bWVyYXRvckdQUikpOworCisgICAgICAgIGRvbmVDYXNl
cy5saW5rKCZtX2ppdCk7CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2lu
ZCgpKSkgeworICAgICAgICAvLyBVc2UgbWFudWFsIG9wZXJhbmQgc3BlY3VsYXRpb24gc2luY2Ug
Rml4dXAgbWF5IGhhdmUgcGlja2VkIGEgVXNlS2luZCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gQ2Vs
bFVzZS4KKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZU9wZXJhbmQodGhpcywgYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRn
ZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShOb2RlKiBub2RlLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9uKQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIp
IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMykpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOwogCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJp
bmcsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKLSAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlOYW1lUmVncyA9IHByb3BlcnR5TmFtZS5y
ZWdzKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBH
UFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvci5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKwor
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlKS5tX3R5cGUgJiB+U3BlY0NlbGwp
CisgICAgICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxs
KGJhc2UpKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRoaXMg
Y29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGEgY2VsbC4KKyAgICAgICAgb3BlcmF0aW9uQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQ
UiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOwor
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOworCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsoJm1faml0KTsKKworICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigp
KTsKKyAgICAgICAgYXV0byBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKGJhc2VDZWxsR1BSLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyNlbHNlCisgICAgICAgIGF1dG8gYmFzZVJlZ3MgPSBiYXNlOwor
I2VuZGlmCisgICAgICAgIGNhbGxPcGVyYXRpb24oc2xvd1BhdGhGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eU5hbWVSZWdz
LCBpbmRleEdQUiwgbW9kZUdQUik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgYmxlc3NlZEJvb2xlYW5SZXN1
bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOworICAgIH07CisKKyAgICBpZiAoaXND
ZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UuZ3ByKCksIGJhc2Uu
Z3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
YmFzZUVkZ2UpOworICAgICAgICBnZW5lcmF0ZShiYXNlLnJlZ3MoKSwgYmFzZS5yZWdzKCkucGF5
bG9hZEdQUigpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9ySW5CeVZhbChOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJv
cGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqIG5vZGUpCit7
CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJh
dG9ySGFzT3duUHJvcGVydHkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlJZEZsdXNoKE5vZGUqIG5vZGUpCkBAIC0xMzYyMiw2NyArMTM5MDEsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKICAgICBibGVzc2Vk
Qm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2RlKQotewotICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQot
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdTdHJ1Y3R1cmU7Ci0KLSAgICB3cm9uZ1N0
cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdzKSk7Ci0KLSAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZ3MucGF5bG9hZEdQUigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIG1vdmVUcnVlVG8o
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJv
cGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywg
cHJvcGVydHlHUFIpKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSwgbm9kZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoTm9kZSog
bm9kZSwgRnVuY3Rpb24gc2xvd1BhdGgpCi17Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdT
dHJ1Y3R1cmU7Ci0KLSAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOwotICAgIHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigpLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICBtb3ZlVHJ1
ZVRvKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgc2xvd1BhdGgsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOwotICAg
IGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKLX0K
LQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KE5v
ZGUqIG5vZGUpCi17Ci0gICAgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2Rl
LCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgY29t
cGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2RlLCBvcGVyYXRpb25JblN0cnVjdHVy
ZVByb3BlcnR5KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5
RW51bWVyYXRvcihOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgewpAQCAtMTM3MDksMzkgKzEzOTI3LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKiBub2RlKQogICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEVudW1lcmF0b3JQbmFtZShOb2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSB8fCBub2RlLT5vcCgpID09IEdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3Io
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVn
IGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBpbmRleEdQUiwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgKG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKQotICAgICAg
ICAgICAgPyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXhPZmZzZXQoKQotICAgICAgICAgICAgOiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1faml0Lm1vdmVWYWx1ZShqc051
bGwoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwotICAgIGluQm91bmRzLmxpbmsoJm1faml0KTsKLQotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7Ci0jZW5kaWYKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRF
eGVjdXRhYmxlKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rp
b24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTQ5MzQsMjggKzE1MTE5LDI4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2Rl
LCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9u
X0dDWiBzbG93UGF0aE9wZXJhdGlvbiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BS
UmVnLCBHUFJSZWc+KCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CiAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIEFycmF5TW9kZSBtb2RlID0g
bm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgIGNhc2Ug
QXJyYXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgQVNT
RVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAg
IEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5k
ZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
IAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwog
CiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE0OTgzLDEyICsxNTE2OCwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5v
ZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BS
LCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5k
cygpKQpAQCAtMTUwMTIsMTMgKzE1MTk5LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFn
ZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZp
eCgpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgb3V0T2ZC
b3VuZHMpOwpAQCAtMTUwNDcsNzMgKzE1MjM2LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNs
CiAgICAgZGVmYXVsdDogewogICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgVHlwZWRBcnJheXMg
aW4gSGFzSW5kZXhlZFByb3BlcnR5IElDCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJl
c3VsdEdQUikgPSBwcmVmaXgoKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgc2xvd1BhdGhPcGVyYXRpb24sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGluZGV4R1BSKSk7
Ci0KLSAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci19Ci0KLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREaXJlY3RQbmFtZShOb2RlKiBub2RlKQotewot
ICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsK
LSAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDEpOwotICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMik7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsK
LSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwot
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eS5ncHIoKTsKLQotICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgaW5kZXgodGhpcywgaW5kZXhFZGdlKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVt
ZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBHUFJS
ZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVu
dW1lcmF0b3IuZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBzbG93UGF0aC5hcHBl
bmQoCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldAotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAotICAgICAgICBpbmRleEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0KLSAgICBtX2ppdC5sb2FkVmFs
dWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdFJlZ3MpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKLQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKLSAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKLSAgICBt
X2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKLSAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zaWduRXh0ZW5k
MzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIG1faml0Lmxv
YWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsoJm1faml0KTsKLQotICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHlHUFIpKSk7Ci0KLSAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA5OGM3NjE2YjhmZDJmYmY1YzRkZDhh
NTc3MTUwOGFkMjY3OWY5OWQxLi5kMTIwYjdiNGZiODQ0MzY5ZDcyY2Q2MDE4MWJjMDhjMGI2Yzkx
N2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CkBAIC00Nyw2ICs0Nyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNs
YXNzIEdQUlRlbXBvcmFyeTsKK2NsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OwogY2xhc3MgSlNW
YWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZl
SklUOwpAQCAtMjQ2LDYgKzI0Nyw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgR1BSUmVnIGFsbG9j
YXRlKEdQUlJlZyBzcGVjaWZpYykKICAgICB7CisgICAgICAgIGlmIChzcGVjaWZpYyA9PSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdGUoKTsKICNpZiBFTkFCTEUoREZHX1JFR0lT
VEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxv
Y2F0aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKQEAgLTEzNDUsMTIg
KzEzNDgsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQ
dXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICB9CiAgICAgCisgICAg
Ly8gV2UgdXNlIGEgc2NvcGVkTGFtYmRhIHRvIHBsYWNhdGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2
YWxpZGF0aW9uLgorICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKE5vZGUqLCBjb25zdCBTY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKwogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQo
Tm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1h
dCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZUZyb21DaGFyQ29kZShOb2RlKik7IAogCi0g
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7Ci0gICAgdm9p
ZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9y
bWF0KT4mIHByZWZpeCk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFG
b3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAKICAgICB2b2lk
IGNvbXBpbGVHZXRQcml2YXRlTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJpdmF0
ZU5hbWVCeUlkKE5vZGUqKTsKQEAgLTE0MjQsMTIgKzE0MzAsMTIgQEAgcHVibGljOgogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGp1bXBGb3JUeXBlZEFycmF5SXNEZXRhY2hlZElmT3V0T2ZCb3VuZHMo
Tm9kZSosIEdQUlJlZyBiYXNlR1BSLCBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyk7CiAg
ICAgdm9pZCBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKE5vZGUqLCBHUFJSZWcgYmFzZUdQUiwg
R1BSUmVnIGluZGV4R1BSKTsKICAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNl
dChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSos
IFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpT
VmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVm
aXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5
VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0
eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTdHJpbmcoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN5bWJvbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3RyaW5nKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSosIGNvbnN0IFNjb3Bl
ZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHBy
ZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2Vs
bFdpdGhTdHJpbmcoTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGls
ZDMpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSosIEVk
Z2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsV2l0aFRoaXMoTm9kZSopOwpAQCAtMTQ1OCw3ICsxNDY0LDcgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgICAgIEVkZ2UgdmFsdWVVc2UpOwogICAgIHZvaWQgbG9hZEZyb21JbnRUeXBl
ZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyByZXN1
bHRSZWcsIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIHNldEludFR5cGVkQXJyYXlMb2FkUmVz
dWx0KE5vZGUqLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSwgYm9vbCBjYW5TcGVj
dWxhdGUpOworICAgIHZvaWQgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSwgYm9v
bCBzaG91bGRCb3gpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgY29t
cGlsZU5ld0Z1bmN0aW9uQ29tbW9uKEdQUlJlZywgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgR1BSUmVn
LCBHUFJSZWcsIEdQUlJlZywgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Jiwgc2l6ZV90LCBGdW5j
dGlvbkV4ZWN1dGFibGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKQEAgLTE1MjQsMjEgKzE1MzAs
MjIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRvTG93ZXJDYXNlKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVUaHJvdyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVGhyb3dTdGF0aWNFcnJv
cihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChOb2RlKik7Ci0g
ICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKLSAg
ICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZVRvSW5kZXhTdHJpbmcoTm9kZSopOworCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5v
ZGUqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoTm9kZSosIFNsb3dQYXRoRnVuY3Rpb25U
eXBlKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqKTsKKwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
UHV0QnlJZFdpdGhUaGlzKE5vZGUqKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKE5vZGUqLCBGdW5j
dGlvbik7Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwot
ICAgIHZvaWQgY29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZUdldERpcmVjdFBuYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVu
dW1lcmF0b3IoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0RXhlY3V0YWJsZShOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlR2V0R2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRTZXR0ZXIoTm9kZSopOwpA
QCAtMTU2OCw3ICsxNTc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUNhbGxOdW1iZXJD
b25zdHJ1Y3RvcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbChOb2RlKik7
Ci0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlv
bl9HQ1opOworICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiwgU19KSVRP
cGVyYXRpb25fR0NaLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJl
Zz4oKT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUNsZWFyQ2F0Y2hMb2NhbHMoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZVByb2ZpbGVUeXBlKE5vZGUqKTsKQEAgLTE5MjYsNiArMTkzMyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCisgICAgSlNWYWx1ZVJlZ3MgcmVn
cygpIHsgcmV0dXJuIGpzVmFsdWVSZWdzKCk7IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
R1BSUmVnIGdwcigpCiAgICAgewpAQCAtMTk2NSw3ICsxOTc0LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIoKSk7CiAgICAgfQogCi0g
ICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCkKKyAgICBHUFJSZWcgZ3ByKFdoaWNo
VmFsdWVXb3JkIHdoaWNoID0gUGF5bG9hZFdvcmQpCiAgICAgewogICAgICAgICByZXR1cm4ganNW
YWx1ZVJlZ3MoKS5ncHIod2hpY2gpOwogICAgIH0KQEAgLTIwMDMsMjEgKzIwMTIsMjAgQEAgcHJp
dmF0ZToKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKKyAgICBTdG9yYWdlT3BlcmFuZCgpID0gZGVmYXVsdDsKKwogICAgIGV4cGxp
Y2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKICAgICAg
ICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJP
ckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdCk7Ci0g
ICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2lu
ZCgpID09IEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkp
Ci0gICAgICAgICAgICBncHIoKTsKKyAgICAgICAgZW1wbGFjZShqaXQsIGVkZ2UpOwogICAgIH0K
ICAgICAKICAgICB+U3RvcmFnZU9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3By
T3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3By
T3JJbnZhbGlkKTsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAg
CiAgICAgRWRnZSBlZGdlKCkgY29uc3QKQEAgLTIwMzYsNiArMjA0NCwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShlZGdlKCkpOwog
ICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQorCisgICAgdm9pZCBlbXBsYWNl
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1faml0ID0g
aml0OworICAgICAgICBtX2VkZ2UgPSBlZGdlOworICAgICAgICBBU1NFUlQobV9ncHJPckludmFs
aWQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VSVChtX2ppdCk7CisgICAgICAgIEFT
U0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtu
b3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCisgICAgICAg
ICAgICBncHIoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKQEAgLTIwNDMs
OSArMjA2Miw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNwZWN1bGF0
aXZlSklUKiBtX2ppdDsKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQgeyBudWxscHRyIH07CiAg
ICAgRWRnZSBtX2VkZ2U7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOworICAgIEdQUlJlZyBt
X2dwck9ySW52YWxpZCB7IEludmFsaWRHUFJSZWcgfTsKIH07CiAKIApAQCAtMjEzNCwxMSArMjE1
MywxOSBAQCBjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB7CiBwdWJsaWM6CiAgICAgSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJ
VCopOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNw
ZWNpZmljUGF5bG9hZCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZpY1BheWxvYWQsIEdQUlJlZyBz
cGVjaWZpY1RhZyk7CisjZW5kaWYKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdo
aWNoVmFsdWVXb3JkIHJlc3VsdFJlZ1dvcmQgPSBQYXlsb2FkV29yZCk7CiAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgSlNWYWx1ZU9wZXJhbmQmKTsK
ICAgICB+SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgeyByZXR1cm4gISFyZWdzKCk7IH0KKworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
JiBvcGVyYXRvcj0oSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmJikgPSBkZWZhdWx0OworCiAgICAgSlNW
YWx1ZVJlZ3MgcmVncygpOwogCiBwcml2YXRlOgpAQCAtMjE1MCw2ICsyMTc3LDI2IEBAIHByaXZh
dGU6CiAjZW5kaWYKIH07CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2
ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCisgICAgOiBt
X2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQoreworfQorI2Vsc2UKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRp
dmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdoaWNoVmFsdWVXb3JkIHJlc3VsdFdv
cmQpCit7CisgICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQpIHsKKyAgICAgICAgbV9w
YXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgICAgICBt
X3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGF5
bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBv
cmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKKyAgICB9Cit9CisjZW5kaWYKKwogY2xhc3MgRlBS
VGVtcG9yYXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CmluZGV4IDlkNDAzNjk2MTBkODllNDFlNTE2ZjZjNGE0MjVlNWZkNzEwMmExYmUuLmFiYzhkMThh
YTM5NzY0YTJmOWMwYzA3NDFjZmQxZTlhNThkZGM0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgxMiw2ICsx
ODEyLDMzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFs
KE5vZGUqIG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZQogICAgIG5vUmVzdWx0KG5vZGUsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7ICAgIAogfQogCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVw
bGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4m
IHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2lmIENPTVBJ
TEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQorICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDAp
OworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogewor
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0
aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5k
ZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRC
eVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhu
b2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51
c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJs
eSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJv
cGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZp
eChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MpOworICAgICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1Zh
bHVlUmVncygpOworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5q
c1ZhbHVlUmVncygpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAg
IHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMp
OworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
YzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRl
QW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBt
X3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRo
aXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCBy
ZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKKworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlz
VHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJh
dG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VSZWdzLCBwcm9wZXJ0
eVJlZ3MpOworCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkp
OworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKKyAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZv
cm1hdEludDMyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzU2FuZUNoYWluKCkpOworCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsCisg
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCks
CisgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxv
YWRPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BS
KCksIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MudGFn
R1BSKCkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisg
ICAgICAgICAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJl
c3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omln
bm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVt
cHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgo
RGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOworICAgICAgICAgICAg
aWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUo
cmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYgIXJlc3VsdFJlZ3MpOworICAg
ICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBG
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZw
cigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgIGJveERvdWJsZSh0ZW1wUmVn
LCByZXN1bHRSZWdzKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7
CisKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRSZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVm
aXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0
LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChob2xlKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RB
cmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6
U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiB7CisgICAgICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4
KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKQEAgLTIyMzMsNyArMjU2MiwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIFN0
cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24gU3RyaW5nQ2hhckF0IG5vZGUgaGF2
aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0gICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7Cisg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+
KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJl
ZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTIyNjUsMzI2ICsyNTk5LDI3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZv
cmNlRXhpdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jaWYg
Q09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCi0gICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVS
ZWdzKCksIDApOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBpbmRleCk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLQotICAgICAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0g
cmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSBy
ZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7Ci0KLSAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0
QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVj
dFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwg
c3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgotICAgICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVn
cygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGws
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0
eVJlZ3MpOwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkganNWYWx1ZVJlc3VsdDsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IG9uZVJlZ1Jlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2gg
KHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMs
IFJldXNlLCBwcm9wZXJ0eSwgVGFnV29yZCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFBheWxvYWRXb3JkKTsKLQotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZXN1bHRUYWcuZ3ByKCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICgh
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVj
Q2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKLSAgICAgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnKTsKLQotICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCi0gICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUu
Zm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkp
Ci0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQot
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1Bh
dGguZ2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93
UGF0aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1Nh
bmVDaGFpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAot
ICAgICAgICAgICAgICAgICAgICByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0VGFn
LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBh
eWxvYWQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdFRhZ1JlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0g
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9h
ZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywg
cmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCAwLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHQuZnByKCkpKTsKLSAgICAgICAgICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAg
ICAgICAgICAgICBvbmVSZWdSZXN1bHQgPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShvbmVSZWdSZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1Jl
ZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVn
ID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVt
cC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgIGJv
eERvdWJsZSh0ZW1wUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpOwotCi0gICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1Jl
ZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMp
OwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJl
c3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCks
IHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgZGVmYXVsdDogeworICAg
ICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7
CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IGpzVmFsdWVSZXN1bHQucmVncygpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwotCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRo
aXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcp
OwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaElmRW1w
dHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGhvbGUpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0g
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwot
ICAgICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgCkBAIC00MTEyLDUxICs0MTQ3LDU1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJh
YmxlTGVuZ3RoKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJv
cGVydHkobm9kZSk7CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRl
eCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVn
PigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIo
KSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisK
KyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJv
cGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5
KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
b21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJv
cGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Io
bm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
SW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCmluZGV4IGI1ZTFjYzNlNDJkMmZiNGM5ZDRmMTMxMDdlOThlZmUwYjIwNWU1YzcuLjEw
NzcxMzE3MTRkYThhNDU1M2JiY2I1ZDhlNDZiZDMzOGI2ZjRhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjI0Niw2ICsy
MjQ2LDM3MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiAg
ICAgfQogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9k
ZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+
KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkFueVR5cGVkQXJyYXk6
CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5n
QXJndW1lbnRzOgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAg
Y2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlJl
ZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChE
YXRhRm9ybWF0SlMpOworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpT
VmFsdWVSZWdzKCksIG5vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KSk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0UmVncy5ncHIoKSk7CisKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CisgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJy
YXk6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Ns
b3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdV
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0
cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdw
cigpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87Cisg
ICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc3R1Yklu
Zm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBzdHViSW5mb0dQUiA9IHN0dWJJ
bmZvLmdwcigpOworICAgICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigpOwor
CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsK
KyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5k
R2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0
cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMt
PnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdK
SVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lz
dGVycywKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3Ry
aW5nID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICht
X3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNT
eW1ib2wpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQorICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CisgICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aElDQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5m
bygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBz
dHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAg
ICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0
ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgbV9qaXQuYWRk
R2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpJbnQzMjoK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisg
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9y
bWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0g
cmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAg
ICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpD
b250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0g
bV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHQpOworICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAg
ICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LCBub2RlLCBmb3JtYXQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgo
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3By
KCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKKworICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAg
ICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZyk7CisgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7CisgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgIH0KKworCisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
CisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAg
ICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91Ymxl
KTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9h
ZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0
ciwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0UmVnKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0
ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHRSZWcs
IHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChmb3Jt
YXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKKworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwor
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIERhdGFGb3JtYXQgZm9y
bWF0OworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KHJlc3Vs
dElzVW5ib3hlZCA/IERhdGFGb3JtYXREb3VibGUgOiBEYXRhRm9ybWF0SlMpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdCA9
PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQu
anVtcCgpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5
UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgTmFOID0gUE5hTjsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJk5hTiksIHRlbXBSZWcpOworICAgICAgICAgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHRlbXBSZWcsIG5vZGUpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
TmFOKHRlbXBSZWcpKTsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0
UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgYm94RG91Ymxl
KHRlbXBSZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRSZWdzLmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncy5ncHIoKSwgbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworCisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKKworICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAor
ICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgor
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25TY29wZWRBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6IHsKKyAgICAgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAg
IGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0g
fQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAg
Tm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMjcxMyw3ICszMDc3LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0
OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBi
YXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ID09
IERhdGFGb3JtYXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5yZWdzKCksIHByZWZlcnJlZEZv
cm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNzQ2LDM0
NSArMzExNSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgotICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVz
aW5nQXJndW1lbnRzOgotICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25z
OgotICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgICAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBpbmRleCk7Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1
c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2Uo
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50
NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5
VmFsLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RX
aXRoU3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5m
bzsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBwcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSW5mby5lbXBsYWNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8tPmdwcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxh
dGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAg
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVy
YXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0t
PnNpemUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+
dXNlZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7Ci0KLSAgICAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAg
ICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKLSAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0KLSAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7Ci0gICAg
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAotICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotCi0gICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMo
KSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOwotICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0
eShyZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBE
YXRhRm9ybWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVt
cG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJk
YTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2ggKHByZWZlcnJlZEZv
cm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7Ci0KLSAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3Vs
dFJlZyk7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51
bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmpl
Y3RJbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsK
LQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdFJlZykpOwotICAgICAgICAg
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICAgICAgZGVmYXVs
dDogeworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1h
dEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnQzMik7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+
YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxHUFJSZWc+IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNV
bmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBS
ZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBK
U1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAg
ICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAq
cmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgp
OwotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCks
IG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVy
dHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSwgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRS
ZWcsIG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7
Ci0gICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJl
ZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0g
ICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsK
LSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOwotICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50LAotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNj
b3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlN
b2RlKCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAg
ICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3Jt
YXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU4MSw3ICsz
NjI2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3Vs
YXRlID0gZmFsc2U7Ci0gICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJl
c3VsdEdQUiwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQm94ID0gZmFsc2U7CisgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTUyNjksNTIgKzUzMTUsNTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxl
U3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0RW51bWVyYWJs
ZUxlbmd0aChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3Ry
dWN0dXJlUHJvcGVydHkobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3Bl
cnR5KG5vZGUpOworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRl
eCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVn
PigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIo
KSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisK
KyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJv
cGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5
KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
b21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJv
cGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Io
bm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
SW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBi
ZWYxZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRkMDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJl
Y3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAgLTM1Miw2ICszNTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5k
ZXggMmUyZjA3ZGZjN2U4YzEzZGRiMGVkZDVhMmQwN2E1ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcy
MzBlMGUxYmQ0NDVmMzA2MjM0MzdmY2Q2MzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTExNCw2ICsxMTQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
bW9kZVNldE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVT
dHJpbmc6Om9mZnNldE9mRmxhZ3MoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19sZW5ndGgs
IEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmlu
Z19maWJlcjAsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGExYTVmZDI0NGNmMjEx
MDMyNjQxOTdhNzZhZTMwYzdmNjBmNzllNjQuLjAzZjg2NTJjNmNiODJjNjIwMjBkMWU2NmJiNTlm
NDY1OTFkODNlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKQEAgLTI4NiwxOCArMjg2LDE1IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIEJv
b2xlYW5Ub051bWJlcjoKICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBI
YXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0g
ICAgY2FzZSBHZXREaXJlY3RQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0UHJvcGVydHlF
bnVtZXJhdG9yOgotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNh
c2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Cisg
ICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRl
eDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2Fz
ZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNmZlMjlk
OTlmYTQ0MTQ5YzE0NmIyMWFiNDEwNGM0MDgwMzY5ZjM3MS4uMWU2OWIyYTczMmFhYjdkZTRkZjRm
YjM2N2ViZmRlZDAyOWVhZmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcApAQCAtMTAyLDYgKzEwMiw4IEBACiAjaW5jbHVkZSA8d3RmL1JlY3Vy
c2FibGVMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RkVW5vcmRlcmVkU2V0Lmg+CiAKKyNpbmNs
dWRlICJQcm9iZUNvbnRleHQuaCIKKwogI3VuZGVmIFJFTEVBU0VfQVNTRVJUCiAjZGVmaW5lIFJF
TEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCiAgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBc
CkBAIC0xNTIzLDQwICsxNTI1LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlU3Rv
cmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAg
IGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICAgICAgICAgIGNv
bXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc093
blN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9y
OgorICAgICAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAg
IGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGUoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1lKCk7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgICAgICBjb21waWxl
RW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51bWVy
YWJsZUxlbmd0aCgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6Cisg
ICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgICAgICAg
ICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOworICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lKCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCk7CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckluQnlWYWw6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckluQnlWYWwoKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Ci0gICAgICAg
ICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CkBAIC01
MDIwLDcgKzUwMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyB3ZSBkb21pbmF0ZSB0aGVtLgog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisgICAgTFZhbHVlIGNvbXBp
bGVHZXRCeVZhbEltcGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA0Nyw4ICs1MDQw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBh
bGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAg
ICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgZmFzdENhc2UgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTA4MCw4ICs1MDcyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRv
IGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOiB7CkBAIC01MTAwLDggKzUwOTEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBtX25v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG1fbm9kZS0+Zmxh
Z3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKQEAgLTUxNDEsMTggKzUxMzIsMTYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKQotICAg
ICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkoRG91YmxlLCBmYXN0UmVzdWx0LCBzbG93
UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOiB7CiAgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogCiAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZC
b3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50
MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogewpA
QCAtNTE2OSw4ICs1MTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
T3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5kcyk7CiAgICAgICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAg
ICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0
Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUxOTIsOCAr
NTE4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5w
aGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CkBAIC01MjQ2LDggKzUy
MzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBuYW1lZFJl
c3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5
OgpAQCAtNTI1NiwyNCArNTI0MiwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobV9ub2RlKSkgewogICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEp
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpT
VmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RT
dHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmlu
ZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJv
bFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN5bWJvbCwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgbG93
SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtNTM3Myw4ICs1MzU2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBzZXRKU1Zh
bHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IHBhdGNocG9pbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CkBAIC01MzkwLDggKzUzNzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQocmVz
dWx0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8g
a2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CkBAIC01NDE3LDEzICs1Mzk4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIC8v
IFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFs
aXZlLgogICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaW5n
Q2hhckF0SW1wbCgpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgpAQCAtNTQ0OCw5ICs1NDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvYWRGcm9tSW50VHlwZWRBcnJheShwb2ludGVyLCB0
eXBlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUg
c2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgICAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW50VHlwZWRB
cnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOwpAQCAtNTQ2OSw4ICs1NDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0
aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtNTQ4MCw4ICs1NDU2LDI0IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5
cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAg
aWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxh
dGUgPSB0cnVlOworICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0
LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIHNldERv
dWJsZShyZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBA
IC04NTcxLDcgKzg1NjMsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShJbnQ2NCwgZmFzdFJlc3VsdCwgZW1wdHlSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICBMVmFsdWUgY29tcGlsZVN0
cmluZ0NoYXJBdEltcGwoKQogICAgIHsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dTdHJpbmco
bV9ncmFwaC5jaGlsZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ncmFwaC5jaGlsZChtX25vZGUsIDEpKTsKQEAgLTg2NzksNyArODY3MSwxMiBAQCBwcml2
YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9y
YWdlIGFsaXZlLgogICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQ2NCwgcmVzdWx0cyk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlU3RyaW5n
Q2hhckF0KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoY29tcGlsZVN0cmluZ0NoYXJBdElt
cGwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQpA
QCAtMTI5MDYsMTcgKzEyOTAzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRTdG9yZUJhcnJp
ZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3Jl
QmFycmllcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCisgICAgTFZhbHVlIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKExWYWx1ZSBpbmRleCwgU19KSVRPcGVyYXRpb25fR0Na
IHNsb3dQYXRoT3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKSk7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbV9ub2RlLT5hcnJheU1vZGUo
KTsKIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgp
KSk7CiAKICAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtb2RlLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIgPwogICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMy
UHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwpAQCAtMTI5
NTEsMTEgKzEyOTQ3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9s
ZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwor
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZERv
dWJsZVByb3BlcnRpZXM7CiAgICAgICAgICAgICAKQEAgLTEyOTg5LDEyICsxMjk4NCwxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQs
IHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
X291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwor
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKIAogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEzMDI2LDE5NiAr
MTMwMjAsMjY5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3Vs
dCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9
CiAKICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3Ra
ZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKTsKICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KCkK
KyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChpbmRleCwgb3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0
UHJvcGVydHlFbnVtZXJhdG9yKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0
aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFNsb3dQYXRoQ2FsbD4KLSAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eUlt
cGwoTFZhbHVlIGJhc2UsIFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwpCisgICAgdm9pZCBjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3Jp
Z2luLnNlbWFudGljKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3Ig
PSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CiAKLSAgICAgICAgTEJh
c2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvcnJlY3RTdHJ1Y3R1cmUgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIGlmIChtX25vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1f
b3V0Lm5vdFplcm8zMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSk7CiAKLSAgICAgICAgbV9v
dXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAg
ICAgICAgICAgIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVseShzbG93UGF0aCkpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNoZWNrSGFzUHJvcGVydHkgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKIAot
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2Us
IGNvcnJlY3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5pdGlhbElu
ZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlu
aXRpYWxJbmRleEZvckhhc1Byb3BlcnR5ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihtb2RlKSwgdW5zdXJlKGNoZWNrSGFzUHJv
cGVydHkpLCB1bnN1cmUoaW5jcmVtZW50KSk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hl
YXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAg
ICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb3JyZWN0U3RydWN0dXJlKSk7CisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAgICAgICAgTFZhbHVlIGlu
ZGV4UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgpOworICAgICAgICAgICAgTFZh
bHVlIGluY3JlbWVudGVkSW5kZXggPSBtX291dC5hZGQoaW5kZXhQaGksIG1fb3V0LmludDMyT25l
KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3JlbWVudGVkSW5kZXhSZXN1bHQgPSBt
X291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmaW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubGVzc1RoYW4oaW5jcmVtZW50ZWRJbmRl
eCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yX2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvcnJlY3RTdHJ1Y3R1cmUsIHNs
b3dQYXRoKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSGFzUHJvcGVydHkp
OworICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5SW5kZXggPSBtX291dC5waGkoSW50MzIsIGlu
aXRpYWxJbmRleEZvckhhc1Byb3BlcnR5LCBpbmNyZW1lbnRlZEluZGV4UmVzdWx0KTsKKyAgICAg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXhQaGksIG1fb3V0LmFuY2hvcihwcm9w
ZXJ0eUluZGV4KSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaW5hbFByb3BlcnR5SW5k
ZXggPSBtX291dC5hbmNob3IocHJvcGVydHlJbmRleCk7CisgICAgICAgICAgICBMVmFsdWUgaGFz
UHJvcGVydHkgPSBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChwcm9wZXJ0eUluZGV4LCBv
cGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChoYXNQcm9wZXJ0eSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpbmNyZW1l
bnQpKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3IoCi0g
ICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1D
YWxsKEludDY0LCBzbG93UGF0aENhbGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2Us
IHByb3BlcnR5KSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIGZp
bmFsSW5kZXggPSBtX291dC5waGkoSW50MzIsIGZpbmFsSW5jcmVtZW50ZWRJbmRleCwgZmluYWxQ
cm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQu
emVyb0V4dChmaW5hbEluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVt
YmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGUpIDw8IDMyKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjb3JyZWN0U3RydWN0dXJlUmVzdWx0LCBzbG93
UGF0aFJlc3VsdCkpOworICAgICAgICBFZGdlJiBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2lu
ZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChiYXNl
RWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2Rl
LCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9tb2RlU2V0KSwgbV9v
dXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihp
bmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNy
ZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJP
bmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ID0gbV9v
dXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1
ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25F
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKICAgICB9CiAKLSAgICB2b2lkIGNv
bXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCkKICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1
Y3R1cmVQcm9wZXJ0eUltcGwobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9u
SGFzRW51bWVyYWJsZVByb3BlcnR5KTsKKyAgICAgICAgTFZhbHVlIGJveGVkUGFpciA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRv
SW50MzIoYm94ZWRQYWlyKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0
dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUo
KQogICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7Cisg
ICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
CisgICAgICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LmxTaHIo
Ym94ZWRQYWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQzMihtX291
dC5iaXRBbmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUlu
U3RydWN0dXJlUHJvcGVydHkoKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgaGF2
ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNvdmVyeSBmb3IgdGhpcyBub2RlIHNpbmNlIGl0J3MgImVm
ZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxpdmUgaW4gYnl0ZWNvZGUuCisgICAgdm9pZCBjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKQogICAgIHsKLSAgICAgICAgY29tcGls
ZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVy
YXRpb25JblN0cnVjdHVyZVByb3BlcnR5KTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1
ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0
eU5hbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9y
KSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoKQorICAgIHZvaWQg
Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRv
ciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKyAgICAgICAgRWRn
ZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgRWRn
ZSBwcm9wZXJ0eU5hbWVFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpOworICAg
ICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpOwor
ICAgICAgICBFZGdlIGluZGV4RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKTsK
IAotICAgICAgICBMQmFzaWNCbG9jayBjaGVja09mZnNldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWQgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAg
ICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUg
YmFzZSA9IERGRzo6aXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkgPyBsb3dDZWxsKGJhc2VFZGdl
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pIDogbG93SlNWYWx1ZShiYXNlRWRnZSk7CisKKyAg
ICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBzdG9yYWdlRWRnZSA/IGxvd1N0b3JhZ2Uoc3RvcmFnZUVk
Z2UpIDogbnVsbHB0cjsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgcHJv
cGVydHlOYW1lIGhlcmUgaW4gY2FzZSBpdCByZXF1aXJlcyBib3hpbmcgc2luY2UgdGhlIElDIHBh
dGggd29uJ3QgZG9taW5hdGUgc3Vic2VxdWVudCB1c2VzIGluIHN1YnNlcXVlbnQgbm9kZXMuCisg
ICAgICAgIC8vIElmIGl0J3MgYW4gSW50MzIgYW5kIHdlIHVzZSBpdCBhcyBzdWNoIHRoaXMgYm94
aW5nIHdpbGwgYmUgRENFJ2QgYnkgYjMgbGF0ZXIgYW55d2F5LgorICAgICAgICBsb3dKU1ZhbHVl
KHByb3BlcnR5TmFtZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKworICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihpbmRleEVkZ2UpOworICAgICAgICBMVmFsdWUgbW9k
ZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KSk7CisgICAgICAgIExW
YWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNSkp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2sg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVMb2FkQmxvY2sg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBnZW5lcmljSUNCbG9j
ayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFs
KAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNldCkpOworICAgICAgICBMVmFsdWUgaXNO
b3ROYW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROYW1lZCwgdW5z
dXJlKGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNrU3RydWN0dXJlQmxvY2spKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgLy8gVE9E
TyBjaGVjayBjZWxsPworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8g
c3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUu
b25seVN0cnVjdHVyZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlKQorICAgICAgICAgICAgc3Ry
dWN0dXJlSUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMu
SlNDZWxsX3N0cnVjdHVyZUlEKTsKKworICAgICAgICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVj
dHVyZSA9IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKKwor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdDsKKyAgICAg
ICAgaWYgKGluZGV4RWRnZS5ub2RlKCkgPT0gcHJvcGVydHlOYW1lRWRnZS5ub2RlKCkpIHsKKyAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBiYWRT
dHJ1Y3R1cmVTbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZM
aW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYmFkU3RydWN0dXJlU2xvd1BhdGgpOworICAgICAgICAgICAgYmFkU3RydWN0dXJl
U2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVt
ZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
YmFzZSwgaW5kZXgsIGVudW1lcmF0b3IpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9y
T3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNoZWNrT2Zmc2V0LCBpbmxpbmVMb2Fk
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQu
bG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hl
ZElubGluZUNhcGFjaXR5KSksCi0gICAgICAgICAgICB1bnN1cmUob3V0T2ZMaW5lTG9hZCksIHVu
c3VyZShpbmxpbmVMb2FkKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5saW5lT3JP
dXRPZkxpbmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBpbmxpbmVDYXBhY2l0eSA9IG51bGxwdHI7
CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgICAg
IGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9
ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgICAgICBpbmxpbmVDYXBh
Y2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5KQorICAgICAgICAgICAgaW5saW5l
Q2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOworICAgICAgICBMVmFsdWUgaXNJbmxp
bmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291dC5pbnQzMk9uZSA6IG1fb3V0LmJl
bG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0lubGlu
ZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayksIHVuc3VyZShvdXRPZkxpbmVMb2FkQmxvY2spKTsK
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkLCBvdXRPZkxpbmVMb2FkKTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaW5saW5lTG9hZEJsb2NrKTsKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9h
ZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCisg
ICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGll
cy5hdEFueU51bWJlcigpLAogICAgICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5k
ZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob3V0T2ZMaW5lTG9hZCwgc2xvd0Nhc2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAg
ICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkQmxvY2spOworICAgICAgICBpZiAoIXN0
b3JhZ2UpCisgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSk7CisKICAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0
LnNpZ25FeHQzMlRvNjQoCi0gICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBt
X291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
Y2FjaGVkSW5saW5lQ2FwYWNpdHkpKSkpOworICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1
YihpbmRleCwgaW5saW5lQ2FwYWNpdHkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1f
b3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVy
KCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgdm1DYWxsKEludDY0
LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJv
cGVydHkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291
dC5hcHBlbmRUbyhnZW5lcmljSUNCbG9jayk7CisgICAgICAgIExWYWx1ZSBnZW5lcmljUmVzdWx0
ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
bV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQo
dHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveEludDMyKGdlbmVy
aWNSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1
bHQgPSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChnZW5lcmljUmVzdWx0LT50eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgZ2VuZXJp
Y1Jlc3VsdCA9IGJveERvdWJsZShnZW5lcmljUmVzdWx0KTsKIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkoSW50NjQsIGlubGluZVJlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBzbG93Q2FzZVJlc3VsdCkp
OwotICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAg
IExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
c2V0SW50MzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yX2luZGV4TGVuZ3RoKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJ
Q1Jlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBpbmxpbmVSZXN1bHQpOworICAgICAgICBpZiAoYmFk
U3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpCisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKHJlc3VsdCwgYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpOworICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJh
dG9yKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xv
d1BhdGhGdW5jdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNl
bGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgZW51
bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRl
eCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBFZGdlIGJhc2VFZGdlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICBMVmFsdWUgYmFzZSA9IGJh
c2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlID8gbG93Q2VsbChiYXNlRWRnZSkgOiBsb3dKU1Zh
bHVlKGJhc2VFZGdlKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5TmFtZSA9IGxvd0pTVmFsdWUo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVl
IG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworICAgICAg
ICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDQpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNOYW1lZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBtYXRjaGVzU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBvcGVyYXRpb25CbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleCkpLAotICAgICAgICAgICAgdXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5k
cykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291
dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSksIHVuc3Vy
ZShpc05hbWVkQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxvY2spKTsKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNOYW1lZEJsb2NrKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5s
b2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQ
dHIoaW5kZXgpKSkpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5
cGUoYmFzZUVkZ2UpKSwgdW5zdXJlKGlzQ2VsbEJsb2NrKSwgdW5zdXJlKG9wZXJhdGlvbkJsb2Nr
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNDZWxsQmxvY2spOworICAgICAgICBMVmFs
dWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1f
b3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAgICAgICAgICAgdXN1YWxseShtYXRjaGVzU3RydWN0dXJl
QmxvY2spLCByYXJlbHkob3BlcmF0aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhtYXRjaGVzU3RydWN0dXJlQmxvY2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBuYW1lZFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywg
Y29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpWYWx1ZU51bGwpKTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ob3BlcmF0aW9uQmxvY2spOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3IodW5ib3hCb29sZWFuKHZtQ2FsbChJ
bnQ2NCwgc2xvd1BhdGhGdW5jdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwg
cHJvcGVydHlOYW1lLCBpbmRleCwgbW9kZSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBpbkJvdW5kc1Jl
c3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24pOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1
bHQsIG9wZXJhdGlvblJlc3VsdCkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCkK
ICAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7
Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAg
ICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgp
KSwKLSAgICAgICAgICAgIHVzdWFsbHkoaW5Cb3VuZHMpLCByYXJlbHkob3V0T2ZCb3VuZHMpKTsK
LQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRz
LCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0
eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBt
X291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
Q29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKSkpOwotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZC
b3VuZHMsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRz
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVOdWxs
KSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LnBoaShJbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91bmRzUmVzdWx0KSk7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRv
ckluQnlWYWwpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkK
KworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSgpCiAgICAgewotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4KSk7Cisg
ICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRvckhh
c093blByb3BlcnR5KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUoKQpAQCAtMTczNDQsNyArMTc0MTEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpICYmIGNh
blNwZWN1bGF0ZSkgewogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIE92
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJlc3VsdCwgbV9vdXQu
aW50MzJaZXJvKSk7CkBAIC0yMDI5Niw2ICsyMDM2MywyNyBAQCBwcml2YXRlOgogICAgICAgICBt
X291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KIAorICAgIC8vIFRoaXMgb25seSB3b3JrcyBmb3Ig
aW50cyByaWdodCBub3cuCisgICAgUGF0Y2hwb2ludFZhbHVlKiBkYXRhTG9nRm9yRGVidWdnaW5n
KGNvbnN0IGNoYXIqIHByZWZpeCwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAgICByZXN1
bHQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC0+YXBw
ZW5kKHZhbHVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIFR5cGUg
dmFsdWVUeXBlID0gdmFsdWUtPnR5cGUoKTsKKyAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworCisgICAgICAgICAgICBqaXQucHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PSBJbnQzMikKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8aW50MzJfdD4o
R1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPEpTVmFsdWU+KEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKICAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0
dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0RTTC5yYgppbmRleCA3MzE3MTAwOTZjZjNlMjQ5OGFlNDVkZGEyNmFhODJlNzljZDQ2
YTRlLi42OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTM4LDYgKzEzOCw3IEBAIG1vZHVsZSBE
U0wKICNpbmNsdWRlICJHZXRCeVZhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5o
IgogI2luY2x1ZGUgIkl0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlByaXZh
dGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCmluZGV4IDQ0NDYzNWU5ODBkOTBh
ZjgzN2ViZDYzYjk2MmZhZWRlMmVjNTM1MDMuLmQ4NzljOTBiZTMxMTc4NjIzM2Y1MjZiMTgzZWRm
MWNiM2M3YmIzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3Rlci5oCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBTFdBWVNf
SU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZyYW1lKik7CiAgICAgICAgIEFMV0FZU19J
TkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sqKTsKICAgICAgICAgQUxXQVlTX0lO
TElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTU2NvcGUqKTsKLSAgICAgICAgQUxXQVlTX0lOTElO
RSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7CisgICAgICAgIEFMV0FZU19JTkxJTkUg
UmVnaXN0ZXImIG9wZXJhdG9yPShKU0NlbGwqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdp
c3RlciYgb3BlcmF0b3I9KEVuY29kZWRKU1ZhbHVlKTsKIAogICAgICAgICBpbnQzMl90IGkoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
cklubGluZXMuaAppbmRleCBjNTZlZjVlNDU1NGNiMTAzYWJlYmU3MmU2Mjk4ZjhjNDhhYWQ5ODYw
Li41OTNlZjY2NjhkZTJlMDNhNjU5YjM5ZjMxYWY2MGY4OGMyNzgzOTg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCkBAIC02
Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0o
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1BTFdBWVNfSU5M
SU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTT2JqZWN0KiBvYmplY3QpCitBTFdB
WVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTQ2VsbCogb2JqZWN0KQog
ewogICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShvYmplY3QpKTsKICAgICBy
ZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCBhYzhiNTEzN2Q4NTM1NDUwNmFlZWRjZWRiZDFjNWJkNzcyNTc5YzAxLi40MTU5ZTdl
NTA0OTY5MzdlZTFlNTZhZmI3YzIwYWU5Y2YyYTg5ZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTg4OSw3ICs4ODksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAgICAgQmVsb3csIEFkZHJlc3MoY2VsbEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBl
KSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBp
bmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUoR1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJh
bmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA0MmI4Y2Fm
NWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0Li4zYTg0NWFhYjdjMjYxZjI1NTQ2YjYw
NzZjNjU5YjYxOGNhOTRmM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0zMDgs
MTAgKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
REVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQogICAgICAgICBERUZJTkVfU0xP
V19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9X
X09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19p
bmRleF9zdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGVudW1lcmF0b3JfbmV4dCkKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiAgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKQEAgLTM2NSw2ICszNjMsOSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlf
aWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAg
ICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2luX2J5
X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkK
ICAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcml2YXRlX25hbWUpCiAgICAgICAgIERFRklORV9P
UChvcF9zZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2NoZWNrX3ByaXZh
dGVfYnJhbmQpCkBAIC00NzMsMTQgKzQ3NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX2FyZ3VtZW50cykKICAgICAg
ICAgREVGSU5FX09QKG9wX3B1dF90b19hcmd1bWVudHMpCiAKLSAgICAgICAgREVGSU5FX09QKG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9o
YXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2luX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCi0g
ICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLSAgICAgICAg
REVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKLSAgICAgICAgICAgIAogICAg
ICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAKQEAgLTU3OCw2ICs1NzEsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9n
ZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X3ByaXZhdGVfbmFtZSkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTYwOSw3ICs2
MDMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKQEAgLTY0MiwxMSArNjM1LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1Aobm90KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChzdHJpY3RlcSkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobnN0cmljdGVxKQotICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChnZXRfZGlyZWN0X3BuYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChnZXRfcHJvdG90eXBlX29mKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZl
X3Njb3BlKQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA0ODdhNWFjNWI4ZTVk
OGE5ZDgwYjJjNmQzMDZlMDgxNTIxYjgyODE0Li40ZmM5YTAyYjcyOWEzMjk0NWI3NTg0Zjc4YTE2
MzVkZTZhOGIyZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTY3MCwyMSArNjcwLDIz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9sb2Fk
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLSAgICAg
ICAgdm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgor
ICAgICAgICB2b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworCisgICAgICAgIHZvaWQgZW1pdF9v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+CisgICAgICAg
IHZvaWQgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBjb25zdCBPcGNvZGVUeXBlJiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgICAgICB2b2lk
IGVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzM1LDcgKzcz
Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmlu
ZGV4IGY2ZGIzZjU5YzRhYTRlMDI3YTE1NjExZWRiYmEyNjFjYWQ4ZWZlZDYuLjliYTEwZWQ2Nzcy
ZmFlYzNmMjBlNjM0YmFiZTE0YWRkOWExMDg5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcApAQCAtMTY5Miw0NiArMTY5MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlw
ZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlv
bik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVu
dEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAorCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwpAQCAtMTczOSw3ICsxNzA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0
aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAg
IAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFy
Z2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7CiAKQEAgLTE3NDgsNyArMTcxNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAg
ICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewogICAgICAgICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBU
YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYzsKQEAgLTE3NTgs
MTcxICsxNzI0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2st
PmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5j
b3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0
aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3
YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5
cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGgg
aXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0g
ICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRp
bmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAgICAv
LyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3Mg
Y2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAvLyBleHRl
bmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhl
IHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLQotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtl
IFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExv
YWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbElu
Zm8pOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwotCi0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAg
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAgIExhYmVsIG5leHRIb3RQ
YXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVm
YXVsdDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eURlZmF1bHQpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEJ5VmFs
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0g
c2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgr
KzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwot
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwot
ICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
c3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJl
Z1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5C
b3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCmluZGV4IDRkNzQxMjZiZTFlM2RlNDMwZDNhNmQ5Y2I3ZmRkYjZkYzg2ZjdlYjQu
LjJhZTNhMDRhM2M1ZmQyZjY5NDAyYzI1YTNlZTNmNzQ0ODI0Yzk3N2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTExNDIsMjI3ICsxMTQy
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLXZvaWQgSklUOjplbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
b2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0KLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Qm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVf
c3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJ
bXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQot
Ci12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKLXsKLSAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIAotICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9m
aWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBi
eVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
cywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7Ci0KLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmUsIGJ5VmFsSW5mby0+ZG9uZVRhcmdldCk7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVk
X3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29k
ZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBD
b2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChD
b2RlTG9jYXRpb25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxSZXR1cm5BZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJh
dGlvblB0clRhZz4ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwot
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJs
b2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
KTsKLQotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDEpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2Fs
bHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3Qg
cGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBp
ZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxs
IGFsd2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JM
ZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0
aW9uCi0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBl
eHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUK
LSAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFk
ZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAv
LyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUg
aW4gdGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsK
LQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2Zp
bGUpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsK
LQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAg
IFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLQotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
b3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgotICAgIC8vIFNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNs
b3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwg
YmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwot
Ci0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOwotCi0gICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwotICAgIAot
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUs
IHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQot
ICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0TG9hZChiYXNlLCBy
ZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVm
YXVsdCwgZHN0LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIGJ5VmFsSW5mbyk7Ci0KLSAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRh
cmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlv
bkluZGV4Kys7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5t
X2luZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRMb2Fk
UGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRMb2FkUGF5bG9hZChl
bnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3Ry
dWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAot
ICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDIpOwotICAgIC8vIElmIGluZGV4IGlzIGxl
c3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdz
IGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFi
b3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIGxvYWQz
MihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIC8v
IE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhp
cyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDIpOwotICAgIG5lZzMy
KHJlZ1QyKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1
Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1
Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVt
aXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJh
dG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwg
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9w
ZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAg
IEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3Bl
cnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChy
ZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCByZWdUMik7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1p
dFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJh
dG9yR2VuZXJpY1BuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5t
X2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQ
cm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQot
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFBy
b3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRl
eChyZWdUMSwgcmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMik7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwot
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewog
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CmluZGV4IDE1ZTFkMzQ1NzliNmQ0YzhjMTcwZDIzNTBjNmMzNjQ0M2ZmZWE0MTUuLjQxMzA3YzA0
NmFhN2RkOWE4ODU4NTk3YjBjOWMyMGNlNjIwM2UzZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5j
bHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAj
aW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5o
IgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCkBAIC04NiwxMCArODcsMTAgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogCiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgordm9pZCBKSVQ6Omdl
bmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nh
c2VzKGl0ZXIpKSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKQEAgLTEzNiw2ICsxMzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMK
ICAgICB9CiB9CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJ
X1RIVU5LUykKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93
X29wX2dldF9ieV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQogewpAQCAtMjk3Nyw2
ICsyOTgzLDEzNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwogCit2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0g
Ynl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21v
ZGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CisgICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOworCisgICAgSnVtcExpc3Qg
ZG9uZUNhc2VzOworCisgICAgYXV0byByZXN1bHRHUFIgPSByZWdUMDsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
bW9kZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBy
ZWdUMSk7CisKKyAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVzcygmbWV0YWRhdGEubV9lbnVt
ZXJhdG9yTWV0YWRhdGEpKTsKKyAgICAvLyBUaGlzIGlzIGFsd2F5cyBhbiBpbnQzMiBlbmNvZGVk
IHZhbHVlLgorICAgIEp1bXAgaXNOb3ROYW1lZE1vZGUgPSBicmFuY2hUZXN0MzIoTm9uWmVybywg
cmVnVDIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
IHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworCisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qz
KTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpKTsKKworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0
aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4g
aW5saW5lIGFjY2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CisKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgIG91dE9mTGluZUFj
Y2Vzcy5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICBuZWczMihyZWdUMSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1Qx
KTsKKyAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGRvbmVDYXNlcy5h
cHBlbmQoanVtcCgpKTsKKworICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7CisgICAg
c3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5OYW1l
ZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7
CisKKyAgICBpc05vdE5hbWVkTW9kZS5saW5rKHRoaXMpOworICAgIEp1bXAgaXNOb3RJbmRleGVk
ID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpOworICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRo
IHRoZSBpbmRleC4KKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisK
KyAgICBpc05vdEluZGV4ZWQubGluayh0aGlzKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRl
V2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2Vu
KAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4o
bV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NU
eXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSwgcmVnVDIpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsK
KyAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAg
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgZWxzZQorICAgICAgICBh
ZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOworCisgICAgZG9uZUNh
c2VzLmxpbmsodGhpcyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4K
K3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xv
d1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2UpCit7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9
IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9i
YXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOworCisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBy
ZWdUMCk7CisgICAgb3I4KHJlZ1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhKSk7CisKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2Rl
KSkpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgbW92
ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgIHNsb3dDYXNlcy5saW5rKHRoaXMpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGdlbmVyYWxDYXNlKTsKKyAgICBz
bG93UGF0aENhbGwuY2FsbCgpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5
VmFsPigpLCBzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1w
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHk+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkp
OworfQorCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFy
cmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxSZWdpc3RlciB2YWx1ZSwgV3JpdGVC
YXJyaWVyTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNThlNWQ1MmZlNWIwOGFlMjllM2U1ZGRkZTNk
NzQ2Nzk2N2YyMzAxOS4uMjU3Y2FlYTI3ODY4ODNiYmEwOGM3YTJjNGIyMzhkNTA0NGU3Mjk3NSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCkBAIC0xNTA1LDYgKzE1MDUsMjUgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2lu
dGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIHRl
bXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKIAorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsK
KyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CisgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNhMDAxYTU2NTVlYTFiYjFk
YjU5NTczY2Y2MDguLmU3MTgzYTcyYTM2OGYxYTI4MDQ2ODRkMmIwNzY0N2YyMjA2OGYxMjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
ci5hc20KQEAgLTE5OTIsMTkgKzE5OTIsMTQgQEAgc2xvd1BhdGhPcChjcmVhdGVfZ2VuZXJhdG9y
KQogc2xvd1BhdGhPcChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQogc2xvd1BhdGhPcChkZWZpbmVf
YWNjZXNzb3JfcHJvcGVydHkpCiBzbG93UGF0aE9wKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotc2xv
d1BhdGhPcChlbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCi1zbG93UGF0aE9wKGVudW1lcmF0b3Jf
c3RydWN0dXJlX3BuYW1lKQogc2xvd1BhdGhPcChnZXRfYnlfdmFsX3dpdGhfdGhpcykKLXNsb3dQ
YXRoT3AoZ2V0X2RpcmVjdF9wbmFtZSkKLXNsb3dQYXRoT3AoZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KQogc2xvd1BhdGhPcChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLXNsb3dQYXRoT3AoaGFzX2Vu
dW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfcHJv
cGVydHkpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfbmV4dCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRv
cl9nZXRfYnlfdmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2luX2J5X3ZhbCkKK3Nsb3dQYXRo
T3AoZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogCiBpZiBub3QgSlNWQUxVRTY0Ci0gICAg
c2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xvd1Bh
dGhPcChoYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICBzbG93UGF0aE9wKGluX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKICAgICBzbG93UGF0aE9wKGdldF9wcm90b3R5cGVfb2YpCiBlbmQKIApA
QCAtMjAyMSw3ICsyMDE2LDYgQEAgc2xvd1BhdGhPcChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGlu
Z19mdW5jX2RlY2xfaW5fZXZhbCkKIHNsb3dQYXRoT3Aoc3ByZWFkKQogc2xvd1BhdGhPcChzdHJj
YXQpCiBzbG93UGF0aE9wKHRocm93X3N0YXRpY19lcnJvcikKLXNsb3dQYXRoT3AodG9faW5kZXhf
c3RyaW5nKQogc2xvd1BhdGhPcCh0eXBlb2YpCiBzbG93UGF0aE9wKHR5cGVvZl9pc19vYmplY3Qp
CiBzbG93UGF0aE9wKHR5cGVvZl9pc19mdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggYmQ4ODU1ZWJm
ZDZmYzE5YjE1YzFiNTg4NmQ0ZmE1NTY0MzgyZDg3ZC4uOGE1ZjdkMjNlNjQ3NjNiYTI1OWUxYjJj
NWQ4N2Y4ZDE2YjgyOWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTMxNDEsMzQgKzMxNDEsNiBAQCBsbGlu
dE9wKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsLCBPcExvZ1NoYWRvd0NoaWNrZW5UYWlsLCBt
YWNybyAoc2l6ZSwgZ2V0LCBkaQogICAgIGRpc3BhdGNoKCkKIGVuZCkKIAotbWFjcm8gaGFzU3Ry
dWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybiwgc2xvd1BhdGhD
YWxsKQotICAgIGdldChtX2Jhc2UsIHQwKQotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6
ZSwgdDAsIHQxKQotICAgIGJ0cW56IHQxLCBub3RDZWxsTWFzaywgLnNsb3dQYXRoCi0KLSAgICBs
b2FkVmFyaWFibGUoZ2V0LCBtX2VudW1lcmF0b3IsIHQwKQotICAgIGxvYWRpIEpTQ2VsbDo6bV9z
dHJ1Y3R1cmVJRFt0MV0sIHQxCi0gICAgYmluZXEgdDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6bV9jYWNoZWRTdHJ1Y3R1cmVJRFt0MF0sIC5zbG93UGF0aAotCi0gICAgcmV0dXJuKFZhbHVl
VHJ1ZSkKLQotLnNsb3dQYXRoOgotICAgIGNhbGxTbG93UGF0aChzbG93UGF0aENhbGwpCi0gICAg
ZGlzcGF0Y2goKQotZW5kCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2hhc19lbnVtZXJhYmxlX3N0
cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIG1hY3Jv
IChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJ
bXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaGFzX2VudW1lcmFi
bGVfc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9wV2l0aFJldHVybihvcF9oYXNf
b3duX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgbWFjcm8g
KHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUlt
cGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0aF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4ob3BfaW5fc3RydWN0dXJl
X3Byb3BlcnR5LCBPcEluU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlz
cGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQot
CiBvcChmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50LCBtYWNybyAoKQogICAgIGxv
YWRwIENvZGVCbG9ja1tjZnJdLCB0MAogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmpl
Y3RbdDBdLCB0MApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKaW5kZXggMTEyOTU0YmI5YjZlNTAxMzY4ODNiNzQ1NmNiMWU4MzE4ZmI1YTUx
MS4uYjE1ZDM1NDgwMTliNzJlZDFkNjgzNzc1M2YzMDI2MDI2MGVhM2RhMyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05NjIs
MTYxICs5NjIsMTM3IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9f
cHJvcGVydHlfa2V5KQogICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5tX3NyYykuanNWYWx1ZSgp
LnRvUHJvcGVydHlLZXlWYWx1ZShnbG9iYWxPYmplY3QpKTsKIH0KIAotSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCitKU0NfREVGSU5F
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQogewog
ICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEVudW1lcmFibGVM
ZW5ndGg+KCk7Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdG9yVmFsdWUgPSBHRVRfQyhieXRlY29kZS5t
X2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBpZiAoZW51bWVyYXRvclZhbHVlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCi0gICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisgICAgYXV0byBieXRlY29kZSA9
IHBjLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVydHlOYW1l
RW51bWVyYXRvcigpKTsKIAotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRv
ciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihlbnVtZXJhdG9yVmFsdWUuYXND
ZWxsKCkpOworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9i
amVjdCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNOdW1iZXIoZW51
bWVyYXRvci0+aW5kZXhlZExlbmd0aCgpKSk7CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZUVudW1l
cmF0b3IoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKK0pTQ19ERUZJ
TkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KQogewogICAgIEJF
R0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JOZXh0
PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsK
LSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRv
T2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1
ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgbWV0
YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5zdHJ1Y3R1cmUodm0p
KTsKLSAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzJBc0FueUludCgpKTsKLSAgICBSRVRVUk4o
anNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3Bl
cnR5LmFzVUludDMyQXNBbnlJbnQoKSkpKTsKLX0KKyAgICBSZWdpc3RlciYgbW9kZVJlZ2lzdGVy
ID0gR0VUKGJ5dGVjb2RlLm1fbW9kZSk7CisgICAgUmVnaXN0ZXImIGluZGV4UmVnaXN0ZXIgPSBH
RVQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAgUmVnaXN0ZXImIG5hbWVSZWdpc3RlciA9IEdFVChi
eXRlY29kZS5tX3Byb3BlcnR5TmFtZSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotewotICAgIEJFR0lO
KCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eT4oKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSku
anNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7
Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVl
KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0jaWYgVVNFKEpT
VkFMVUUzMl82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBq
c0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRv
cikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS0+c3RydWN0dXJlKHZtKS0+aWQo
KSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAgICAgICBSRVRVUk4oanNC
b29sZWFuKHRydWUpKTsKLSNlbmRpZgotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhw
cm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihn
bG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpOwotfQorICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6TW9kZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICB1aW50
MzJfdCBpbmRleCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMyKCk7CiAKLUpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVy
dHkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzT3du
U3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VUX0MoYnl0ZWNvZGUu
bV9iYXNlKS5qc1ZhbHVlKCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwot
ICAgIGlmIChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPmlk
KCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpz
Qm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVu
dW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVChi
eXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQoIWJhc2VWYWx1ZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChn
bG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIG1ldGFkYXRhLm1fYXJy
YXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlLT5zdHJ1Y3R1cmVJRCgpKTsKIAotICAg
IEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwot
ICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBz
dHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJp
bmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIEpTU3RyaW5nKiBuYW1lID0gZW51
bWVyYXRvci0+Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9kZSk7CiAg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNCb29sZWFuKG9iamVjdFByb3Rv
dHlwZUhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpOwor
ICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KG1vZGUpOworICAgIG1vZGVSZWdpc3RlciA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KG1vZGUpKTsKKyAgICBpbmRleFJlZ2lzdGVyID0ganNOdW1iZXIoaW5kZXgpOworICAgIG5hbWVS
ZWdpc3RlciA9IG5hbWUgPyBuYW1lIDoganNOdWxsKCk7CisgICAgRU5EKCk7CiB9CiAKLUpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQor
SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92
YWwpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5TdHJ1
Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU1ZhbHVlIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jh
c2UpLmpzVmFsdWUoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlm
IChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0g
ZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVh
bih0cnVlKSk7Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1f
cHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmlu
ZygpKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGds
b2JhbE9iamVjdCwgYmFzZSwgYXNTdHJpbmcocHJvcGVydHkpKSkpOwotfQorICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3Rh
dGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9t
b2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAgICBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Kj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICB1bnNpZ25lZCBp
bmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNJbnQzMigpOworICAgIHN3
aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGU6IHsKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVT
dHJ1Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAgICAgICAg
ICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaW5kZXgpKSk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZTogeworICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5p
c0NlbGwoKSAmJiBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRv
ci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ2xsIG9ubHkg
bWF0Y2ggdGhlIHN0cnVjdHVyZSBJRCBpZiB0aGUgYmFzZSBpcyBhbiBvYmplY3QuCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleCgpKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldE9i
amVjdCgpLT5nZXREaXJlY3QoaW5kZXggPCBlbnVtZXJhdG9yLT5jYWNoZWRJbmxpbmVDYXBhY2l0
eSgpID8gaW5kZXggOiBpbmRleCAtIGVudW1lcmF0b3ItPmNhY2hlZElubGluZUNhcGFjaXR5KCkg
KyBmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhf
dD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpIYXNTZWVuTmFtZWRNb2RlU3RydWN0dXJlTWlz
bWF0Y2gpOworICAgICAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgICAgIH0KIAotSlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKLXsK
LSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJhYmxl
UHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2Up
LmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigp
OwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1
ZSgpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1N0cmluZyogc3Ry
aW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5n
LT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAg
ICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmpl
Y3QsIHByb3BlcnR5TmFtZSkpKTsKLX0KKyAgICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlOiB7CisgICAgICAgICAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgp
ICYmIG1vZGUgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpCisgICAgICAg
ICAgICAgICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZUlEKGJhc2VW
YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgICAgICBKU1N0cmluZyogc3Ry
aW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkpOwor
ICAgICAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9i
YWxPYmplY3QpOworICAgICAgICAgICAgLy8gVE9ETyBEb2VzIHRoaXMgYWN0dWFsbHkgZXZlciB0
aHJvdz8gSXNuJ3Qgc3RyaW5nIGJhY2tlZCBieSBhIFVVSUQ/CisgICAgICAgICAgICBDSEVDS19F
WENFUFRJT04oKTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGds
b2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIH0KIAotSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKQotewotICAgIEJFR0lOKCk7
Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAg
SlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0g
ICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBh
c1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVS
TihiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgfTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG9yKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJh
dG9yX2luX2J5X3ZhbCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5h
czxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0Mo
Ynl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQotICAgICAgICBSRVRVUk4odm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KCkpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsK
KyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1v
ZGU+KEdFVChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsK
IAotICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7
CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29k
ZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFs
dWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5j
YWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7
CiAKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2Up
KTsKLX0KLQotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+
KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgdWlu
dDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyQXNB
bnlJbnQoKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJ
bmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMy
KCkpKSk7CisgICAgfQogCi0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IG51bGxwdHI7Ci0g
ICAgaWYgKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKQot
ICAgICAgICBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGlu
ZGV4KTsKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkp
OworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0
eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6
Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3RyaW5nLCAmbWV0YWRhdGEubV9h
cnJheVByb2ZpbGUpKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCiB7CiAgICAgQkVHSU4oKTsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsK
LSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgp
LmFzQ2VsbCgpKTsKLSAgICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5q
c1ZhbHVlKCkuYXNVSW50MzJBc0FueUludCgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBH
RVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1Zh
bHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0g
c3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CiAKLSAgICBKU1N0cmluZyogcHJvcGVydHlOYW1l
ID0gbnVsbHB0cjsKLSAgICBpZiAoZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eCgpIDw9IGluZGV4ICYmIGluZGV4IDwgZW51bWVyYXRvci0+ZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXgoKSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJ
bmRleChpbmRleCk7Ci0gICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpz
TnVsbCgpKTsKLX0KKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBq
c0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRv
cikuanNWYWx1ZSgpKTsKKyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3Qo
KSkgeworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVk
TW9kZSAmJiBiYXNlLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVy
ZUlEKCkpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKIAotSlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpCi17Ci0gICAgQkVH
SU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKLSAg
ICBKU1ZhbHVlIGluZGV4VmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpOwot
ICAgIEFTU0VSVChpbmRleFZhbHVlLmlzVUludDMyQXNBbnlJbnQoKSk7Ci0gICAgUkVUVVJOKGpz
U3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleFZhbHVlLmFzVUludDMyQXNBbnlJ
bnQoKSkuc3RyaW5nKCkpKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+
aGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1
ZSgpLmFzVUludDMyKCkpKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3Ry
aW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICBhdXRvIHBy
b3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNP
d25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lKSkpOwogfQog
CiBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3Byb2ZpbGVfdHlwZV9jbGVh
cl9sb2cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5oCmluZGV4IGQ4ZDE1MDFmYjM1YmFjMjc5NGM2ZDk0MTAyNzFiYjY4ZjRjYzA1N2UuLmE1ZTAx
NWQ1M2E2OWU2MDUzYWY0ZGJiMzFiMmM4ZjI1N2MwZGIxZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCkBAIC0yNTQsMTcgKzI1NCwxMSBA
QCBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9pc19jb25zdHJ1Y3Rvcik7
CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9zdHJjYXQpOwogSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKIEpTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3Byb3BlcnR5X2tleSk7Ci1KU0NfREVD
TEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwot
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwot
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3Bl
cnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9kaXJlY3Rf
cG5hbWUpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X3Byb3Bl
cnR5X2VudW1lcmF0b3IpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
ZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZyk7CitKU0NfREVDTEFSRV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOworSlNDX0RFQ0xBUkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKK0pTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKK0pT
Q19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9w
cm9wZXJ0eSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxl
X3R5cGVfY2xlYXJfbG9nKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X3VucmVhY2hhYmxlKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2Ny
ZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcAppbmRleCBlMmNhMTYyZTBiNTRl
MjVjZjA2OWVlYThjODdlMWVlYTJlNGNkNWJlLi4xYjAzMTMwZjBhNWMwN2MzMzVjYzU4NTY4M2Ji
NjQ1ZWU1M2UwOGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
aWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwCkBAIC05MCw3ICs5MCw2IEBAIFNwZWN1bGF0ZWRU
eXBlIEZpbGVCYXNlZEZ1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dp
dGhfdGhpczoKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAgICAgY2FzZSBvcF9jb25z
dHJ1Y3Q6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGxf
dmFyYXJnczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVC
YXNlZEZ1enplckFnZW50QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
aWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCmluZGV4IGYxMzlkNGE0NDdiMjcwZjllZDMzZjdk
ZmQzNWUwMmFmZmMzMWM3MDMuLmMyNmMwMDM3NDAzOTBjN2IzODM2MDc2MGUzYzIyOWMxZmQxYjg4
ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1
enplckFnZW50QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmls
ZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIE9wY29kZUlEIEZpbGVCYXNl
ZEZ1enplckFnZW50QmFzZTo6b3Bjb2RlQWxpYXNGb3JMb29rdXBLZXkoY29uc3QgT3Bjb2RlSUQm
IG9wY29kCiB7CiAgICAgaWYgKG9wY29kZUlkID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJ
ZCA9PSBvcF9jYWxsX2V2YWwgfHwgb3Bjb2RlSWQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlk
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQogICAgICAgICByZXR1cm4gb3BfY2FsbDsKLSAgICBp
ZiAob3Bjb2RlSWQgPT0gb3BfZ2V0X2RpcmVjdF9wbmFtZSB8fCBvcGNvZGVJZCA9PSBvcF9nZXRf
YnlfdmFsX3dpdGhfdGhpcykKKyAgICBpZiAob3Bjb2RlSWQgPT0gb3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsIHx8b3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCiAgICAgICAgIHJl
dHVybiBvcF9nZXRfYnlfdmFsOwogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9jb25zdHJ1Y3RfdmFy
YXJncykKICAgICAgICAgcmV0dXJuIG9wX2NvbnN0cnVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyNGZjZjA4MTVlMjUwNDk1
ZTAzMTc5NGEwNmU0YjMxMDVjNzg0ZmI0Li4xNWY1YjA2NGVjYmZjNjU4YTk5MGQyZWI1OTYzNWJm
MmJkYmU4ODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCkBAIC0xNDYxLDYgKzE0NjEsMTAgQEAgY2FwaXRhbE5hbWUgIyMgQ29uc3Ry
dWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8gY2FwaXRhbE5h
bWUKICAgICAgICAgfSk7CiAjZW5kaWYKIAorICAgIG1fbGlua1RpbWVDb25zdGFudHNbc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmVtcHR5UHJvcGVydHlOYW1lRW51bWVy
YXRvcildLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYgaW5pdCkgewor
ICAgICAgICBpbml0LnNldChpbml0LnZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpKTsK
KyAgICB9KTsKKwogICAgIGlmIChPcHRpb25zOjpleHBvc2VQcm9maWxlcnNPbkdsb2JhbE9iamVj
dCgpKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIl9fZW5hYmxl
U2FtcGxpbmdQcm9maWxlciIpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmlu
ZygpLCBlbmFibGVTYW1wbGluZ1Byb2ZpbGVyKSwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
IHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKaW5kZXggMjFjNzBhMjdiNjkxYmUwNTY5MGEyZmFl
NzdjNjk5MTJhZWVjMTE5ZC4uY2YwYTRhNTEzNGY4MmRlZTk5YWFiMjViNjYzNTk4ZTU3ZGNlMmM4
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCkBAIC00OSwxMyArNDksMTkgQEAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShWTSYgdm0sIFN0
cnVjdHVyZSogc3QKIAogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3QgaW5kZXhlZExl
bmd0aCwgdWludDMyX3QgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV3JpdGVCYXJyaWVyPEpT
U3RyaW5nPiogcHJvcGVydHlOYW1lc0J1ZmZlciwgdW5zaWduZWQgcHJvcGVydHlOYW1lc1NpemUp
CiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1Y3R1cmUuZ2V0
KCkpCi0gICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5TmFtZXNCdWZmZXIp
CiAgICAgLCBtX2NhY2hlZFN0cnVjdHVyZUlEKHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aWQoKSA6
IDApCiAgICAgLCBtX2luZGV4ZWRMZW5ndGgoaW5kZXhlZExlbmd0aCkKICAgICAsIG1fZW5kU3Ry
dWN0dXJlUHJvcGVydHlJbmRleChudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzKQogICAgICwgbV9l
bmRHZW5lcmljUHJvcGVydHlJbmRleChwcm9wZXJ0eU5hbWVzU2l6ZSkKICAgICAsIG1fY2FjaGVk
SW5saW5lQ2FwYWNpdHkoc3RydWN0dXJlID8gc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpIDog
MCkKKyAgICAsIG1fcHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVydHlOYW1lc0J1ZmZlcikK
IHsKKyAgICBpZiAobV9pbmRleGVkTGVuZ3RoKQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTsKKyAgICBpZiAobV9lbmRTdHJ1Y3R1cmVQ
cm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGU7CisgICAgaWYgKG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXggLSBtX2Vu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOwogfQogCiB2b2lkIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlE
YXRhPiYmIGlkZW50aWZpZXJzKQpAQCAtMTQ4LDQgKzE1NCw3MCBAQCB2b2lkIGdldEVudW1lcmFi
bGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBi
YXNlLCBQcgogICAgIH0KIH0KIAorSlNTdHJpbmcqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y29tcHV0ZU5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2Us
IHVpbnQzMl90JiBpbmRleCwgTW9kZSYgbW9kZSwgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWRO
YW1lU3RyaW5nKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoaW5kZXhlZExl
bmd0aCgpIHx8IHNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisKKyAgICBpbmRleCsrOworICAgIHN3
aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5pdE1vZGU6IHsKKyAgICAgICAgbW9kZSA9IEluZGV4
ZWRNb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0K
KworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTogeworICAg
ICAgICB3aGlsZSAoaW5kZXggPCBpbmRleGVkTGVuZ3RoKCkgJiYgIWJhc2UtPmhhc0VudW1lcmFi
bGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KSkgeworICAgICAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAg
ICB9CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisKKyAgICAgICAgaWYgKGlu
ZGV4IDwgaW5kZXhlZExlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHNob3VsZEFsbG9jYXRl
SW5kZXhlZE5hbWVTdHJpbmcgPyBqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5k
ZXgpLnN0cmluZygpKSA6IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFzaXplT2ZQcm9wZXJ0eU5h
bWVzKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBtb2RlID0gTmFt
ZWRNb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0K
KworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGU6CisgICAgY2Fz
ZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOiB7CisgICAgICAgIEpTU3Ry
aW5nKiBuYW1lID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
IGlmIChpbmRleCA+PSBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBuYW1lID0gcHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAg
ICAgICAgICBpZiAoIW5hbWUpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBp
ZiAoaW5kZXggPCBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgJiYgYmFzZS0+c3RydWN0dXJl
SUQoKSA9PSBjYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgYXV0byBpZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIG5hbWUtPnZhbHVl
KGdsb2JhbE9iamVjdCkpOworICAgICAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsK
KyAgICAgICAgICAgIGlmIChiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0
LCBpZCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxscHRyOworICAg
ICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOworCisgICAgICAgIGlmIChpbmRleCA+PSBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4
KCkgJiYgaW5kZXggPCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICBtb2RlID0g
R2VuZXJpY01vZGU7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIGRlZmF1bHQ6
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmgKaW5kZXggMDIwMTFkNDFjN2Y2NmRhZDg4M2FlOGQ3NzBiNWQzZDI4NmNkNTA4Ny4uYTAw
OWJiMjkwMWI0YWExNzBkNzM4YTU5ODYwYTA5YTE1NmQyMDQ1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgK
QEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1
cmUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtMzcsNiArMzcsMTcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKIAorICAgIGVudW0gTW9kZSA6IHVpbnQ4X3Qg
eworICAgICAgICBJbml0TW9kZSA9IDAsCisgICAgICAgIEluZGV4ZWRNb2RlID0gMSA8PCAwLAor
ICAgICAgICBOYW1lZE1vZGUgPSAxIDw8IDEsCisgICAgICAgIEdlbmVyaWNNb2RlID0gMSA8PCAy
LAorICAgICAgICAvLyBQcm9maWxpbmcgT25seQorICAgICAgICBIYXNTZWVuTmFtZWRNb2RlU3Ry
dWN0dXJlTWlzbWF0Y2ggPSAxIDw8IDMsCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIg
dWludDhfdCBlbnVtZXJhdGlvbk1vZGVNYXNrID0gKEdlbmVyaWNNb2RlIDw8IDEpIC0gMTsKKwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAg
IHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKQEAgLTc0LDE2
ICs4NSwyMCBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OyB9CiAgICAgdWludDMy
X3QgY2FjaGVkSW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZElubGluZUNh
cGFjaXR5OyB9CiAgICAgdWludDMyX3Qgc2l6ZU9mUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0
dXJuIGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCk7IH0KKyAgICB1aW50MzJfdCBtb2RlU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlU2V0OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlSUQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBpbmRleGVkTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciwgbV9pbmRleGVkTGVuZ3RoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZm
X3QgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9l
bmRHZW5lcmljUHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZElu
bGluZUNhcGFjaXR5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0KKyAgICBzdGF0aWMgcHRy
ZGlmZl90IG1vZGVTZXRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLCBtX21vZGVTZXQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpOwog
ICAgIH0KIAorICAgIEpTU3RyaW5nKiBjb21wdXRlTmV4dChKU0dsb2JhbE9iamVjdCosIEpTT2Jq
ZWN0KiBiYXNlLCB1aW50MzJfdCYgY3VycmVudEluZGV4LCBNb2RlJiwgYm9vbCBzaG91bGRBbGxv
Y2F0ZUluZGV4ZWROYW1lU3RyaW5nID0gdHJ1ZSk7CisKICAgICBERUNMQVJFX1ZJU0lUX0NISUxE
UkVOOwogCiBwcml2YXRlOgpAQCAtOTIsMTMgKzEwNywxNCBAQCBwcml2YXRlOgogICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90LCB1aW50MzJfdCwg
V3JpdGVCYXJyaWVyPEpTU3RyaW5nPiosIHVuc2lnbmVkKTsKICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4mJik7CiAKLSAgICBBdXhpbGlh
cnlCYXJyaWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5TmFtZXM7Ci0gICAg
V3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWluOwogICAgIFN0cnVj
dHVyZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgdWludDMyX3QgbV9pbmRleGVkTGVuZ3Ro
OwogICAgIHVpbnQzMl90IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJf
dCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OwogICAgIHVpbnQzMl90IG1fY2FjaGVkSW5saW5l
Q2FwYWNpdHk7CisgICAgdWludDMyX3QgbV9tb2RlU2V0IHsgMCB9OworICAgIEF1eGlsaWFyeUJh
cnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1lczsKKyAgICBXcml0
ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47CiB9OwogCiB2b2lkIGdl
dEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0
dXJlUHJvcGVydHlDb3VudCk7CkBAIC0xMzQsNyArMTUwLDEwIEBAIGlubGluZSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iCiAgICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSAwOwogICAgIH0KIAot
ICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgc3Ry
dWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwgbnVtYmVyU3Ry
dWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CisgICAgaWYgKCFpbmRl
eGVkTGVuZ3RoICYmICFwcm9wZXJ0eU5hbWVzLnNpemUoKSkKKyAgICAgICAgZW51bWVyYXRvciA9
IHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworICAgIGVsc2UKKyAgICAgICAgZW51
bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmVB
ZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBudW1iZXJTdHJ1Y3R1cmVQ
cm9wZXJ0aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKICAgICBpZiAoIWluZGV4ZWRMZW5n
dGggJiYgc3VjY2Vzc2Z1bGx5Tm9ybWFsaXplZENoYWluICYmIHN0cnVjdHVyZUFmdGVyR2V0dGlu
Z1Byb3BlcnR5TmFtZXMgPT0gc3RydWN0dXJlKSB7CiAgICAgICAgIGVudW1lcmF0b3ItPnNldENh
Y2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGdsb2JhbE9i
amVjdCwgYmFzZSkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5jYW5DYWNoZVByb3BlcnR5TmFt
ZUVudW1lcmF0b3Iodm0pKQpAQCAtMTQzLDQgKzE2Miw2IEBAIGlubGluZSBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iCiAgICAgcmV0dXJuIGVudW1lcmF0b3I7CiB9CiAKK3VzaW5nIEVudW1lcmF0b3JNZXRhZGF0
YSA9IHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2Rl
PjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50
LmNwcAppbmRleCBjZGNmYTk5ZDQ5YTY5MTc0MDFkNjgzMTY4YmExOWFiZGViYWU5YTRkLi5jN2E4
ZTMxZjdlNDdiZDY5MTFmZTRhYzQ1ZmRmNzdkNjgzOTY0MTA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3Jl
YXRpbmdGdXp6ZXJBZ2VudC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBTcGVjdWxhdGVkVHlwZSBQcmVkaWN0
aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRlcm5hbChDb2RlQmxv
YwogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhp
czoKICAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgotICAgIGNhc2Ugb3BfZ2V0X2Rp
cmVjdF9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoKICAgICBjYXNl
IG9wX2NvbnN0cnVjdDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ug
b3BfY2FsbDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434448</attachid>
            <date>2021-07-28 12:28:26 -0700</date>
            <delta_ts>2021-07-28 12:39:13 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728152825.patch</filename>
            <type>text/plain</type>
            <size>369725</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjgyN2MwYjVlNmRhZTQ4
YWY5Njg3MTE1NmNjNGYyYzg5MjMzYTVmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQyNDQs
MjUgKzQyNDgsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKLSAgICAgICAgY2xvYmJlcldvcmxk
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eTogeworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTQyODEs
MjYgKzQyNjgsNTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKCk7Ci0gICAg
ICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorCiAg
ICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNT
YW5lQ2hhaW4oKSkKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEo
KSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKTsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUgfHwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkg
IT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworCisgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCAwKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVy
YXRvckdlbmVyaWNQbmFtZTogeworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZTogewogICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzog
ewotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVm
aW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKKyAgICAgICAgLy8gdmFsdWUgaW5mb3Jt
YXRpb24uCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCmluZGV4IDExMTFmODlmOWQ3YjViOTc3
NzhjMTZjOGQ1NDY0MGJlYTM3NDQyYjIuLmEwMjZhYWQxODkzYmYyM2M1NzE5NmZjYzZjOTFmYzIw
MDAzYzQ1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaApAQCAt
Mjg5LDYgKzI4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09
IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICB9CiAKKyAgICBib29sIGlzU2FuZUNo
YWluKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0luQm91bmRzU2FuZUNoYWluKCkg
fHwgaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpOworICAgIH0KKwogICAgIGJvb2wgaXNPdXRPZkJv
dW5kcygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgfHwgc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBkYjM3ZjRkZGRiZjgwY2Q2NmViNTc4N2Q3
YmFhMmJmNTNhZjg5MDc2Li45ZGJkMGI0N2Q5ZGZmNGNmNjAzOGFmNTAwMTc5MzQ4YmUwYWVhMjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTM5MCw3ICszOTAsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2Rl
TmVlZHNOZWdaZXJvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbDogewogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VG
bGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5v
ZGVCeXRlY29kZVVzZXNBc090aGVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVj
b2RlVXNlc0FzQXJyYXlJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGEyOTZjNGI4N2M4NTg4NjRmYmRlZGQ3NGVmNzI3ZTU0
ZDk1ZmQ2OTQuLjJjOTgzYmFjMzcwMGM4ZDI5NTcyMzFkYmRlZjJlYmYzNTBkMzBiN2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC04
Mzg3LDEwMyArODM4NywxMzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19wcml2YXRlX2JyYW5k
KTsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0aCwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KTsKKyAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cjogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUubV9iYXNl
KSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3Ip
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVByb3BlcnR5LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwg
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9o
YXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbnVt
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6
UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Cisg
ICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChieXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAg
ICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKTsKKyAgICAg
ICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNvZGUubV9tb2RlKTsKIAotICAgICAgICBjYXNl
IG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5Pigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc093blN0cnVj
dHVyZVByb3BlcnR5LAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBn
ZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAgICB9CisgICAgICAgICAgICBhdXRv
IHNlZW5Nb2RlcyA9IG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhOwogCi0gICAgICAgIGNh
c2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAg
ICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9w
ZXJ0eT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsK
LSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAg
ICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOwotICAgICAgICAg
ICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSk7
Ci0gICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBIYXNJbmRleGVkUHJvcGVydHkgbXVz
dCBiZSB0cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIHNpbmNlIEZpeHVwUGhh
c2UgbWF5IG1ha2UgaXQgZ2VuZXJpYy4KLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
aGFzSXRlcmFibGVQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGlu
ZGV4KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxs
cHRyKTsgLy8gc3RvcmFnZSBmb3IgSW5kZXhlZE1vZGUgb25seS4KKyAgICAgICAgICAgIE5vZGUq
IHVwZGF0ZWRJbmRleEFuZE1vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRv
ck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8oc2Vlbk1vZGVzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRNb2RlID0gYWRkVG9H
cmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCB1cGRhdGVkSW5kZXhBbmRNb2RlKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX21vZGUsIHVwZGF0ZWRNb2RlKTsKKworICAgICAgICAg
ICAgTm9kZSogdXBkYXRlZEluZGV4ID0gYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RJ
bmRleCwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9p
bmRleCwgdXBkYXRlZEluZGV4KTsKKworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fcHJvcGVy
dHlOYW1lLCBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB1cGRh
dGVkSW5kZXgsIHVwZGF0ZWRNb2RlLCBlbnVtZXJhdG9yKSk7CisKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudW1lcmF0b3JfbmV4dCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9w
X2dldF9kaXJlY3RfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7Ci0gICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6IHsKKyAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFy
cmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4
aXQoKTsKKwogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwot
ICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eU5hbWUgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgTm9kZSogaW5kZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7Cisg
ICAgICAgICAgICBOb2RlKiBtb2RlID0gZ2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAgICAgICAgICAg
ICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CiAKKyAgICAg
ICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gT3B0aW9uU2V0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6TW9kZT46OmZyb21SYXcobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgICAg
ICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9T
UkV4aXQpOworCisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYWRNb2RlID0g
YWRkVG9HcmFwaChBcml0aEJpdEFuZCwgbW9kZSwganNDb25zdGFudChqc051bWJlcihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBBcml0aEJp
dEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNvIGl0J3Mgb2sgdG8gZXhpdCBoZXJlLgorICAgICAg
ICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEV4
aXRPSyk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJ
bmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzTnVtYmVyKDApKSksIGJhZE1vZGUpOworCisgICAg
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5k
ZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxw
dHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXRC
eVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsK
KworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGVudW1lcmF0b3IpOworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVja2luZyBmb3IgYSBCYWRDb25zdGFudFZh
bHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNlIHRoZSBHZW5lcmljIHZhcmlhbnQgaWYgd2Ugc3dp
dGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJbmRleGVkTW9kZSArIE5hbWVkTW9kZSBldmVuIHRo
b3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAgICAgICAgICBpZiAoIXNlZW5Nb2Rlcy5jb250
YWluc0FueSh7IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoIH0pCisg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbW9kZVRlc3QgPSBhZGRUb0dyYXBoKFNhbWVWYWx1ZSwgbW9kZSwganNDb25zdGFu
dChqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlKSkpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25z
dGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzQm9vbGVhbihmYWxzZSkpKSwgbW9k
ZVRlc3QpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNl
IHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRC
eVZhbC4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJv
cGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0
byBtYXRjaCBHZXRCeVZhbC4KICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGlj
dGlvbikpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2Rl
OjpWYXJBcmcsIEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKIAotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X2RpcmVjdF9wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcjogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUu
bV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3IpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9pbl9ieV92YWw6
IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CiAK
LSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogewotICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLAotICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2luZGV4
KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUpOwotICAgICAgICB9CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKIAotICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvciksCi0gICAgICAg
ICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKLSAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3RyaW5nLCBnZXQoYnl0ZWNv
ZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmlu
Zyk7CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHk6IHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckhhc093blByb3BlcnR5PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwor
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Vu
dW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2dldF9pbnRlcm5hbF9maWVsZDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmNwcAppbmRleCBjYzBkMDE0ZGEyOTMxZmYzZWNkY2U5NDI5Y2MyNjI1NjFlMmY3Zjc2Li4w
NmQxOWQxNzM5NzMwM2Y3NDFiZTZiMDJiZjAxMDU3ZjcyMjU2NDgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBkYXRhTG9nKCIgICBGb3VuZCBtdXN0LWhhbmRsZSBibG9jazogIiwgKmJs
b2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgbWVyZ2VzIHNuYXBzaG90IG9m
IHN0YWNrIHZhbHVlcyB3aGlsZSBDRkEgcGhhc2Ugd2FudCB0byBoYXZlIHByb3ZlbiB0eXBlcyBh
bmQgdmFsdWVzLiBUaGlzIGlzIHNvbWV3aGF0IHRyaWNreS4KLSAgICAgICAgLy8gQnV0IHRoaXMg
aXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlkYXRlcyB0aGUgaW5wdXRzIHdpdGgg
KnByb3ZlbiogQWJzdHJhY1ZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMK
KyAgICAgICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlk
YXRlcyB0aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY3RWYWx1ZSB2YWx1ZXMuIEFuZCBp
dCB0dXJucyBvdXQgdGhhdCB0aGlzCiAgICAgICAgIC8vIHR5cGUgd2lkZW5pbmcgaXMgY3JpdGlj
YWwgdG8gbmF2aWVyLXN0b2tlcy4gV2l0aG91dCBpdCwgbmF2aWVyLXN0b2tlcyBoYXMgbW9yZSBz
dHJpY3QgY29uc3RyYWludCBvbiBPU1IgZW50cnkgYW5kCiAgICAgICAgIC8vIGZhaWxzIE9TUiBl
bnRyeSByZXBlYXRlZGx5LgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBjNzE2NGIzMGY0
NjRlYjBkNDM4MmUyY2NhNDJkNTY5OTY0ZDFiZjY3Li5hYzc4MmQ5OWI0NTNjNTA4MjYxYTdmM2E4
Nzk1NTg4MDBkMDA1Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCkBAIC0yNTQsMTcgKzI1NCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJ
CiAgICAgY2FzZSBvcF9oYXNfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX2dldF9zY29wZToK
ICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoOgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eToKLSAg
ICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHk6Ci0gICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBv
cF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6
Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKLSAgICBjYXNlIG9wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKLSAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAg
ICBjYXNlIG9wX25ld19mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jOgpAQCAtMjk5LDYgKzI4OSwxMCBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSQogICAgIGNhc2Ugb3Bfc2V0X3ByaXZhdGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9j
aGVja19wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX2VudW1lcmF0b3JfbmV4dDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOgorICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9oYXNfb3duX3Byb3BlcnR5OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
IAogICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAppbmRleCA5ZDEwMDRmZTUzZjNkNDQ3ZGYxMDNmYWNhMGQyZTEwZWM0ZmY1ZjQ2
Li41ZGQ2NTE0ZDFlMWFmY2E3YzM3YWMxOTg4YWFiMzIxNGI3ZmI2YWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheU9yRW1wdHk6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
R2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0
VmVjdG9yTGVuZ3RoOgpAQCAtMTY0LDcgKzE2OCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgogICAg
ICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5OgogICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0FuZDoKICAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgpAQCAtMzM3
LDIxICszNDAsODAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgd3JpdGUoTWF0
aERvdFJhbmRvbVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBHZXRFbnVtZXJh
YmxlTGVuZ3RoOiB7Ci0gICAgICAgIHJlYWQoSGVhcCk7Ci0gICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RJbmRleDogeworICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNhc2UgVG9JbmRleFN0cmluZzoKLSAgICBjYXNlIEdldEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsK
LSAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgcmVhZChOYW1lZFByb3BlcnRpZXMpOworICAg
ICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpICE9IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIGNsb2Ji
ZXJUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFycmF5
TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CisgICAgICAgICAgICB3cml0
ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0
aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywg
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwg
TGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
cmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNsb2JiZXJUb3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eTogeworICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJlYWQoSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KTsKICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewpAQCAtNzA1LDYgKzc2Nyw4IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNlIFRv
UHJvcGVydHlLZXk6CiAgICAgY2FzZSBJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAg
LTcxNiwxMiArNzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6
CiAgICAgY2FzZSBUb09iamVjdDoKLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0
cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNl
IEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgIGNh
c2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICBjYXNlIFRvTnVtYmVyOgogICAgIGNhc2UgVG9OdW1l
cmljOgpAQCAtOTA2LDYgKzk2NSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0
PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGZhciB0b28gY29uc2VydmF0aXZlIGZvciB0aGUgY2hpbGQxKCkudXNlS2luZCgpID09IElu
dDMyVXNlIGNhc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY2xv
YmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEdl
dEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZlYTkxZGYyMjRi
ZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1
M2MzN2UxOGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
MjA1LDcgKzIwNSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgogICAg
IGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hl
Y2tCYWRWYWx1ZToKQEAgLTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIEdldEJ5SWRX
aXRoVGhpczoKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CiAg
ICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhl
ZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAg
IGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6Ci0g
ICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJv
cGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSGFz
UHJpdmF0ZU5hbWU6CkBAIC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBUaHJvd1N0
YXRpY0Vycm9yOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNhc2UgR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1h
dGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3Jl
YXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5
NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li43ZjIxYWE0NGRiZGM2ODQ4YTViODU0ZTg3NDYwY2RmNTRl
Njc2MzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
QEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEw
NjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUo
KS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9T
UiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE5hbWVkTW9kZS4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV0Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlw
ZShBcnJheTo6R2VuZXJpYykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTEwOTYsNyArMTExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0
aGUgZnVsbC1ibG93bgogICAgICAgICAgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzIHNsb3cg
cGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBOZWdhdGl2ZUluZGV4KSkKQEAgLTExMTEsNyArMTEyNyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6SW5Cb3VuZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3Bl
Y3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0
IGNhcmUKQEAgLTExMjEsNyArMTEzNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBOZWdhdGl2ZUluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5l
Q2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTc4LDcgKzExOTQsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAorCisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3Qgc2V0IGEgbm9uLUpTVmFsdWUgcmVz
dWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgc2luY2Ugd2UgY291bGQgc3RpbGwgZG8gYSBOYW1l
ZE1vZGUgcHJvcGVydHkgYWNjZXNzLiBXZSBhbHNvIGRvbid0IGhhdmUgYSBnb29kIHdheSB0bwor
ICAgICAgICAgICAgLy8gcHJvdmUgdGhlcmUncyBubyBzdHJ1Y3R1cmUgcHJvcGVydGllcyBhdCB0
aGlzIHBvaW50LgorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5
VmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgc3dpdGNoIChhcnJheU1v
ZGUudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAg
ICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpCkBAIC0yMjc1LDI4ICsyMjk1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhF
ZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93
bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duU3RyaW5nVXNlPihub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewor
ICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKAogICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKQEAgLTIzMTUsMzYgKzIzMTQsNjQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsIEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAgICAgICBFZGdlJiBiYXNlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UmIHByb3BlcnR5
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIEVkZ2UmIGluZGV4
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgIEVkZ2UmIGVudW1l
cmF0b3IgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihiYXNlKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihwcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihpbmRleCk7Ci0gICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKICAgICAg
ICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBu
YW1lOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAg
IEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAg
RWRnZSYgaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAg
RWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFk
YXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkt
PnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSktPnByZWRpY3Rpb24oKSkpOworCisgICAgICAgICAgICAgICAgZml4RWRnZTxD
ZWxsVXNlPihiYXNlKTsKKyAgICAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGJhc2Us
IGluZGV4LCBzdG9yYWdlRWRnZSk7CisKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlN
b2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5i
ZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHNldFNhbmVD
aGFpbklmUG9zc2libGUobm9kZSwgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzID8gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91bmRzU2Fu
ZUNoYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmICFt
X2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUpKQorICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMy
VXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVj
dGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0Lgog
ICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5l
ZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKQEAgLTM2
OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAorICAgIHZvaWQg
c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9uOworICAgICAg
ICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKSB7CisgICAg
ICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsgb24gYSBwZXIt
dHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEp
IFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJuIHVuZGVmaW5l
ZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNoYW5nZSB0byB0
aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAgICAgLy8gdGhp
bmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBhY3R1YWxseSBo
YWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9tIGEgaG9s
ZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2VseSB0aGUgYmVz
dCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQgb2YKKyAgICAg
ICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5vdyB3ZSBq
dXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5hTiBhcmUgaW5k
aXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiwgYW5kIGp1
c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0IGNhc2UuIFRo
aXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRvIGhhdmUgdG8g
ZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0byBVbmRlZmlu
ZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3YW50IHRvCisg
ICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMyLiBGSVhN
RTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAvLyBiYXNlZD8K
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGljYXRpb25z
LiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAgICAgICAgICAg
IC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNo
ZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9s
ZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAgICAgIC8vIG91
dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKKworICAg
ICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5z
cGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0
ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAg
ICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5h
dHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHJldHVybmVk
IGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0aWxsIGRv
CisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVpcmUgdGFr
aW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgp
ICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9n
cmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJv
dW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3Vs
YXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFp
blNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAg
ICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vz
bid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAv
LyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRC
aXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYg
IW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4
KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0
T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAgICAgICBzZXRT
YW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7CisgICAgfQor
CiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFycmF5OjpTcGVj
dWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2MzI1YzVk
NGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQxOTJkMTc1MmQ0
NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAt
Mzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
Y2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRT
dGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygp
KTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRp
bWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQwZWY0MDMzMGMy
MzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4OTIyMTUxZTQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9w
dGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVOb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgu
CiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0UmVsYXRpb25z
aGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAgICAgICAgICAg
c2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4NmQzOTNmZDg3
YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2
NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTEx
LDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyU2V0
UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToK
KyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBicmVhazsKIAor
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBTdHJD
YXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2ZDBhNDM4ZTVl
ZDgxLi40NzA2NTZiZWY4NTg4NTk5NTExMjI2OGY5ZGE5MGJmYzBhMTEyYjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkRlbGV0
ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRl
ICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAgICAgICBjYXNl
IEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdl
dEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKICAgICAgICAg
Y2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAg
ICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFz
U3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAg
ICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0Ogor
ICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JH
ZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAg
ICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NF
eGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNz
T3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6
CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAg
ICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAg
IGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIHN0b3Jh
Z2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdlQ2hpbGQoKSk7
CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAg
ICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2lu
dEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRC
eVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgorICAgICAgICBj
YXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKKyAg
ICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0xvYWQ6Cisg
ICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToKKyAgICAg
ICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6CisgICAgICAgICAg
ICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBBcnJheVBvcDoK
KyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAyOworCisg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0dXJuIDI7CisK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
ICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3MgdG8gZGV0ZXJt
aW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiArMjI4MiwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgpAQCAtMjIx
Niw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICBj
YXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgY2FzZSBBdG9t
aWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0Nv
bXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJl
NTY1NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdl
bmVyYXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAg
ICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVy
ZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBt
YWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRv
SW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFw
IGFuZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3
ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLjViOTk5MGNjZjI3NTVlYjcxOGIxOTk4YmYyYzMxNDVkMTM1
MzNmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNl
KTsKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFt
ZSkpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxP
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAg
ICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1v
ZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1l
U3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9i
amVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpO
dW1iZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5k
ZXgpOworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBt
b2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3It
PnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVu
dW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVW
YWx1ZSwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51
bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5n
ZXRPYmplY3QoKS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpT
U3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFs
KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwg
aW50MzJfdCBtb2RlTnVtYmVyKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5z
dHJpbmcoKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFz
T3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9w
ZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHBy
b3BlcnR5TmFtZVZhbHVlKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50
b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2Us
IGlkZW50aWZpZXIpKSkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
TmV3UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogcmVnZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFm
ZWRlNTk1ZDBmYjhmYTgzNWVmNzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQx
M2JmMTg4MGNlNzYzNGVlMzEzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5z
dGFuY2U7CiBjbGFzcyBKU0JpZ0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsK
K2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTEwNCwxMiArMTA1LDE0IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvdG90eXBlT2YsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqLCBpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25I
YXNFbnVtZXJhYmxlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEpTU3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25JblN0cnVjdHVyZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiwgSlNTdHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBK
U0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQz
Ml90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dWludDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikp
OworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0
SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwg
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3Ry
dWN0dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3
ZTMwNmJhYjg1MzdjMGU4OWUyZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1
ZTM3NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsK
ICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAg
ICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hp
bGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51
bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxl
SW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAg
ICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNh
c2UgUmVnRXhwRXhlYzoKQEAgLTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEdldFByaXZhdGVOYW1lOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAg
ICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgog
ICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1l
cmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBJbkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBI
YXNQcml2YXRlTmFtZToKICAgICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNh
c2UgSGFzT3duUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0g
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZTogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7
CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAg
ICAgICAgICAgLy8gVGhpcyBjYW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJh
bmNoIG9mIHRoYXQgY2FzZSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50
IHRvIG1lc3Mgd2l0aAorICAgICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAg
IHNldFByZWRpY3Rpb24oU3BlY0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQ
cm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZh
bHVlIHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3Ry
aW5nLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDog
ewogICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHBy
b2R1Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0
IHByb2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBj
OTYzN2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJi
ZWFiMDJhZDBjNTEzZGRiNDljYTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91
bmRzQ2hlY2sobV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwg
MSksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewog
ICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJk
MGI5YjQ2MGUyYzUwLi4xZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2
LDEwICsyOTYsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRl
LCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRv
TnVtYmVyOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5
OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWU6Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJv
b2wgaWdubwogICAgICAgICAvLyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBp
biBjb250cm9sIGZsb3cgaGVyZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoK
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxl
bmd0aDoKQEAgLTQ5Niw2ICs0OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAg
ICAgcmV0dXJuIGlzU2FmZTsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOgorICAgIC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0
cyBidXQgdGhleSdsbCBvbmx5IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUgc28gd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNl
IFRvVGhpczoKICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpA
QCAtNTk1LDYgKzU5Nyw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNh
c2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAg
ICBjYXNlIEhhc093blByb3BlcnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgogICAgIGNhc2UgTXVsdGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1
MThhNjA4NzEzNDJkNjQ0ZWQ5NzhiMWU1YjguLjE0ODcyMjJhYzUzMDZlMzk3ZWUyZDYzNGUzNjVm
NTZiYjdhMjBhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1Zh
bHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQp
Ci0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0
LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVS
ZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBS
ZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1f
cGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNl
bmRpZgogewotICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1f
cGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAg
bV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3Bh
eWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAg
LTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29k
ZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJy
ZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3Ry
aW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVn
cywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAw
KSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFs
aWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0
VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6
IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVy
IG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6
Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRh
Rm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsy
NjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1
Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFBy
b3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdl
bmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdz
KHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKLSAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAg
ICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5n
SW50LAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwot
I2Vsc2UKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChz
Y3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0g
ZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9k
ZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2Rl
KE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5
UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9h
ZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBp
ZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBp
c1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChz
aG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
bk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0
LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6
OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlz
VUludDMyKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBl
KSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3Vs
YXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBz
dHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9k
ZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAg
QVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUs
IFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAg
ICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7
CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1p
dFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAg
bG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcs
IHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNh
blNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwg
cmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2Fk
UmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
IH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgK
QEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1
bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBU
eXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwog
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJl
c3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcs
IHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5
VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAK
LSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERh
dGFGb3JtYXRKUykgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcw
Myw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0
aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmlu
ZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJS
ZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0
SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCks
IGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9i
amVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFH
UFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIg
PSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQz
MlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3Qg
U2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3Jt
YXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgw
ODIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1
bWVudHMoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgLy8gVE9ETzogQXJlIGJvdGggb2YgdGhlc2UgbmVj
ZXNzYXJ5Pz8KICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0g
c2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsK
ICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKKworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKQEAgLTEzNDQyLDQ0
ICsxMzQ0NywzMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRocm93U3RhdGljRXJy
b3IoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKiBu
b2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGVudW1lcmF0
b3IpOworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworCisg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIG1vZGVHUFIgPSBt
b2RlLmdwcigpOwogICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsK
KworICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgUmV1c2UsIGlu
ZGV4KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBpbmNyZW1lbnRMb29wOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lOworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geworCisgICAgICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGluaXRNb2RlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBt
b2RlR1BSKTsKKworICAgICAgICAgICAgaW5jcmVtZW50TG9vcCA9IG1faml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2guZ3ByKCkpOwor
CisgICAgICAgICAgICBpbml0TW9kZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25lID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaC5ncHIo
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzY3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Cisg
ICAgICAgIH0pKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkubGlua1RvKGluY3JlbWVudExvb3AsICZtX2pp
dCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkg
PDwgMzIpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0Lm9yNjQoc2Ny
YXRjaC5ncHIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChu
b2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5h
bWVkTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwor
CisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGVudW1lcmF0b3IuCisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgp
LCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAg
ICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBtX2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBi
YXNlUmVncyA9IGJhc2UucmVncygpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BS
KTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleChOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVwZGF0
ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVncyA9
IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYWly
UmVncy5wYXlsb2FkR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIG1faml0LmFuZDMy
KFRydXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXls
b2FkR1BSLCByZXN1bHRHUFIpOworCiAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9w
ZXJ0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBh
aXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGFpckdQUiA9IGlzNjRCaXQoKSA/IHBhaXJS
ZWdzLnBheWxvYWRHUFIoKSA6IHBhaXJSZWdzLnRhZ0dQUigpOwogCi0gICAgSlNWYWx1ZVJlZ3Mg
YmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBt
X2ppdC5yc2hpZnQ2NChwYWlyR1BSLCBUcnVzdGVkSW1tMzIoMzIpLCByZXN1bHRHUFIpOworI2Vs
c2UKKyAgICBtX2ppdC5tb3ZlKHBhaXJHUFIsIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICBtX2pp
dC5hbmQzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlv
bk1vZGVNYXNrKSwgcmVzdWx0R1BSKTsKKworICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBpbmRleE9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvck9wZXJhbmQodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworCisgICAgR1BSUmVnIGluZGV4ID0gaW5kZXhPcGVyYW5kLmdwcigpOworICAg
IEdQUlJlZyBtb2RlID0gbW9kZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIGVudW1lcmF0b3Ig
PSBlbnVtZXJhdG9yT3BlcmFuZC5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
SlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVncywgcHJvcGVydHlHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcik7CiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgbm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9k
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSog
bm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmVTbG93UGF0aDsKKworICAgICAg
ICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQpIHsKKyAgICAgICAg
ICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdl
RWRnZSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLmVtcGxhY2UodGhpcywgc3RvcmFnZUVkZ2Up
OworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgNSkpOworCisgICAgICAgICAgICBHUFJSZWcgbW9kZUdQUiA9IG1v
ZGUuZ3ByKCk7CisgICAgICAgICAgICBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgcmVzdWx0UmVncyA9
IHJlc3VsdC5yZWdzKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpOworCisgICAgICAgICAgICBib29sIGhhdmVTdG9yYWdlID0gISFzdG9y
YWdlRWRnZTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlVGVtcG9yYXJ5OworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdl
KSB7CisgICAgICAgICAgICAgICAgc3RvcmFnZVRlbXBvcmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlz
LCBSZXVzZSwgZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2VUZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG5vdEZhc3ROYW1lZENhc2VzOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGdlbmVyYXRlIHRoaXMgY29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGFuIG9i
amVjdC4KKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIGJhc2UgaXMgYSBjZWxsIGhlcmUgc2luY2Ug
d2Ugd29uJ3QgZ2VuZXJhdGUgTmFtZWRNb2RlIHByb3BlcnRpZXMgZm9yIG5vbi1vYmplY3RzLgor
ICAgICAgICAgICAgICAgIC8vIFRPRE86IHB1dCBBc3NlcnQgaGVyZT8KKworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYg
d2Uga25vdyB0aGVyZSdzIG9ubHkgb25lIHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBl
bWJlZCBpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisKKyAgICAgICAgICAgICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNo
b3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byByZXByZXNlbnQgSW5kZXhlZCtOYW1lZD8KKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCkgPT0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAzKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGJh
ZFN0cnVjdHVyZVNsb3dQYXRoID0gYmFkU3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKGJhZFN0cnVjdHVy
ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgICAg
ICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5s
aW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworCisgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUNlbGxHUFIs
IGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
aXQncyBvdXQgb2YgbGluZQorICAgICAgICAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIoc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlQ2VsbEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgfSkpOworCisgICAgICAgIC8vIFdlIHJlbHkgb24gY29tcGlsZUdldEJ5VmFsIHRv
IGNhbGwganNWYWx1ZVJlc3VsdCBmb3IgdXMuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGtp
bmRhIGhhY2t5Li4uCisgICAgICAgIEFTU0VSVChnZW5lcmF0aW9uSW5mbyhub2RlKS5qc1ZhbHVl
UmVncygpID09IHJlc3VsdFJlZ3MgJiYgZ2VuZXJhdGlvbkluZm8obm9kZSkucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0SlMpOworCisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93UGF0
aC5pc1NldCgpKQorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KGJhZFN0cnVjdHVyZVNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5h
bWVBbmRHZXRCeVZhbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VDZWxsR1BSLCBpbmRleEdQUiwgZW51bWVyYXRvckdQUikpOworCisgICAgICAgIGRvbmVDYXNl
cy5saW5rKCZtX2ppdCk7CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2lu
ZCgpKSkgeworICAgICAgICAvLyBVc2UgbWFudWFsIG9wZXJhbmQgc3BlY3VsYXRpb24gc2luY2Ug
Rml4dXAgbWF5IGhhdmUgcGlja2VkIGEgVXNlS2luZCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gQ2Vs
bFVzZS4KKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZU9wZXJhbmQodGhpcywgYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRn
ZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShOb2RlKiBub2RlLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9uKQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIp
IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMykpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOwogCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJp
bmcsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKLSAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlOYW1lUmVncyA9IHByb3BlcnR5TmFtZS5y
ZWdzKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBH
UFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvci5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKwor
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlKS5tX3R5cGUgJiB+U3BlY0NlbGwp
CisgICAgICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxs
KGJhc2UpKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRoaXMg
Y29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGEgY2VsbC4KKyAgICAgICAgb3BlcmF0aW9uQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQ
UiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOwor
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOworCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsoJm1faml0KTsKKworICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigp
KTsKKyAgICAgICAgYXV0byBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKGJhc2VDZWxsR1BSLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyNlbHNlCisgICAgICAgIGF1dG8gYmFzZVJlZ3MgPSBiYXNlOwor
I2VuZGlmCisgICAgICAgIGNhbGxPcGVyYXRpb24oc2xvd1BhdGhGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eU5hbWVSZWdz
LCBpbmRleEdQUiwgbW9kZUdQUik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgYmxlc3NlZEJvb2xlYW5SZXN1
bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOworICAgIH07CisKKyAgICBpZiAoaXND
ZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UuZ3ByKCksIGJhc2Uu
Z3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
YmFzZUVkZ2UpOworICAgICAgICBnZW5lcmF0ZShiYXNlLnJlZ3MoKSwgYmFzZS5yZWdzKCkucGF5
bG9hZEdQUigpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9ySW5CeVZhbChOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJv
cGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqIG5vZGUpCit7
CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJh
dG9ySGFzT3duUHJvcGVydHkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlJZEZsdXNoKE5vZGUqIG5vZGUpCkBAIC0xMzYyMiw2NyArMTM5MDEsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKICAgICBibGVzc2Vk
Qm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2RlKQotewotICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQot
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdTdHJ1Y3R1cmU7Ci0KLSAgICB3cm9uZ1N0
cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdzKSk7Ci0KLSAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZ3MucGF5bG9hZEdQUigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIG1vdmVUcnVlVG8o
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJv
cGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywg
cHJvcGVydHlHUFIpKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSwgbm9kZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoTm9kZSog
bm9kZSwgRnVuY3Rpb24gc2xvd1BhdGgpCi17Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdT
dHJ1Y3R1cmU7Ci0KLSAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOwotICAgIHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigpLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICBtb3ZlVHJ1
ZVRvKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgc2xvd1BhdGgsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOwotICAg
IGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKLX0K
LQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KE5v
ZGUqIG5vZGUpCi17Ci0gICAgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2Rl
LCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgY29t
cGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2RlLCBvcGVyYXRpb25JblN0cnVjdHVy
ZVByb3BlcnR5KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5
RW51bWVyYXRvcihOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgewpAQCAtMTM3MDksMzkgKzEzOTI3LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKiBub2RlKQogICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEVudW1lcmF0b3JQbmFtZShOb2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSB8fCBub2RlLT5vcCgpID09IEdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3Io
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVn
IGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBpbmRleEdQUiwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgKG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKQotICAgICAg
ICAgICAgPyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXhPZmZzZXQoKQotICAgICAgICAgICAgOiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1faml0Lm1vdmVWYWx1ZShqc051
bGwoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwotICAgIGluQm91bmRzLmxpbmsoJm1faml0KTsKLQotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7Ci0jZW5kaWYKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRF
eGVjdXRhYmxlKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rp
b24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTQ5MzQsMjggKzE1MTE5LDI4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2Rl
LCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9u
X0dDWiBzbG93UGF0aE9wZXJhdGlvbiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BS
UmVnLCBHUFJSZWc+KCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CiAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIEFycmF5TW9kZSBtb2RlID0g
bm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgIGNhc2Ug
QXJyYXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgQVNT
RVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAg
IEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5k
ZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
IAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwog
CiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE0OTgzLDEyICsxNTE2OCwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5v
ZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BS
LCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5k
cygpKQpAQCAtMTUwMTIsMTMgKzE1MTk5LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFn
ZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZp
eCgpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgb3V0T2ZC
b3VuZHMpOwpAQCAtMTUwNDcsNzMgKzE1MjM2LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNs
CiAgICAgZGVmYXVsdDogewogICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgVHlwZWRBcnJheXMg
aW4gSGFzSW5kZXhlZFByb3BlcnR5IElDCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJl
c3VsdEdQUikgPSBwcmVmaXgoKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgc2xvd1BhdGhPcGVyYXRpb24sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGluZGV4R1BSKSk7
Ci0KLSAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci19Ci0KLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREaXJlY3RQbmFtZShOb2RlKiBub2RlKQotewot
ICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsK
LSAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDEpOwotICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMik7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsK
LSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwot
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eS5ncHIoKTsKLQotICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgaW5kZXgodGhpcywgaW5kZXhFZGdlKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVt
ZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBHUFJS
ZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVu
dW1lcmF0b3IuZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBzbG93UGF0aC5hcHBl
bmQoCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldAotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAotICAgICAgICBpbmRleEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0KLSAgICBtX2ppdC5sb2FkVmFs
dWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdFJlZ3MpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKLQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKLSAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKLSAgICBt
X2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKLSAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zaWduRXh0ZW5k
MzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIG1faml0Lmxv
YWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsoJm1faml0KTsKLQotICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHlHUFIpKSk7Ci0KLSAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA5OGM3NjE2YjhmZDJmYmY1YzRkZDhh
NTc3MTUwOGFkMjY3OWY5OWQxLi5kMTIwYjdiNGZiODQ0MzY5ZDcyY2Q2MDE4MWJjMDhjMGI2Yzkx
N2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CkBAIC00Nyw2ICs0Nyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNs
YXNzIEdQUlRlbXBvcmFyeTsKK2NsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OwogY2xhc3MgSlNW
YWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZl
SklUOwpAQCAtMjQ2LDYgKzI0Nyw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgR1BSUmVnIGFsbG9j
YXRlKEdQUlJlZyBzcGVjaWZpYykKICAgICB7CisgICAgICAgIGlmIChzcGVjaWZpYyA9PSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdGUoKTsKICNpZiBFTkFCTEUoREZHX1JFR0lT
VEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxv
Y2F0aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKQEAgLTEzNDUsMTIg
KzEzNDgsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQ
dXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICB9CiAgICAgCisgICAg
Ly8gV2UgdXNlIGEgc2NvcGVkTGFtYmRhIHRvIHBsYWNhdGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2
YWxpZGF0aW9uLgorICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKE5vZGUqLCBjb25zdCBTY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKwogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQo
Tm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1h
dCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZUZyb21DaGFyQ29kZShOb2RlKik7IAogCi0g
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7Ci0gICAgdm9p
ZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9y
bWF0KT4mIHByZWZpeCk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFG
b3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAKICAgICB2b2lk
IGNvbXBpbGVHZXRQcml2YXRlTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJpdmF0
ZU5hbWVCeUlkKE5vZGUqKTsKQEAgLTE0MjQsMTIgKzE0MzAsMTIgQEAgcHVibGljOgogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGp1bXBGb3JUeXBlZEFycmF5SXNEZXRhY2hlZElmT3V0T2ZCb3VuZHMo
Tm9kZSosIEdQUlJlZyBiYXNlR1BSLCBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyk7CiAg
ICAgdm9pZCBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKE5vZGUqLCBHUFJSZWcgYmFzZUdQUiwg
R1BSUmVnIGluZGV4R1BSKTsKICAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNl
dChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSos
IFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpT
VmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVm
aXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5
VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0
eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTdHJpbmcoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN5bWJvbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3RyaW5nKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSosIGNvbnN0IFNjb3Bl
ZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHBy
ZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2Vs
bFdpdGhTdHJpbmcoTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGls
ZDMpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSosIEVk
Z2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsV2l0aFRoaXMoTm9kZSopOwpAQCAtMTQ1OCw3ICsxNDY0LDcgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgICAgIEVkZ2UgdmFsdWVVc2UpOwogICAgIHZvaWQgbG9hZEZyb21JbnRUeXBl
ZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyByZXN1
bHRSZWcsIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIHNldEludFR5cGVkQXJyYXlMb2FkUmVz
dWx0KE5vZGUqLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSwgYm9vbCBjYW5TcGVj
dWxhdGUpOworICAgIHZvaWQgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSwgYm9v
bCBzaG91bGRCb3gpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgY29t
cGlsZU5ld0Z1bmN0aW9uQ29tbW9uKEdQUlJlZywgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgR1BSUmVn
LCBHUFJSZWcsIEdQUlJlZywgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Jiwgc2l6ZV90LCBGdW5j
dGlvbkV4ZWN1dGFibGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKQEAgLTE1MjQsMjEgKzE1MzAs
MjIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRvTG93ZXJDYXNlKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVUaHJvdyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVGhyb3dTdGF0aWNFcnJv
cihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChOb2RlKik7Ci0g
ICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKLSAg
ICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZVRvSW5kZXhTdHJpbmcoTm9kZSopOworCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5v
ZGUqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoTm9kZSosIFNsb3dQYXRoRnVuY3Rpb25U
eXBlKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqKTsKKwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
UHV0QnlJZFdpdGhUaGlzKE5vZGUqKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKE5vZGUqLCBGdW5j
dGlvbik7Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwot
ICAgIHZvaWQgY29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZUdldERpcmVjdFBuYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVu
dW1lcmF0b3IoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0RXhlY3V0YWJsZShOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlR2V0R2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRTZXR0ZXIoTm9kZSopOwpA
QCAtMTU2OCw3ICsxNTc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUNhbGxOdW1iZXJD
b25zdHJ1Y3RvcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbChOb2RlKik7
Ci0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlv
bl9HQ1opOworICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiwgU19KSVRP
cGVyYXRpb25fR0NaLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJl
Zz4oKT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUNsZWFyQ2F0Y2hMb2NhbHMoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZVByb2ZpbGVUeXBlKE5vZGUqKTsKQEAgLTE5MjYsNiArMTkzMyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCisgICAgSlNWYWx1ZVJlZ3MgcmVn
cygpIHsgcmV0dXJuIGpzVmFsdWVSZWdzKCk7IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
R1BSUmVnIGdwcigpCiAgICAgewpAQCAtMTk2NSw3ICsxOTc0LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIoKSk7CiAgICAgfQogCi0g
ICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCkKKyAgICBHUFJSZWcgZ3ByKFdoaWNo
VmFsdWVXb3JkIHdoaWNoID0gUGF5bG9hZFdvcmQpCiAgICAgewogICAgICAgICByZXR1cm4ganNW
YWx1ZVJlZ3MoKS5ncHIod2hpY2gpOwogICAgIH0KQEAgLTIwMDMsMjEgKzIwMTIsMjAgQEAgcHJp
dmF0ZToKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKKyAgICBTdG9yYWdlT3BlcmFuZCgpID0gZGVmYXVsdDsKKwogICAgIGV4cGxp
Y2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKICAgICAg
ICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJP
ckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdCk7Ci0g
ICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2lu
ZCgpID09IEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkp
Ci0gICAgICAgICAgICBncHIoKTsKKyAgICAgICAgZW1wbGFjZShqaXQsIGVkZ2UpOwogICAgIH0K
ICAgICAKICAgICB+U3RvcmFnZU9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3By
T3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3By
T3JJbnZhbGlkKTsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAg
CiAgICAgRWRnZSBlZGdlKCkgY29uc3QKQEAgLTIwMzYsNiArMjA0NCwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShlZGdlKCkpOwog
ICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQorCisgICAgdm9pZCBlbXBsYWNl
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1faml0ID0g
aml0OworICAgICAgICBtX2VkZ2UgPSBlZGdlOworICAgICAgICBBU1NFUlQobV9ncHJPckludmFs
aWQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VSVChtX2ppdCk7CisgICAgICAgIEFT
U0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtu
b3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCisgICAgICAg
ICAgICBncHIoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKQEAgLTIwNDMs
OSArMjA2Miw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNwZWN1bGF0
aXZlSklUKiBtX2ppdDsKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQgeyBudWxscHRyIH07CiAg
ICAgRWRnZSBtX2VkZ2U7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOworICAgIEdQUlJlZyBt
X2dwck9ySW52YWxpZCB7IEludmFsaWRHUFJSZWcgfTsKIH07CiAKIApAQCAtMjEzNCwxMSArMjE1
MywxOSBAQCBjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB7CiBwdWJsaWM6CiAgICAgSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJ
VCopOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNw
ZWNpZmljUGF5bG9hZCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZpY1BheWxvYWQsIEdQUlJlZyBz
cGVjaWZpY1RhZyk7CisjZW5kaWYKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdo
aWNoVmFsdWVXb3JkIHJlc3VsdFJlZ1dvcmQgPSBQYXlsb2FkV29yZCk7CiAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgSlNWYWx1ZU9wZXJhbmQmKTsK
ICAgICB+SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgeyByZXR1cm4gISFyZWdzKCk7IH0KKworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
JiBvcGVyYXRvcj0oSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmJikgPSBkZWZhdWx0OworCiAgICAgSlNW
YWx1ZVJlZ3MgcmVncygpOwogCiBwcml2YXRlOgpAQCAtMjE1MCw2ICsyMTc3LDI2IEBAIHByaXZh
dGU6CiAjZW5kaWYKIH07CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2
ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCisgICAgOiBt
X2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQoreworfQorI2Vsc2UKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRp
dmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdoaWNoVmFsdWVXb3JkIHJlc3VsdFdv
cmQpCit7CisgICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQpIHsKKyAgICAgICAgbV9w
YXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgICAgICBt
X3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGF5
bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBv
cmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKKyAgICB9Cit9CisjZW5kaWYKKwogY2xhc3MgRlBS
VGVtcG9yYXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CmluZGV4IDlkNDAzNjk2MTBkODllNDFlNTE2ZjZjNGE0MjVlNWZkNzEwMmExYmUuLmFiYzhkMThh
YTM5NzY0YTJmOWMwYzA3NDFjZmQxZTlhNThkZGM0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgxMiw2ICsx
ODEyLDMzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFs
KE5vZGUqIG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZQogICAgIG5vUmVzdWx0KG5vZGUsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7ICAgIAogfQogCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVw
bGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4m
IHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2lmIENPTVBJ
TEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQorICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDAp
OworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogewor
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0
aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5k
ZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRC
eVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhu
b2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51
c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJs
eSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJv
cGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZp
eChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MpOworICAgICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1Zh
bHVlUmVncygpOworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5q
c1ZhbHVlUmVncygpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAg
IHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMp
OworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
YzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRl
QW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBt
X3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRo
aXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCBy
ZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKKworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlz
VHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJh
dG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VSZWdzLCBwcm9wZXJ0
eVJlZ3MpOworCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkp
OworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKKyAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZv
cm1hdEludDMyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzU2FuZUNoYWluKCkpOworCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsCisg
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCks
CisgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxv
YWRPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BS
KCksIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MudGFn
R1BSKCkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisg
ICAgICAgICAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJl
c3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omln
bm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVt
cHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgo
RGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOworICAgICAgICAgICAg
aWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUo
cmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYgIXJlc3VsdFJlZ3MpOworICAg
ICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBG
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZw
cigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgIGJveERvdWJsZSh0ZW1wUmVn
LCByZXN1bHRSZWdzKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7
CisKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRSZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVm
aXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0
LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChob2xlKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RB
cmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6
U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiB7CisgICAgICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4
KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKQEAgLTIyMzMsNyArMjU2MiwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIFN0
cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24gU3RyaW5nQ2hhckF0IG5vZGUgaGF2
aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0gICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7Cisg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+
KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJl
ZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTIyNjUsMzI2ICsyNTk5LDI3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZv
cmNlRXhpdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jaWYg
Q09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCi0gICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVS
ZWdzKCksIDApOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBpbmRleCk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLQotICAgICAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0g
cmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSBy
ZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7Ci0KLSAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0
QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVj
dFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwg
c3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgotICAgICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVn
cygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGws
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0
eVJlZ3MpOwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkganNWYWx1ZVJlc3VsdDsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IG9uZVJlZ1Jlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2gg
KHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMs
IFJldXNlLCBwcm9wZXJ0eSwgVGFnV29yZCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFBheWxvYWRXb3JkKTsKLQotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZXN1bHRUYWcuZ3ByKCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICgh
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVj
Q2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKLSAgICAgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnKTsKLQotICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCi0gICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUu
Zm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkp
Ci0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQot
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1Bh
dGguZ2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93
UGF0aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1Nh
bmVDaGFpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAot
ICAgICAgICAgICAgICAgICAgICByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0VGFn
LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBh
eWxvYWQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdFRhZ1JlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0g
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9h
ZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywg
cmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCAwLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHQuZnByKCkpKTsKLSAgICAgICAgICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAg
ICAgICAgICAgICBvbmVSZWdSZXN1bHQgPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShvbmVSZWdSZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1Jl
ZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVn
ID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVt
cC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgIGJv
eERvdWJsZSh0ZW1wUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpOwotCi0gICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1Jl
ZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMp
OwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJl
c3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCks
IHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgZGVmYXVsdDogeworICAg
ICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7
CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IGpzVmFsdWVSZXN1bHQucmVncygpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwotCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRo
aXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcp
OwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaElmRW1w
dHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGhvbGUpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0g
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwot
ICAgICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgCkBAIC00MTEyLDUxICs0MTQ3LDU1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJh
YmxlTGVuZ3RoKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJv
cGVydHkobm9kZSk7CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRl
eCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVn
PigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIo
KSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisK
KyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJv
cGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5
KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
b21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJv
cGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Io
bm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
SW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCmluZGV4IGI1ZTFjYzNlNDJkMmZiNGM5ZDRmMTMxMDdlOThlZmUwYjIwNWU1YzcuLjEw
NzcxMzE3MTRkYThhNDU1M2JiY2I1ZDhlNDZiZDMzOGI2ZjRhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjI0Niw2ICsy
MjQ2LDM3MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiAg
ICAgfQogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9k
ZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+
KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkFueVR5cGVkQXJyYXk6
CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5n
QXJndW1lbnRzOgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAg
Y2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlJl
ZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChE
YXRhRm9ybWF0SlMpOworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpT
VmFsdWVSZWdzKCksIG5vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KSk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0UmVncy5ncHIoKSk7CisKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CisgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJy
YXk6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Ns
b3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdV
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0
cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdw
cigpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87Cisg
ICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc3R1Yklu
Zm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBzdHViSW5mb0dQUiA9IHN0dWJJ
bmZvLmdwcigpOworICAgICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigpOwor
CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsK
KyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5k
R2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0
cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMt
PnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdK
SVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lz
dGVycywKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3Ry
aW5nID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICht
X3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNT
eW1ib2wpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQorICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CisgICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aElDQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5m
bygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBz
dHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAg
ICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0
ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgbV9qaXQuYWRk
R2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpJbnQzMjoK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisg
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9y
bWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0g
cmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAg
ICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpD
b250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0g
bV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHQpOworICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAg
ICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LCBub2RlLCBmb3JtYXQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgo
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3By
KCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKKworICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAg
ICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZyk7CisgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7CisgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgIH0KKworCisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
CisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAg
ICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91Ymxl
KTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9h
ZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0
ciwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0UmVnKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0
ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHRSZWcs
IHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChmb3Jt
YXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKKworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwor
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIERhdGFGb3JtYXQgZm9y
bWF0OworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KHJlc3Vs
dElzVW5ib3hlZCA/IERhdGFGb3JtYXREb3VibGUgOiBEYXRhRm9ybWF0SlMpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdCA9
PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQu
anVtcCgpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5
UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgTmFOID0gUE5hTjsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJk5hTiksIHRlbXBSZWcpOworICAgICAgICAgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHRlbXBSZWcsIG5vZGUpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
TmFOKHRlbXBSZWcpKTsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0
UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgYm94RG91Ymxl
KHRlbXBSZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRSZWdzLmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncy5ncHIoKSwgbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworCisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKKworICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAor
ICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgor
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25TY29wZWRBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6IHsKKyAgICAgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAg
IGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0g
fQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAg
Tm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMjcxMyw3ICszMDc3LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0
OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBi
YXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ID09
IERhdGFGb3JtYXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5yZWdzKCksIHByZWZlcnJlZEZv
cm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNzQ2LDM0
NSArMzExNSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgotICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVz
aW5nQXJndW1lbnRzOgotICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25z
OgotICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgICAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBpbmRleCk7Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1
c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2Uo
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50
NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5
VmFsLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RX
aXRoU3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5m
bzsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBwcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSW5mby5lbXBsYWNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8tPmdwcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxh
dGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAg
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVy
YXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0t
PnNpemUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+
dXNlZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7Ci0KLSAgICAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAg
ICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKLSAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0KLSAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7Ci0gICAg
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAotICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotCi0gICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMo
KSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOwotICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0
eShyZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBE
YXRhRm9ybWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVt
cG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJk
YTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2ggKHByZWZlcnJlZEZv
cm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7Ci0KLSAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3Vs
dFJlZyk7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51
bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmpl
Y3RJbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsK
LQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdFJlZykpOwotICAgICAgICAg
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICAgICAgZGVmYXVs
dDogeworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1h
dEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnQzMik7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+
YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxHUFJSZWc+IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNV
bmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBS
ZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBK
U1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAg
ICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAq
cmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgp
OwotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCks
IG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVy
dHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSwgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRS
ZWcsIG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7
Ci0gICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJl
ZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0g
ICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsK
LSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOwotICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50LAotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNj
b3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlN
b2RlKCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAg
ICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3Jt
YXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU4MSw3ICsz
NjI2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3Vs
YXRlID0gZmFsc2U7Ci0gICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJl
c3VsdEdQUiwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQm94ID0gZmFsc2U7CisgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTUyNjksNTIgKzUzMTUsNTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxl
U3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0RW51bWVyYWJs
ZUxlbmd0aChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3Ry
dWN0dXJlUHJvcGVydHkobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3Bl
cnR5KG5vZGUpOworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRl
eCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVn
PigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIo
KSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisK
KyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJv
cGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5
KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
b21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJv
cGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Io
bm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
SW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBi
ZWYxZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRkMDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJl
Y3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAgLTM1Miw2ICszNTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5k
ZXggMmUyZjA3ZGZjN2U4YzEzZGRiMGVkZDVhMmQwN2E1ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcy
MzBlMGUxYmQ0NDVmMzA2MjM0MzdmY2Q2MzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTExNCw2ICsxMTQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
bW9kZVNldE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVT
dHJpbmc6Om9mZnNldE9mRmxhZ3MoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19sZW5ndGgs
IEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmlu
Z19maWJlcjAsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGExYTVmZDI0NGNmMjEx
MDMyNjQxOTdhNzZhZTMwYzdmNjBmNzllNjQuLjAzZjg2NTJjNmNiODJjNjIwMjBkMWU2NmJiNTlm
NDY1OTFkODNlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKQEAgLTI4NiwxOCArMjg2LDE1IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIEJv
b2xlYW5Ub051bWJlcjoKICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBI
YXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0g
ICAgY2FzZSBHZXREaXJlY3RQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0UHJvcGVydHlF
bnVtZXJhdG9yOgotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNh
c2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Cisg
ICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRl
eDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2Fz
ZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNmZlMjlk
OTlmYTQ0MTQ5YzE0NmIyMWFiNDEwNGM0MDgwMzY5ZjM3MS4uMWU2OWIyYTczMmFhYjdkZTRkZjRm
YjM2N2ViZmRlZDAyOWVhZmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcApAQCAtMTAyLDYgKzEwMiw4IEBACiAjaW5jbHVkZSA8d3RmL1JlY3Vy
c2FibGVMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RkVW5vcmRlcmVkU2V0Lmg+CiAKKyNpbmNs
dWRlICJQcm9iZUNvbnRleHQuaCIKKwogI3VuZGVmIFJFTEVBU0VfQVNTRVJUCiAjZGVmaW5lIFJF
TEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCiAgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBc
CkBAIC0xNTIzLDQwICsxNTI1LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlU3Rv
cmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAg
IGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICAgICAgICAgIGNv
bXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc093
blN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9y
OgorICAgICAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAg
IGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGUoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1lKCk7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgICAgICBjb21waWxl
RW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51bWVy
YWJsZUxlbmd0aCgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6Cisg
ICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgICAgICAg
ICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOworICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lKCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCk7CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckluQnlWYWw6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckluQnlWYWwoKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Ci0gICAgICAg
ICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CkBAIC01
MDIwLDcgKzUwMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyB3ZSBkb21pbmF0ZSB0aGVtLgog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisgICAgTFZhbHVlIGNvbXBp
bGVHZXRCeVZhbEltcGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA0Nyw4ICs1MDQw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBh
bGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAg
ICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgZmFzdENhc2UgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTA4MCw4ICs1MDcyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRv
IGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOiB7CkBAIC01MTAwLDggKzUwOTEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBtX25v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG1fbm9kZS0+Zmxh
Z3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKQEAgLTUxNDEsMTggKzUxMzIsMTYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKQotICAg
ICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkoRG91YmxlLCBmYXN0UmVzdWx0LCBzbG93
UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOiB7CiAgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogCiAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZC
b3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50
MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogewpA
QCAtNTE2OSw4ICs1MTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
T3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5kcyk7CiAgICAgICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAg
ICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0
Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUxOTIsOCAr
NTE4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5w
aGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CkBAIC01MjQ2LDggKzUy
MzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBuYW1lZFJl
c3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5
OgpAQCAtNTI1NiwyNCArNTI0MiwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobV9ub2RlKSkgewogICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEp
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpT
VmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RT
dHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmlu
ZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJv
bFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN5bWJvbCwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgbG93
SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtNTM3Myw4ICs1MzU2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBzZXRKU1Zh
bHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IHBhdGNocG9pbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CkBAIC01MzkwLDggKzUzNzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQocmVz
dWx0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8g
a2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CkBAIC01NDE3LDEzICs1Mzk4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIC8v
IFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFs
aXZlLgogICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaW5n
Q2hhckF0SW1wbCgpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgpAQCAtNTQ0OCw5ICs1NDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvYWRGcm9tSW50VHlwZWRBcnJheShwb2ludGVyLCB0
eXBlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUg
c2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgICAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW50VHlwZWRB
cnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOwpAQCAtNTQ2OSw4ICs1NDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0
aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtNTQ4MCw4ICs1NDU2LDI0IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5
cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAg
aWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxh
dGUgPSB0cnVlOworICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0
LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIHNldERv
dWJsZShyZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBA
IC04NTcxLDcgKzg1NjMsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShJbnQ2NCwgZmFzdFJlc3VsdCwgZW1wdHlSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICBMVmFsdWUgY29tcGlsZVN0
cmluZ0NoYXJBdEltcGwoKQogICAgIHsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dTdHJpbmco
bV9ncmFwaC5jaGlsZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ncmFwaC5jaGlsZChtX25vZGUsIDEpKTsKQEAgLTg2NzksNyArODY3MSwxMiBAQCBwcml2
YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9y
YWdlIGFsaXZlLgogICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQ2NCwgcmVzdWx0cyk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlU3RyaW5n
Q2hhckF0KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoY29tcGlsZVN0cmluZ0NoYXJBdElt
cGwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQpA
QCAtMTI5MDYsMTcgKzEyOTAzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRTdG9yZUJhcnJp
ZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3Jl
QmFycmllcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCisgICAgTFZhbHVlIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKExWYWx1ZSBpbmRleCwgU19KSVRPcGVyYXRpb25fR0Na
IHNsb3dQYXRoT3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKSk7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbV9ub2RlLT5hcnJheU1vZGUo
KTsKIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgp
KSk7CiAKICAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtb2RlLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIgPwogICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMy
UHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwpAQCAtMTI5
NTEsMTEgKzEyOTQ3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9s
ZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwor
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZERv
dWJsZVByb3BlcnRpZXM7CiAgICAgICAgICAgICAKQEAgLTEyOTg5LDEyICsxMjk4NCwxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQs
IHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
X291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwor
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKIAogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEzMDI2LDE5NiAr
MTMwMjAsMjY5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3Vs
dCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9
CiAKICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3Ra
ZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKTsKICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KCkK
KyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChpbmRleCwgb3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0
UHJvcGVydHlFbnVtZXJhdG9yKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0
aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFNsb3dQYXRoQ2FsbD4KLSAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eUlt
cGwoTFZhbHVlIGJhc2UsIFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwpCisgICAgdm9pZCBjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3Jp
Z2luLnNlbWFudGljKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3Ig
PSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CiAKLSAgICAgICAgTEJh
c2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvcnJlY3RTdHJ1Y3R1cmUgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIGlmIChtX25vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1f
b3V0Lm5vdFplcm8zMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSk7CiAKLSAgICAgICAgbV9v
dXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAg
ICAgICAgICAgIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVseShzbG93UGF0aCkpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNoZWNrSGFzUHJvcGVydHkgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKIAot
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2Us
IGNvcnJlY3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5pdGlhbElu
ZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlu
aXRpYWxJbmRleEZvckhhc1Byb3BlcnR5ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihtb2RlKSwgdW5zdXJlKGNoZWNrSGFzUHJv
cGVydHkpLCB1bnN1cmUoaW5jcmVtZW50KSk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hl
YXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAg
ICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb3JyZWN0U3RydWN0dXJlKSk7CisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAgICAgICAgTFZhbHVlIGlu
ZGV4UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgpOworICAgICAgICAgICAgTFZh
bHVlIGluY3JlbWVudGVkSW5kZXggPSBtX291dC5hZGQoaW5kZXhQaGksIG1fb3V0LmludDMyT25l
KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3JlbWVudGVkSW5kZXhSZXN1bHQgPSBt
X291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmaW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubGVzc1RoYW4oaW5jcmVtZW50ZWRJbmRl
eCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yX2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvcnJlY3RTdHJ1Y3R1cmUsIHNs
b3dQYXRoKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSGFzUHJvcGVydHkp
OworICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5SW5kZXggPSBtX291dC5waGkoSW50MzIsIGlu
aXRpYWxJbmRleEZvckhhc1Byb3BlcnR5LCBpbmNyZW1lbnRlZEluZGV4UmVzdWx0KTsKKyAgICAg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXhQaGksIG1fb3V0LmFuY2hvcihwcm9w
ZXJ0eUluZGV4KSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaW5hbFByb3BlcnR5SW5k
ZXggPSBtX291dC5hbmNob3IocHJvcGVydHlJbmRleCk7CisgICAgICAgICAgICBMVmFsdWUgaGFz
UHJvcGVydHkgPSBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChwcm9wZXJ0eUluZGV4LCBv
cGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChoYXNQcm9wZXJ0eSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpbmNyZW1l
bnQpKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3IoCi0g
ICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1D
YWxsKEludDY0LCBzbG93UGF0aENhbGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2Us
IHByb3BlcnR5KSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIGZp
bmFsSW5kZXggPSBtX291dC5waGkoSW50MzIsIGZpbmFsSW5jcmVtZW50ZWRJbmRleCwgZmluYWxQ
cm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQu
emVyb0V4dChmaW5hbEluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVt
YmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGUpIDw8IDMyKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjb3JyZWN0U3RydWN0dXJlUmVzdWx0LCBzbG93
UGF0aFJlc3VsdCkpOworICAgICAgICBFZGdlJiBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2lu
ZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChiYXNl
RWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2Rl
LCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9tb2RlU2V0KSwgbV9v
dXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihp
bmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNy
ZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJP
bmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ID0gbV9v
dXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1
ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25F
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKICAgICB9CiAKLSAgICB2b2lkIGNv
bXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCkKICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1
Y3R1cmVQcm9wZXJ0eUltcGwobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9u
SGFzRW51bWVyYWJsZVByb3BlcnR5KTsKKyAgICAgICAgTFZhbHVlIGJveGVkUGFpciA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRv
SW50MzIoYm94ZWRQYWlyKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0
dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUo
KQogICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7Cisg
ICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
CisgICAgICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LmxTaHIo
Ym94ZWRQYWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQzMihtX291
dC5iaXRBbmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUlu
U3RydWN0dXJlUHJvcGVydHkoKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgaGF2
ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNvdmVyeSBmb3IgdGhpcyBub2RlIHNpbmNlIGl0J3MgImVm
ZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxpdmUgaW4gYnl0ZWNvZGUuCisgICAgdm9pZCBjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKQogICAgIHsKLSAgICAgICAgY29tcGls
ZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVy
YXRpb25JblN0cnVjdHVyZVByb3BlcnR5KTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1
ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0
eU5hbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9y
KSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoKQorICAgIHZvaWQg
Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRv
ciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKyAgICAgICAgRWRn
ZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgRWRn
ZSBwcm9wZXJ0eU5hbWVFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpOworICAg
ICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpOwor
ICAgICAgICBFZGdlIGluZGV4RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKTsK
IAotICAgICAgICBMQmFzaWNCbG9jayBjaGVja09mZnNldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWQgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAg
ICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUg
YmFzZSA9IERGRzo6aXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkgPyBsb3dDZWxsKGJhc2VFZGdl
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pIDogbG93SlNWYWx1ZShiYXNlRWRnZSk7CisKKyAg
ICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBzdG9yYWdlRWRnZSA/IGxvd1N0b3JhZ2Uoc3RvcmFnZUVk
Z2UpIDogbnVsbHB0cjsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgcHJv
cGVydHlOYW1lIGhlcmUgaW4gY2FzZSBpdCByZXF1aXJlcyBib3hpbmcgc2luY2UgdGhlIElDIHBh
dGggd29uJ3QgZG9taW5hdGUgc3Vic2VxdWVudCB1c2VzIGluIHN1YnNlcXVlbnQgbm9kZXMuCisg
ICAgICAgIC8vIElmIGl0J3MgYW4gSW50MzIgYW5kIHdlIHVzZSBpdCBhcyBzdWNoIHRoaXMgYm94
aW5nIHdpbGwgYmUgRENFJ2QgYnkgYjMgbGF0ZXIgYW55d2F5LgorICAgICAgICBsb3dKU1ZhbHVl
KHByb3BlcnR5TmFtZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKworICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihpbmRleEVkZ2UpOworICAgICAgICBMVmFsdWUgbW9k
ZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KSk7CisgICAgICAgIExW
YWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNSkp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2sg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVMb2FkQmxvY2sg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBnZW5lcmljSUNCbG9j
ayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFs
KAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNldCkpOworICAgICAgICBMVmFsdWUgaXNO
b3ROYW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROYW1lZCwgdW5z
dXJlKGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNrU3RydWN0dXJlQmxvY2spKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgLy8gVE9E
TyBjaGVjayBjZWxsPworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8g
c3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUu
b25seVN0cnVjdHVyZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlKQorICAgICAgICAgICAgc3Ry
dWN0dXJlSUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMu
SlNDZWxsX3N0cnVjdHVyZUlEKTsKKworICAgICAgICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVj
dHVyZSA9IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKKwor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdDsKKyAgICAg
ICAgaWYgKGluZGV4RWRnZS5ub2RlKCkgPT0gcHJvcGVydHlOYW1lRWRnZS5ub2RlKCkpIHsKKyAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBiYWRT
dHJ1Y3R1cmVTbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZM
aW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYmFkU3RydWN0dXJlU2xvd1BhdGgpOworICAgICAgICAgICAgYmFkU3RydWN0dXJl
U2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVt
ZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
YmFzZSwgaW5kZXgsIGVudW1lcmF0b3IpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9y
T3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNoZWNrT2Zmc2V0LCBpbmxpbmVMb2Fk
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQu
bG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hl
ZElubGluZUNhcGFjaXR5KSksCi0gICAgICAgICAgICB1bnN1cmUob3V0T2ZMaW5lTG9hZCksIHVu
c3VyZShpbmxpbmVMb2FkKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5saW5lT3JP
dXRPZkxpbmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBpbmxpbmVDYXBhY2l0eSA9IG51bGxwdHI7
CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgICAg
IGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9
ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgICAgICBpbmxpbmVDYXBh
Y2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5KQorICAgICAgICAgICAgaW5saW5l
Q2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOworICAgICAgICBMVmFsdWUgaXNJbmxp
bmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291dC5pbnQzMk9uZSA6IG1fb3V0LmJl
bG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0lubGlu
ZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayksIHVuc3VyZShvdXRPZkxpbmVMb2FkQmxvY2spKTsK
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkLCBvdXRPZkxpbmVMb2FkKTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaW5saW5lTG9hZEJsb2NrKTsKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9h
ZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCisg
ICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGll
cy5hdEFueU51bWJlcigpLAogICAgICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5k
ZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob3V0T2ZMaW5lTG9hZCwgc2xvd0Nhc2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAg
ICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkQmxvY2spOworICAgICAgICBpZiAoIXN0
b3JhZ2UpCisgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSk7CisKICAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0
LnNpZ25FeHQzMlRvNjQoCi0gICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBt
X291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
Y2FjaGVkSW5saW5lQ2FwYWNpdHkpKSkpOworICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1
YihpbmRleCwgaW5saW5lQ2FwYWNpdHkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1f
b3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVy
KCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgdm1DYWxsKEludDY0
LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJv
cGVydHkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291
dC5hcHBlbmRUbyhnZW5lcmljSUNCbG9jayk7CisgICAgICAgIExWYWx1ZSBnZW5lcmljUmVzdWx0
ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
bV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQo
dHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveEludDMyKGdlbmVy
aWNSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1
bHQgPSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChnZW5lcmljUmVzdWx0LT50eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgZ2VuZXJp
Y1Jlc3VsdCA9IGJveERvdWJsZShnZW5lcmljUmVzdWx0KTsKIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkoSW50NjQsIGlubGluZVJlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBzbG93Q2FzZVJlc3VsdCkp
OwotICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAg
IExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
c2V0SW50MzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yX2luZGV4TGVuZ3RoKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJ
Q1Jlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBpbmxpbmVSZXN1bHQpOworICAgICAgICBpZiAoYmFk
U3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpCisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKHJlc3VsdCwgYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpOworICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJh
dG9yKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xv
d1BhdGhGdW5jdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNl
bGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgZW51
bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRl
eCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBFZGdlIGJhc2VFZGdlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICBMVmFsdWUgYmFzZSA9IGJh
c2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlID8gbG93Q2VsbChiYXNlRWRnZSkgOiBsb3dKU1Zh
bHVlKGJhc2VFZGdlKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5TmFtZSA9IGxvd0pTVmFsdWUo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVl
IG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworICAgICAg
ICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDQpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNOYW1lZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBtYXRjaGVzU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBvcGVyYXRpb25CbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleCkpLAotICAgICAgICAgICAgdXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5k
cykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291
dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSksIHVuc3Vy
ZShpc05hbWVkQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxvY2spKTsKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNOYW1lZEJsb2NrKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5s
b2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQ
dHIoaW5kZXgpKSkpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5
cGUoYmFzZUVkZ2UpKSwgdW5zdXJlKGlzQ2VsbEJsb2NrKSwgdW5zdXJlKG9wZXJhdGlvbkJsb2Nr
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNDZWxsQmxvY2spOworICAgICAgICBMVmFs
dWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1f
b3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAgICAgICAgICAgdXN1YWxseShtYXRjaGVzU3RydWN0dXJl
QmxvY2spLCByYXJlbHkob3BlcmF0aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhtYXRjaGVzU3RydWN0dXJlQmxvY2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBuYW1lZFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywg
Y29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpWYWx1ZU51bGwpKTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ob3BlcmF0aW9uQmxvY2spOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3IodW5ib3hCb29sZWFuKHZtQ2FsbChJ
bnQ2NCwgc2xvd1BhdGhGdW5jdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwg
cHJvcGVydHlOYW1lLCBpbmRleCwgbW9kZSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBpbkJvdW5kc1Jl
c3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24pOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1
bHQsIG9wZXJhdGlvblJlc3VsdCkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCkK
ICAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7
Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAg
ICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgp
KSwKLSAgICAgICAgICAgIHVzdWFsbHkoaW5Cb3VuZHMpLCByYXJlbHkob3V0T2ZCb3VuZHMpKTsK
LQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRz
LCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0
eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBt
X291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
Q29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKSkpOwotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZC
b3VuZHMsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRz
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVOdWxs
KSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LnBoaShJbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91bmRzUmVzdWx0KSk7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRv
ckluQnlWYWwpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkK
KworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSgpCiAgICAgewotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4KSk7Cisg
ICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRvckhh
c093blByb3BlcnR5KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUoKQpAQCAtMTczNDQsNyArMTc0MTEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpICYmIGNh
blNwZWN1bGF0ZSkgewogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIE92
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJlc3VsdCwgbV9vdXQu
aW50MzJaZXJvKSk7CkBAIC0yMDI5Niw2ICsyMDM2MywyNyBAQCBwcml2YXRlOgogICAgICAgICBt
X291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KIAorICAgIC8vIFRoaXMgb25seSB3b3JrcyBmb3Ig
aW50cyByaWdodCBub3cuCisgICAgUGF0Y2hwb2ludFZhbHVlKiBkYXRhTG9nRm9yRGVidWdnaW5n
KGNvbnN0IGNoYXIqIHByZWZpeCwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAgICByZXN1
bHQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC0+YXBw
ZW5kKHZhbHVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIFR5cGUg
dmFsdWVUeXBlID0gdmFsdWUtPnR5cGUoKTsKKyAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworCisgICAgICAgICAgICBqaXQucHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PSBJbnQzMikKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8aW50MzJfdD4o
R1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPEpTVmFsdWU+KEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKICAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0
dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0RTTC5yYgppbmRleCA3MzE3MTAwOTZjZjNlMjQ5OGFlNDVkZGEyNmFhODJlNzljZDQ2
YTRlLi42OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTM4LDYgKzEzOCw3IEBAIG1vZHVsZSBE
U0wKICNpbmNsdWRlICJHZXRCeVZhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5o
IgogI2luY2x1ZGUgIkl0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlByaXZh
dGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCmluZGV4IDQ0NDYzNWU5ODBkOTBh
ZjgzN2ViZDYzYjk2MmZhZWRlMmVjNTM1MDMuLmQ4NzljOTBiZTMxMTc4NjIzM2Y1MjZiMTgzZWRm
MWNiM2M3YmIzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3Rlci5oCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBTFdBWVNf
SU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZyYW1lKik7CiAgICAgICAgIEFMV0FZU19J
TkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sqKTsKICAgICAgICAgQUxXQVlTX0lO
TElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTU2NvcGUqKTsKLSAgICAgICAgQUxXQVlTX0lOTElO
RSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7CisgICAgICAgIEFMV0FZU19JTkxJTkUg
UmVnaXN0ZXImIG9wZXJhdG9yPShKU0NlbGwqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdp
c3RlciYgb3BlcmF0b3I9KEVuY29kZWRKU1ZhbHVlKTsKIAogICAgICAgICBpbnQzMl90IGkoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
cklubGluZXMuaAppbmRleCBjNTZlZjVlNDU1NGNiMTAzYWJlYmU3MmU2Mjk4ZjhjNDhhYWQ5ODYw
Li41OTNlZjY2NjhkZTJlMDNhNjU5YjM5ZjMxYWY2MGY4OGMyNzgzOTg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCkBAIC02
Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0o
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1BTFdBWVNfSU5M
SU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTT2JqZWN0KiBvYmplY3QpCitBTFdB
WVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTQ2VsbCogb2JqZWN0KQog
ewogICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShvYmplY3QpKTsKICAgICBy
ZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCBhYzhiNTEzN2Q4NTM1NDUwNmFlZWRjZWRiZDFjNWJkNzcyNTc5YzAxLi40MTU5ZTdl
NTA0OTY5MzdlZTFlNTZhZmI3YzIwYWU5Y2YyYTg5ZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTg4OSw3ICs4ODksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAgICAgQmVsb3csIEFkZHJlc3MoY2VsbEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBl
KSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBp
bmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUoR1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJh
bmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA0MmI4Y2Fm
NWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0Li4zYTg0NWFhYjdjMjYxZjI1NTQ2YjYw
NzZjNjU5YjYxOGNhOTRmM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0zMDgs
MTAgKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
REVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQogICAgICAgICBERUZJTkVfU0xP
V19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9X
X09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19p
bmRleF9zdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGVudW1lcmF0b3JfbmV4dCkKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiAgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKQEAgLTM2NSw2ICszNjMsOSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlf
aWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAg
ICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2luX2J5
X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkK
ICAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcml2YXRlX25hbWUpCiAgICAgICAgIERFRklORV9P
UChvcF9zZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2NoZWNrX3ByaXZh
dGVfYnJhbmQpCkBAIC00NzMsMTQgKzQ3NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX2FyZ3VtZW50cykKICAgICAg
ICAgREVGSU5FX09QKG9wX3B1dF90b19hcmd1bWVudHMpCiAKLSAgICAgICAgREVGSU5FX09QKG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9o
YXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2luX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCi0g
ICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLSAgICAgICAg
REVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKLSAgICAgICAgICAgIAogICAg
ICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAKQEAgLTU3OCw2ICs1NzEsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9n
ZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X3ByaXZhdGVfbmFtZSkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTYwOSw3ICs2
MDMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKQEAgLTY0MiwxMSArNjM1LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1Aobm90KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChzdHJpY3RlcSkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobnN0cmljdGVxKQotICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChnZXRfZGlyZWN0X3BuYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChnZXRfcHJvdG90eXBlX29mKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZl
X3Njb3BlKQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA0ODdhNWFjNWI4ZTVk
OGE5ZDgwYjJjNmQzMDZlMDgxNTIxYjgyODE0Li40ZmM5YTAyYjcyOWEzMjk0NWI3NTg0Zjc4YTE2
MzVkZTZhOGIyZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTY3MCwyMSArNjcwLDIz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9sb2Fk
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLSAgICAg
ICAgdm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgor
ICAgICAgICB2b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworCisgICAgICAgIHZvaWQgZW1pdF9v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+CisgICAgICAg
IHZvaWQgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBjb25zdCBPcGNvZGVUeXBlJiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgICAgICB2b2lk
IGVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzM1LDcgKzcz
Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmlu
ZGV4IGY2ZGIzZjU5YzRhYTRlMDI3YTE1NjExZWRiYmEyNjFjYWQ4ZWZlZDYuLjliYTEwZWQ2Nzcy
ZmFlYzNmMjBlNjM0YmFiZTE0YWRkOWExMDg5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcApAQCAtMTY5Miw0NiArMTY5MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlw
ZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlv
bik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVu
dEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAorCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwpAQCAtMTczOSw3ICsxNzA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0
aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAg
IAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFy
Z2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7CiAKQEAgLTE3NDgsNyArMTcxNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAg
ICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewogICAgICAgICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBU
YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYzsKQEAgLTE3NTgs
MTcxICsxNzI0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2st
PmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5j
b3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0
aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3
YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5
cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGgg
aXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0g
ICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRp
bmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAgICAv
LyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3Mg
Y2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAvLyBleHRl
bmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhl
IHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLQotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtl
IFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExv
YWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbElu
Zm8pOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwotCi0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAg
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAgIExhYmVsIG5leHRIb3RQ
YXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVm
YXVsdDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eURlZmF1bHQpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEJ5VmFs
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0g
c2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgr
KzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwot
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwot
ICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
c3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJl
Z1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5C
b3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCmluZGV4IDRkNzQxMjZiZTFlM2RlNDMwZDNhNmQ5Y2I3ZmRkYjZkYzg2ZjdlYjQu
LmNhMzJkYzFjNTZlNjI3YWI2ZTBlNjI2OWU1Mzk4MTNjZWVlN2QwYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTExNDIsNDcgKzExNDIs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLXZvaWQgSklUOjplbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
b2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0KLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Qm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVf
c3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJ
bXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQot
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7Ci0gICAgCisKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgCisKICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5k
IEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTAzNC4KICAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShj
dXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFkVHlwZSwgbnVsbHB0cik7CkBAIC0xMTkw
LDcgKzExNTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgCisKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKIApAQCAtMTE5
OSwxNzAgKzExNjQsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICBieVZhbEluZm8t
PnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5l
IGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgp
KTsKLSAgICAKKwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1f
YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZh
bEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5l
cmljKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAot
ICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotCi0gICAgLy8gVGhp
cyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQz
Mi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2UgY2hlY2sg
dGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0
aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBz
aW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhl
IHRvdGFsIGFsbG9jYXRpb24KLSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4g
QXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5k
aW5nIHRoZSB2YWx1ZQotICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3Mg
dXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRo
YW4gc2lnbgotICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUt
dGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRvV29yZChy
ZWdUMSwgcmVnVDEpOwotCi0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUo
cHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMu
Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUw
MzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3Ry
dWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxh
YmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21w
aWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwg
YmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFBy
b3BlcnR5PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
YnlWYWxJbmZvOwotCi0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAotICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1Qz
LCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgYnlWYWxJ
bmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9i
eVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVj
dF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxs
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1p
dExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMik7Ci0gICAgLy8g
SWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9y
YWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdU
MCk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQzMihC
YXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVB
Y2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbmVnMzIocmVnVDIpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChy
ZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQzMihCYXNl
SW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAg
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQ
YXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmsodGhp
cyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIGxvYWRQ
dHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLQotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0
TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFu
Y2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmso
dGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIGxv
YWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlVHlwZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKaW5kZXggMTVlMWQzNDU3OWI2ZDRjOGMxNzBkMjM1MGM2YzM2NDQzZmZl
YTQxNS4uNDEzMDdjMDQ2YWE3ZGQ5YTg4NTg1OTdiMGM5YzIwY2U2MjAzZTNmNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisjaW5jbHVkZSAi
UHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKQEAgLTg2LDEw
ICs4NywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
Cit2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwpAQCAtMTM2LDYgKzEzNywxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8UwogICAgIH0KIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2Uo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpLCBpdGVyKTsKK30KKwogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0p
CiB7CkBAIC0yOTc3LDYgKzI5ODMsMTM2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5h
bF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB0ZW1wbGF0
ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0
aW9uKik7CiAKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9
IGJ5dGVjb2RlLm1fbW9kZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsK
KyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisK
KyAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CisKKyAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFu
IGludDMyIGVuY29kZWQgdmFsdWUuCisgICAgSnVtcCBpc05vdE5hbWVkTW9kZSA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7
CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKworICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDMpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAvLyBJZiBp
bmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2Us
IHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKKworICAgIGRvbmVDYXNl
cy5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisg
ICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3ViMzIoQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOworICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7Cisg
ICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgc3RydWN0dXJlTWlzbWF0Y2gubGlu
ayh0aGlzKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhKTsKKworICAgIGlzTm90TmFtZWRNb2RlLmxpbmsodGhpcyk7CisgICAgSnVt
cCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgLy8gUmVwbGFjZSB0
aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKKworICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisKKyAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7CisgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBl
bHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CisKKyAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVy
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRo
RnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUm
IGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3sKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5t
X21vZGU7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1vZGUsIHJlZ1QwKTsKKyAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgc2xvd0Nhc2VzLmxpbmsodGhpcyk7CisKKyAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZ2VuZXJh
bENhc2UpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19w
cm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckluQnlWYWw+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFz
X293bl9wcm9wZXJ0eSk7Cit9CisKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCA1OGU1ZDUyZmU1YjA4
YWUyOWUzZTVkZGRlM2Q3NDY3OTY3ZjIzMDE5Li4yNTdjYWVhMjc4Njg4M2JiYTA4YzdhMmM0YjIz
OGQ1MDQ0ZTcyOTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTE1MDUsNiArMTUwNSwyNSBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5
VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwogCisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRv
cl9pbl9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3Bl
cnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggMzdiNmRmMzBmMTBjM2Ew
MDFhNTY1NWVhMWJiMWRiNTk1NzNjZjYwOC4uZTcxODNhNzJhMzY4ZjFhMjgwNDY4NGQyYjA3NjQ3
ZjIyMDY4ZjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQpAQCAtMTk5MiwxOSArMTk5MiwxNCBAQCBzbG93UGF0aE9wKGNy
ZWF0ZV9nZW5lcmF0b3IpCiBzbG93UGF0aE9wKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCiBzbG93
UGF0aE9wKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKIHNsb3dQYXRoT3AoZGVmaW5lX2RhdGFf
cHJvcGVydHkpCi1zbG93UGF0aE9wKGVudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKLXNsb3dQYXRo
T3AoZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpCiBzbG93UGF0aE9wKGdldF9ieV92YWxfd2l0
aF90aGlzKQotc2xvd1BhdGhPcChnZXRfZGlyZWN0X3BuYW1lKQotc2xvd1BhdGhPcChnZXRfZW51
bWVyYWJsZV9sZW5ndGgpCiBzbG93UGF0aE9wKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotc2xv
d1BhdGhPcChoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KQotc2xvd1BhdGhPcChoYXNf
ZW51bWVyYWJsZV9wcm9wZXJ0eSkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9uZXh0KQorc2xvd1Bh
dGhPcChlbnVtZXJhdG9yX2dldF9ieV92YWwpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfaW5fYnlf
dmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCiAKIGlmIG5vdCBK
U1ZBTFVFNjQKLSAgICBzbG93UGF0aE9wKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0
eSkKLSAgICBzbG93UGF0aE9wKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgIHNsb3dQ
YXRoT3AoaW5fc3RydWN0dXJlX3Byb3BlcnR5KQogICAgIHNsb3dQYXRoT3AoZ2V0X3Byb3RvdHlw
ZV9vZikKIGVuZAogCkBAIC0yMDIxLDcgKzIwMTYsNiBAQCBzbG93UGF0aE9wKHJlc29sdmVfc2Nv
cGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQogc2xvd1BhdGhPcChzcHJlYWQpCiBz
bG93UGF0aE9wKHN0cmNhdCkKIHNsb3dQYXRoT3AodGhyb3dfc3RhdGljX2Vycm9yKQotc2xvd1Bh
dGhPcCh0b19pbmRleF9zdHJpbmcpCiBzbG93UGF0aE9wKHR5cGVvZikKIHNsb3dQYXRoT3AodHlw
ZW9mX2lzX29iamVjdCkKIHNsb3dQYXRoT3AodHlwZW9mX2lzX2Z1bmN0aW9uKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpp
bmRleCBiZDg4NTVlYmZkNmZjMTliMTVjMWI1ODg2ZDRmYTU1NjQzODJkODdkLi44YTVmN2QyM2U2
NDc2M2JhMjU5ZTFiMmM1ZDg3ZjhkMTZiODI5YWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpAQCAtMzE0MSwzNCAr
MzE0MSw2IEBAIGxsaW50T3Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwsIE9wTG9nU2hhZG93
Q2hpY2tlblRhaWwsIG1hY3JvIChzaXplLCBnZXQsIGRpCiAgICAgZGlzcGF0Y2goKQogZW5kKQog
Ci1tYWNybyBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0
dXJuLCBzbG93UGF0aENhbGwpCi0gICAgZ2V0KG1fYmFzZSwgdDApCi0gICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCi0gICAgYnRxbnogdDEsIG5vdENlbGxNYXNrLCAuc2xv
d1BhdGgKLQotICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fZW51bWVyYXRvciwgdDApCi0gICAgbG9h
ZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QxXSwgdDEKLSAgICBiaW5lcSB0MSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjptX2NhY2hlZFN0cnVjdHVyZUlEW3QwXSwgLnNsb3dQYXRoCi0KLSAg
ICByZXR1cm4oVmFsdWVUcnVlKQotCi0uc2xvd1BhdGg6Ci0gICAgY2FsbFNsb3dQYXRoKHNsb3dQ
YXRoQ2FsbCkKLSAgICBkaXNwYXRjaCgpCi1lbmQKLQotbGxpbnRPcFdpdGhSZXR1cm4ob3BfaGFz
X2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5LCBPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1
Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0
aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi1lbmQpCi0KLWxsaW50T3BXaXRo
UmV0dXJuKG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5LCBPcEhhc093blN0cnVjdHVyZVBy
b3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGhhc1N0cnVj
dHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xvd19wYXRo
X2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9wV2l0aFJldHVybihv
cF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eSwgbWFjcm8gKHNp
emUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwo
c2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0aF9pbl9zdHJ1Y3R1cmVfcHJv
cGVydHkpCi1lbmQpCi0KIG9wKGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9sb29wX2hpbnQsIG1h
Y3JvICgpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCiAgICAgbG9hZHAgQ29kZUJsb2Nr
OjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCAxMTI5NTRiYjliNmU1MDEzNjg4M2I3NDU2
Y2IxZTgzMThmYjVhNTExLi5iMTVkMzU0ODAxOWI3MmVkMWQ2ODM3NzUzZjMwMjYwMjYwZWEzZGEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAKQEAgLTk2MiwxNjEgKzk2MiwxMzcgQEAgSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF90b19wcm9wZXJ0eV9rZXkpCiAgICAgUkVUVVJOKEdFVF9DKGJ5dGVjb2RlLm1f
c3JjKS5qc1ZhbHVlKCkudG9Qcm9wZXJ0eUtleVZhbHVlKGdsb2JhbE9iamVjdCkpOwogfQogCi1K
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xlbmd0
aCkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2Vu
dW1lcmF0b3IpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
R2V0RW51bWVyYWJsZUxlbmd0aD4oKTsKLSAgICBKU1ZhbHVlIGVudW1lcmF0b3JWYWx1ZSA9IEdF
VF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIGlmIChlbnVtZXJhdG9yVmFsdWUu
aXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgUkVUVVJOKGpzTnVtYmVyKDApKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOworICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAg
aWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBSRVRVUk4odm0uZW1w
dHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpOwogCi0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KGVudW1l
cmF0b3JWYWx1ZS5hc0NlbGwoKSk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAgIFJFVFVS
Tihqc051bWJlcihlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpKTsKKyAgICBSRVRVUk4ocHJv
cGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2UpKTsKIH0KIAotSlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX25l
eHQpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzRW51
bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
RW51bWVyYXRvck5leHQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOwotICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNl
KS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04o
KTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFs
dWUoKTsKLSAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlKGJhc2Ut
PnN0cnVjdHVyZSh2bSkpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQzMkFzQW55SW50KCkp
OwotICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2Jh
bE9iamVjdCwgcHJvcGVydHkuYXNVSW50MzJBc0FueUludCgpKSkpOwotfQorICAgIFJlZ2lzdGVy
JiBtb2RlUmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9tb2RlKTsKKyAgICBSZWdpc3RlciYgaW5k
ZXhSZWdpc3RlciA9IEdFVChieXRlY29kZS5tX2luZGV4KTsKKyAgICBSZWdpc3RlciYgbmFtZVJl
Z2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKTsKIAotSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkp
Ci17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVD
S19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygp
KTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
ZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlmIChiYXNlLT5zdHJ1
Y3R1cmUodm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAg
ICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlmCi0gICAgSlNTdHJpbmcqIHN0cmlu
ZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+
dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAg
UkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUpKSk7Ci19CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihtb2RlUmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMy
KCkpOworICAgIHVpbnQzMl90IGluZGV4ID0gaW5kZXhSZWdpc3Rlci5qc1ZhbHVlKCkuYXNVSW50
MzIoKTsKIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfb3duX3N0
cnVjdHVyZV9wcm9wZXJ0eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU1ZhbHVlIGJhc2UgPSBH
RVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLQotI2lmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7Ci0gICAgaWYgKGJhc2UuaXNDZWxsKCkgJiYgYmFzZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAg
ICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKLSNlbmRpZgorICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gR0VUKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIEFTU0VSVCghYmFz
ZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpOworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZh
bHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAg
bWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZUlEKGJhc2UtPnN0cnVjdHVy
ZUlEKCkpOwogCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5
KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0g
ICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgSlNTdHJp
bmcqIG5hbWUgPSBlbnVtZXJhdG9yLT5jb21wdXRlTmV4dChnbG9iYWxPYmplY3QsIGJhc2UsIGlu
ZGV4LCBtb2RlKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAgIFJFVFVSTihqc0Jvb2xl
YW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUpKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4obW9kZSk7CisgICAgbW9kZVJlZ2lzdGVyID0ganNOdW1iZXIoc3RhdGlj
X2Nhc3Q8dWludDhfdD4obW9kZSkpOworICAgIGluZGV4UmVnaXN0ZXIgPSBqc051bWJlcihpbmRl
eCk7CisgICAgbmFtZVJlZ2lzdGVyID0gbmFtZSA/IG5hbWUgOiBqc051bGwoKTsKKyAgICBFTkQo
KTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9pbl9zdHJ1Y3R1
cmVfcHJvcGVydHkpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1l
cmF0b3JfZ2V0X2J5X3ZhbCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIEpTVmFsdWUgYmFzZSA9IEdFVF9D
KGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7Ci0gICAgaWYgKGJhc2UuaXNDZWxsKCkgJiYgYmFzZS5hc0NlbGwoKS0+c3RydWN0dXJl
KHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAgICAgICBS
RVRVUk4oanNCb29sZWFuKHRydWUpKTsKLSNlbmRpZgotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBH
RVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHBy
b3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhz
OjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBhc1N0cmluZyhwcm9wZXJ0eSkpKSk7Ci19
CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAg
ICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICBh
dXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KEdF
VChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsKKworICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc0lu
dDMyKCk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZTogeworICAgICAgICAgICAgbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZUlEKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQo
KSk7CisgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldChnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihpbmRleCkpKTsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOiB7CisgICAgICAgICAgICBp
ZiAoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQo
KSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gV2UnbGwgb25seSBtYXRjaCB0aGUgc3RydWN0dXJlIElEIGlmIHRoZSBiYXNlIGlzIGFuIG9i
amVjdC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBlbnVtZXJhdG9yLT5lbmRTdHJ1
Y3R1cmVQcm9wZXJ0eUluZGV4KCkpOworICAgICAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChi
YXNlVmFsdWUuZ2V0T2JqZWN0KCktPmdldERpcmVjdChpbmRleCA8IGVudW1lcmF0b3ItPmNhY2hl
ZElubGluZUNhcGFjaXR5KCkgPyBpbmRleCA6IGluZGV4IC0gZW51bWVyYXRvci0+Y2FjaGVkSW5s
aW5lQ2FwYWNpdHkoKSArIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0
aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5OYW1lZE1v
ZGVTdHJ1Y3R1cmVNaXNtYXRjaCk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAg
fQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxl
X3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5
dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3By
b3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0
eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VY
Q0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3Bl
cnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOwotfQorICAgICAgICBjYXNlIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsKKyAgICAgICAgICAgIGlmIChiYXNl
VmFsdWUuaXNDZWxsKCkgJiYgbW9kZSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVk
TW9kZSkKKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3Ry
dWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUp
LmpzVmFsdWUoKSk7CisgICAgICAgICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9J
ZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgICAgICAgICAvLyBUT0RPIERvZXMgdGhpcyBh
Y3R1YWxseSBldmVyIHRocm93PyBJc24ndCBzdHJpbmcgYmFja2VkIGJ5IGEgVVVJRD8KKyAgICAg
ICAgICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJh
c2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgfQogCi1K
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpCi17
Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RGlyZWN0UG5h
bWU+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpz
VmFsdWUoKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmpzVmFsdWUoKTsKLSAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgSlNTdHJp
bmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9
IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7Ci0gICAgUkVUVVJOKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUp
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9OworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckluQnlWYWw+KCk7CiAgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBpZiAoYmFzZVZh
bHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIFJFVFVSTih2bS5lbXB0eVByb3BlcnR5
TmFtZUVudW1lcmF0b3IoKSk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMy
KCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KG1vZGUpOwogCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3Qo
Z2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Kj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBpZiAoYXV0byog
YmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3QoKSkgeworICAgICAgICBpZiAobW9kZSA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBiYXNlLT5zdHJ1Y3R1cmVJRCgpID09
IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICBSRVRVUk4oanNC
b29sZWFuKHRydWUpKTsKIAotICAgIFJFVFVSTihwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGdsb2Jh
bE9iamVjdCwgYmFzZSkpOwotfQotCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2Vs
bCgpKTsKLSAgICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVl
KCkuYXNVSW50MzJBc0FueUludCgpOworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbihi
YXNlLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIEdFVChieXRlY29kZS5tX2luZGV4KS5qc1Zh
bHVlKCkuYXNVSW50MzIoKSkpKTsKKyAgICB9CiAKLSAgICBKU1N0cmluZyogcHJvcGVydHlOYW1l
ID0gbnVsbHB0cjsKLSAgICBpZiAoaW5kZXggPCBlbnVtZXJhdG9yLT5lbmRTdHJ1Y3R1cmVQcm9w
ZXJ0eUluZGV4KCkpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9IGVudW1lcmF0b3ItPnByb3BlcnR5
TmFtZUF0SW5kZXgoaW5kZXgpOwotICAgIFJFVFVSTihwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5h
bWUgOiBqc051bGwoKSk7CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRl
Y29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKENv
bW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBzdHJpbmcs
ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSkpKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCitKU0NfREVGSU5FX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKIHsK
ICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lPigpOwotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9
IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJh
dG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIHVpbnQzMl90IGluZGV4ID0gR0VUKGJ5dGVj
b2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMkFzQW55SW50KCk7CisgICAgYXV0byBieXRl
Y29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKTsKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICBhdXRvIG1vZGUg
PSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KEdFVChieXRlY29k
ZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBtZXRhZGF0YS5tX2VudW1lcmF0
b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsKIAotICAgIEpTU3RyaW5n
KiBwcm9wZXJ0eU5hbWUgPSBudWxscHRyOwotICAgIGlmIChlbnVtZXJhdG9yLT5lbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4KCkgPD0gaW5kZXggJiYgaW5kZXggPCBlbnVtZXJhdG9yLT5lbmRHZW5l
cmljUHJvcGVydHlJbmRleCgpKQotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5w
cm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lID8gcHJv
cGVydHlOYW1lIDoganNOdWxsKCkpOwotfQorICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
ZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNv
ZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIGlmIChhdXRvKiBiYXNlID0gYmFzZVZh
bHVlLmdldE9iamVjdCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6TmFtZWRNb2RlICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+
Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkp
OwogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX2luZGV4X3N0cmlu
ZykKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb0luZGV4
U3RyaW5nPigpOwotICAgIEpTVmFsdWUgaW5kZXhWYWx1ZSA9IEdFVChieXRlY29kZS5tX2luZGV4
KS5qc1ZhbHVlKCk7Ci0gICAgQVNTRVJUKGluZGV4VmFsdWUuaXNVSW50MzJBc0FueUludCgpKTsK
LSAgICBSRVRVUk4oanNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4VmFsdWUu
YXNVSW50MzJBc0FueUludCgpKS5zdHJpbmcoKSkpOworICAgICAgICBpZiAobW9kZSA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKQorICAgICAgICAgICAgUkVUVVJOKGpz
Qm9vbGVhbihiYXNlLT5oYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIEdFVChieXRlY29kZS5t
X2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkpKTsKKyAgICB9CisKKyAgICBKU1N0cmluZyog
c3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkp
OworICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKG9iamVj
dFByb3RvdHlwZUhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBwcm9wZXJ0
eU5hbWUpKSk7CiB9CiAKIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfcHJv
ZmlsZV90eXBlX2NsZWFyX2xvZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgKaW5kZXggZDhkMTUwMWZiMzViYWMyNzk0YzZkOTQxMDI3MWJiNjhm
NGNjMDU3ZS4uYTVlMDE1ZDUzYTY5ZTYwNTNhZjRkYmIzMWIyYzhmMjU3YzBkYjFlMiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKQEAgLTI1
NCwxNyArMjU0LDExIEBAIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2lz
X2NvbnN0cnVjdG9yKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3N0
cmNhdCk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcmltaXRp
dmUpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJvcGVydHlf
a2V5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9lbnVtZXJh
YmxlX2xlbmd0aCk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNf
ZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci1KU0NfREVD
TEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7
Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfZ2V0X2RpcmVjdF9wbmFtZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk7Ci1KU0NfREVDTEFSRV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOwotSlND
X0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKK0pT
Q19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCk7CitK
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92
YWwpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9p
bl9ieV92YWwpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfdW5yZWFjaGFibGUpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwCmluZGV4
IGUyY2ExNjJlMGI1NGUyNWNmMDY5ZWVhOGM4N2UxZWVhMmU0Y2Q1YmUuLjFiMDMxMzBmMGE1YzA3
YzMzNWNjNTg1NjgzYmI2NDVlZTUzZTA4YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKQEAgLTkwLDcgKzkwLDYg
QEAgU3BlY3VsYXRlZFR5cGUgRmlsZUJhc2VkRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRl
cm5hbChDb2RlQmxvY2sqIGNvZGVCbG9jaywKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIG9w
X2dldF9ieV92YWxfd2l0aF90aGlzOgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKICAg
ICBjYXNlIG9wX2NvbnN0cnVjdDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAg
IGNhc2Ugb3BfY2FsbF92YXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAKaW5kZXggZjEzOWQ0YTQ0
N2IyNzBmOWVkMzNmN2RmZDM1ZTAyYWZmYzMxYzcwMy4uYzI2YzAwMzc0MDM5MGM3YjM4MzYwNzYw
ZTNjMjI5YzFmZDFiODhlMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgT3Bj
b2RlSUQgRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlOjpvcGNvZGVBbGlhc0Zvckxvb2t1cEtleShj
b25zdCBPcGNvZGVJRCYgb3Bjb2QKIHsKICAgICBpZiAob3Bjb2RlSWQgPT0gb3BfY2FsbF92YXJh
cmdzIHx8IG9wY29kZUlkID09IG9wX2NhbGxfZXZhbCB8fCBvcGNvZGVJZCA9PSBvcF90YWlsX2Nh
bGwgfHwgb3Bjb2RlSWQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIHJldHVybiBv
cF9jYWxsOwotICAgIGlmIChvcGNvZGVJZCA9PSBvcF9nZXRfZGlyZWN0X3BuYW1lIHx8IG9wY29k
ZUlkID09IG9wX2dldF9ieV92YWxfd2l0aF90aGlzKQorICAgIGlmIChvcGNvZGVJZCA9PSBvcF9l
bnVtZXJhdG9yX2dldF9ieV92YWwgfHxvcGNvZGVJZCA9PSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhp
cykKICAgICAgICAgcmV0dXJuIG9wX2dldF9ieV92YWw7CiAgICAgaWYgKG9wY29kZUlkID09IG9w
X2NvbnN0cnVjdF92YXJhcmdzKQogICAgICAgICByZXR1cm4gb3BfY29uc3RydWN0OwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDI0
ZmNmMDgxNWUyNTA0OTVlMDMxNzk0YTA2ZTRiMzEwNWM3ODRmYjQuLjE1ZjViMDY0ZWNiZmM2NThh
OTkwZDJlYjU5NjM1YmYyYmRiZTg4ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTE0NjEsNiArMTQ2MSwxMCBAQCBjYXBpdGFs
TmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZs
YWcgPyBjYXBpdGFsTmFtZQogICAgICAgICB9KTsKICNlbmRpZgogCisgICAgbV9saW5rVGltZUNv
bnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6ZW1wdHlQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKV0uaW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0Nl
bGw+JiBpbml0KSB7CisgICAgICAgIGluaXQuc2V0KGluaXQudm0uZW1wdHlQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKCkpOworICAgIH0pOworCiAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZVByb2ZpbGVy
c09uR2xvYmFsT2JqZWN0KCkpIHsKICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAg
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5n
KHZtLCAiX19lbmFibGVTYW1wbGluZ1Byb2ZpbGVyIiksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwg
dGhpcywgMSwgU3RyaW5nKCksIGVuYWJsZVNhbXBsaW5nUHJvZmlsZXIpLCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5
QXR0cmlidXRlOjpSZWFkT25seSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAppbmRleCAyMWM3MGEyN2I2
OTFiZTA1NjkwYTJmYWU3N2M2OTkxMmFlZWMxMTlkLi5jZjBhNGE1MTM0ZjgyZGVlOTlhYWIyNWI2
NjM1OThlNTdkY2UyYzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKQEAgLTQ5LDEzICs0OSwxOSBA
QCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdAogCiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50
MzJfdCBpbmRleGVkTGVuZ3RoLCB1aW50MzJfdCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBX
cml0ZUJhcnJpZXI8SlNTdHJpbmc+KiBwcm9wZXJ0eU5hbWVzQnVmZmVyLCB1bnNpZ25lZCBwcm9w
ZXJ0eU5hbWVzU2l6ZSkKICAgICA6IEpTQ2VsbCh2bSwgdm0ucHJvcGVydHlOYW1lRW51bWVyYXRv
clN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1fcHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVy
dHlOYW1lc0J1ZmZlcikKICAgICAsIG1fY2FjaGVkU3RydWN0dXJlSUQoc3RydWN0dXJlID8gc3Ry
dWN0dXJlLT5pZCgpIDogMCkKICAgICAsIG1faW5kZXhlZExlbmd0aChpbmRleGVkTGVuZ3RoKQog
ICAgICwgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KG51bWJlclN0cnVjdHVyZVByb3BlcnRp
ZXMpCiAgICAgLCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KHByb3BlcnR5TmFtZXNTaXplKQog
ICAgICwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eShzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkgOiAwKQorICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0
eU5hbWVzQnVmZmVyKQogeworICAgIGlmIChtX2luZGV4ZWRMZW5ndGgpCisgICAgICAgIG1fbW9k
ZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOworICAgIGlmICht
X2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZTsKKyAgICBpZiAobV9lbmRHZW5lcmljUHJvcGVy
dHlJbmRleCAtIG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0
IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU7CiB9CiAKIHZvaWQgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxQcm9w
ZXJ0eU5hbWVBcnJheURhdGE+JiYgaWRlbnRpZmllcnMpCkBAIC0xNDgsNCArMTU0LDcwIEBAIHZv
aWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNPYmplY3QqIGJhc2UsIFByCiAgICAgfQogfQogCitKU1N0cmluZyogSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U09iamVjdCogYmFzZSwgdWludDMyX3QmIGluZGV4LCBNb2RlJiBtb2RlLCBib29sIHNob3VsZEFs
bG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEFT
U0VSVChpbmRleGVkTGVuZ3RoKCkgfHwgc2l6ZU9mUHJvcGVydHlOYW1lcygpKTsKKworICAgIGlu
ZGV4Kys7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBJbml0TW9kZTogeworICAgICAg
ICBtb2RlID0gSW5kZXhlZE1vZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgfQorCisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlOiB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGluZGV4ZWRMZW5ndGgoKSAmJiAhYmFz
ZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgpKSB7CisgICAgICAg
ICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlu
ZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKwor
ICAgICAgICBpZiAoaW5kZXggPCBpbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4g
c2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyA/IGpzU3RyaW5nKHZtLCBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpbmRleCkuc3RyaW5nKCkpIDogbnVsbHB0cjsKKworICAgICAgICBpZiAoIXNp
emVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIG1vZGUgPSBOYW1lZE1vZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgfQorCisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVk
TW9kZToKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsK
KyAgICAgICAgSlNTdHJpbmcqIG5hbWUgPSBudWxscHRyOworICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgaWYgKGluZGV4ID49IHNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWVBdEluZGV4
KGluZGV4KTsKKyAgICAgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGlmIChpbmRleCA8IGVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSAmJiBi
YXNlLT5zdHJ1Y3R1cmVJRCgpID09IGNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgbmFtZS0+dmFsdWUoZ2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICBzY29wZS5hc3NlcnRO
b0V4Y2VwdGlvbigpOworICAgICAgICAgICAgaWYgKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0
eShnbG9iYWxPYmplY3QsIGlkKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgbmFtZSA9
IG51bGxwdHI7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgICAgIHNjb3Bl
LmFzc2VydE5vRXhjZXB0aW9uKCk7CisKKyAgICAgICAgaWYgKGluZGV4ID49IGVuZFN0cnVjdHVy
ZVByb3BlcnR5SW5kZXgoKSAmJiBpbmRleCA8IHNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAg
ICAgICAgIG1vZGUgPSBHZW5lcmljTW9kZTsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaAppbmRleCAwMjAxMWQ0MWM3ZjY2ZGFkODgzYWU4ZDc3MGI1ZDNk
Mjg2Y2Q1MDg3Li5hMDA5YmIyOTAxYjRhYTE3MGQ3MzhhNTk4NjBhMDlhMTU2ZDIwNDVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2lu
Y2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC0zNyw2ICszNywxNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9
IEpTQ2VsbDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
QmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCisgICAgZW51bSBN
b2RlIDogdWludDhfdCB7CisgICAgICAgIEluaXRNb2RlID0gMCwKKyAgICAgICAgSW5kZXhlZE1v
ZGUgPSAxIDw8IDAsCisgICAgICAgIE5hbWVkTW9kZSA9IDEgPDwgMSwKKyAgICAgICAgR2VuZXJp
Y01vZGUgPSAxIDw8IDIsCisgICAgICAgIC8vIFByb2ZpbGluZyBPbmx5CisgICAgICAgIEhhc1Nl
ZW5OYW1lZE1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCA9IDEgPDwgMywKKyAgICB9OworCisgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50OF90IGVudW1lcmF0aW9uTW9kZU1hc2sgPSAoR2VuZXJpY01vZGUg
PDwgMSkgLSAxOworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNj
ZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAg
ICAgewpAQCAtNzQsMTYgKzg1LDIwIEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCBlbmRHZW5lcmlj
UHJvcGVydHlJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7
IH0KICAgICB1aW50MzJfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FjaGVkSW5saW5lQ2FwYWNpdHk7IH0KICAgICB1aW50MzJfdCBzaXplT2ZQcm9wZXJ0eU5hbWVz
KCkgY29uc3QgeyByZXR1cm4gZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKTsgfQorICAgIHVpbnQz
Ml90IG1vZGVTZXQoKSBjb25zdCB7IHJldHVybiBtX21vZGVTZXQ7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IGNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KICAgICBz
dGF0aWMgcHRyZGlmZl90IGluZGV4ZWRMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2luZGV4ZWRMZW5ndGgpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9lbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgZW5kR2VuZXJpY1Byb3Bl
cnR5SW5kZXhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3QgY2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VU
T0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KTsgfQor
ICAgIHN0YXRpYyBwdHJkaWZmX3QgbW9kZVNldE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fbW9kZVNldCk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IGNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJv
cGVydHlOYW1lcyk7CiAgICAgfQogCisgICAgSlNTdHJpbmcqIGNvbXB1dGVOZXh0KEpTR2xvYmFs
T2JqZWN0KiwgSlNPYmplY3QqIGJhc2UsIHVpbnQzMl90JiBjdXJyZW50SW5kZXgsIE1vZGUmLCBi
b29sIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPSB0cnVlKTsKKwogICAgIERFQ0xB
UkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZhdGU6CkBAIC05MiwxMyArMTA3LDE0IEBAIHByaXZh
dGU6CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgdWludDMy
X3QsIHVpbnQzMl90LCBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KiwgdW5zaWduZWQpOwogICAgIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiYmKTsK
IAotICAgIEF1eGlsaWFyeUJhcnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVy
dHlOYW1lczsKLSAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hh
aW47CiAgICAgU3RydWN0dXJlSUQgbV9jYWNoZWRTdHJ1Y3R1cmVJRDsKICAgICB1aW50MzJfdCBt
X2luZGV4ZWRMZW5ndGg7CiAgICAgdWludDMyX3QgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4
OwogICAgIHVpbnQzMl90IG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7CiAgICAgdWludDMyX3Qg
bV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsKKyAgICB1aW50MzJfdCBtX21vZGVTZXQgeyAwIH07Cisg
ICAgQXV4aWxpYXJ5QmFycmllcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9wZXJ0eU5h
bWVzOworICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVDaGFpbjsK
IH07CiAKIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqLCBK
U09iamVjdCosIFByb3BlcnR5TmFtZUFycmF5JiwgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVp
bnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNvdW50KTsKQEAgLTEzNCw3ICsxNTAsMTAgQEAgaW5s
aW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAgICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9
IDA7CiAgICAgfQogCi0gICAgZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y3JlYXRlKHZtLCBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVu
Z3RoLCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsK
KyAgICBpZiAoIWluZGV4ZWRMZW5ndGggJiYgIXByb3BlcnR5TmFtZXMuc2l6ZSgpKQorICAgICAg
ICBlbnVtZXJhdG9yID0gdm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCk7CisgICAgZWxz
ZQorICAgICAgICBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUo
dm0sIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMsIGluZGV4ZWRMZW5ndGgsIG51
bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdURk1vdmUocHJvcGVydHlOYW1lcykpOwogICAgIGlm
ICghaW5kZXhlZExlbmd0aCAmJiBzdWNjZXNzZnVsbHlOb3JtYWxpemVkQ2hhaW4gJiYgc3RydWN0
dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcyA9PSBzdHJ1Y3R1cmUpIHsKICAgICAgICAgZW51
bWVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBlQ2hhaW4odm0sIHN0cnVjdHVyZS0+cHJvdG90eXBl
Q2hhaW4oZ2xvYmFsT2JqZWN0LCBiYXNlKSk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNh
Y2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcih2bSkpCkBAIC0xNDMsNCArMTYyLDYgQEAgaW5saW5l
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1cm4gZW51bWVyYXRvcjsKIH0KIAordXNpbmcgRW51
bWVyYXRvck1ldGFkYXRhID0gc3RkOjp1bmRlcmx5aW5nX3R5cGVfdDxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok1vZGU+OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0
aW5nRnV6emVyQWdlbnQuY3BwCmluZGV4IGNkY2ZhOTlkNDlhNjkxNzQwMWQ2ODMxNjhiYTE5YWJk
ZWJhZTlhNGQuLmM3YThlMzFmN2U0N2JkNjkxMWZlNGFjNDVmZGY3N2Q2ODM5NjQxMDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRp
bmdGdXp6ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJl
ZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Miw3ICs1Miw3IEBAIFNwZWN1bGF0
ZWRUeXBlIFByZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbklu
dGVybmFsKENvZGVCbG9jCiAgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CiAgICAgY2FzZSBvcF9nZXRf
YnlfaWRfd2l0aF90aGlzOgogICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAg
Y2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsOgogICAgIGNhc2Ugb3BfY29uc3RydWN0OgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFy
Z3M6CiAgICAgY2FzZSBvcF9jYWxsOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434449</attachid>
            <date>2021-07-28 12:39:16 -0700</date>
            <delta_ts>2021-08-03 12:54:58 -0700</delta_ts>
            <desc>test32bit</desc>
            <filename>bug-227989-20210728153915.patch</filename>
            <type>text/plain</type>
            <size>369865</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwMzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZTdmNTgxYmVlMTEyNmQ3MTJlZWZhYjhjZTBjNjA2M2Q0ZjI5ZTVkLi41NjNkYzg0NmU4NGZhYjM3
NWRhNTFjMDk1MjQ2ZjdiMDFiOWZmNTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNjUgQEAKKzIwMjEtMDctMjcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKIDIwMjEtMDctMjYgIFl1c3VrZSBTdXp1a2kgIDx5
c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgVGVtcG9yYWwgdG8gZmVhdHVyZXMuanNv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
YmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNNjQuaAppbmRleCBmZTMwZDljODRkMzUyN2VlYjE2ZmNkMDZlMTE1ZmM2OGQ2OTA5MGZk
Li5lMjgyZmNiZTBkNTQwMzU0OWI2MWQ4Mzc5Yjk1M2RhMmY1NDIwOThkIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApA
QCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0YVRlbXBSZWdp
c3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMsIEFi
c29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRkcmVzcy5tX3B0
ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsKKyAgICAgICAg
b3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBz
dG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQorCiAgICAgdm9p
ZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewog
ICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1tZWRpYXRlOjpj
cmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNTRkNDU2N2Q0YzFj
NDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBlYzlhYTJiM2I2YzdkNmVlMDI5ZjA3
NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYyNSwxMiBAQCBw
dWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zmc2V0LCBkZXN0
LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZvaWQgb3I4KFJl
Z2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAg
ICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAg
dm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBt
X2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpAQCAtNjY1LDYg
KzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShzdGF0aWNfY2Fz
dDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3MuYmFzZSwgYWRk
cmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoVHJ1c3Rl
ZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtb3Zl
KFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3RlcigpKTsKKyAgICAg
ICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0KKwogICAgIHZv
aWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVySUQgZGVzdCkK
ICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4IDk0MzdmZDNi
ZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlmYzlhNTU5ZWNh
NmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2IEBAIHB1Ymxp
YzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKICAgICB9
CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0
ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRy
ZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwxMiBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lzdGVySUQgc3Jj
LCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtb3Zl
KHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAgfQorCiAgICAg
dm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4IGIwMmU1NjAy
MTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThmMTgwMjkyY2Jh
OGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBt
YWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRlUHJpdmF0ZVN5
bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAorICAgIG1hY3Jv
KGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3ltYm9scyB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJi
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5yYgppbmRleCAx
ODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5NTIzNTczYWQx
MmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMgWwogICAgIDpE
ZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0aEV4dGVuc2lv
biwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwKICAgICA6R2V0
QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1NCw4OSArMTE1
NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2ljQmxvY2tMb2Nh
dGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2VudW1lcmFibGVf
bGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6IHsKICAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAorb3AgOmVudW1l
cmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAor
ICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAjIFdpbGwgYWx3
YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgorICAgICAgICBp
bmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVyeSB0aW1lIG1v
ZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVudW1lcmF0b3I6
IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJv
cGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsK
LSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJhYmxlX3Byb3Bl
cnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0b3JfZ2V0X2J5
X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAogICAgICAg
ICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1l
OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAg
ICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7
CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQcm9maWxlOiBB
cnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFk
YXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3AgOmVudW1lcmF0
b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9y
X3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lz
dGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIs
CiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6ZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgaW5kZXg6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAgICAgIGFycmF5
UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRhdGE6IEVudW1l
cmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitvcCA6ZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTog
VmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwK
ICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmly
dHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9m
aWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRv
ck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2MTg5OWE2MjA5
ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlhOTZkOTQ4NTc1
MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBjb25zdCBJ
bnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMoT3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGJh
c2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BOZXdHZW5lcmF0
b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBzY29wZSkKLSAg
ICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0ZUxleGljYWxF
bnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAgICAgVVNFUyhP
cENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xUYWJsZSwgaW5p
dGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAtMjIxLDExICsy
MTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRGcm9tQXJndW1l
bnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11dGFibGVCdXR0
ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgYmFzZSwg
cHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgYmFz
ZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwg
ZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIGVu
dW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJvcGVydHkpCiAg
ICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wUHV0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsyNTgsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
UmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0aFRoaXMsIGJh
c2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZDdXN0b20sIHZh
bHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9wSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAgIFVTRVMoT3BJ
blN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikKIAogICAgIGNh
c2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNv
bnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhPcEdldERpcmVj
dFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAgICBVU0VTKE9w
U3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIsIHNjcnV0aW5l
ZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiArMjg0LDExIEBA
IHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2Nv
cGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFyZ3VtZW50KQog
CisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRv
cikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5h
bWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgYmFz
ZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51
bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBl
bnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAgICAgICAgIHVz
ZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5bWJvbENhbGws
IGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUpOwpAQCAtNDI0
LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwodW5zaWdu
ZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICByZXR1cm47CiAg
ICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBh
cmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERFRlMoT3BUb0lu
ZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgsIGRzdCkKLSAg
ICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVy
YWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBk
c3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9wR2V0
RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBkc3Qp
Ci0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAgIERFRlMoT3BF
bnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVudFNjb3BlLCBk
c3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9wQ3JlYXRlTGV4
aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3duVmFsdWUpCiAK
KyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwgaW5kZXgpCisg
ICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIGRzdCkK
KwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
aW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3
ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODljNmU5NGQyMGU1
NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBA
IC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
U2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAgbV9ieXRlY29k
ZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
SUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpCi0KICAg
ICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENh
bGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3YXJkQXJndW1l
bnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
CiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldFBy
aXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQbmFtZSwgcHJv
ZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkKICAgICAgICAg
TElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRCeUlkRGlyZWN0
LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawog
CiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJTksoT3BFbnVt
ZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBwcm9maWxl
KQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQorCiAgICAgICAg
IExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGwsIHByb2ZpbGUp
CiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5ODhhODYxZGIx
NWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzkyZmM0NTY3YWFm
NDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9M
aW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xp
bmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBudWxscHRyKSBc
CisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwKIAogCiAjZGVm
aW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0MzBhMWQzMjRi
NjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBk
MWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVy
b24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9w
Y29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcFRhaWxD
YWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFyYXJncykgXAog
ICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBuYW1lKSBcCisg
ICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdldEJ5SWQpIFwK
ICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5R2V0QnlJZCkg
XApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhG
b3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8o
T3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9XSVRIX0FSUkFZ
X1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BUYWlsQ2FsbFZh
cmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXApAQCAtMTM2
LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bj
b2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wSW5CeVZh
bCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5VmFsRGlyZWN0
KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRv
ckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAorICAgIG1hY3Jv
KE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RF
X1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFjcm8oT3BOZXdB
cnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2UyMjZjOTUyMmY3
YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJkYmQ0YjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25lZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KFJlZ2lz
dGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5M
b29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5zaWduZWQgYnJh
bmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpy
ZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAgUkVMRUFTRV9B
U1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VSVCghZ2VuZXJp
Y1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFzT3duUHJvcGVy
dHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7CisgICAgY29udGV4
dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlv
bigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQoY29uc3QgSWRl
bnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0cnVjdHVyZUZv
ckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3RydWN0dXJlRm9y
SW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6
V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1l
cmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3Ry
dWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9wRW51bWVyYXRv
ckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIGNvbnRl
eHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVu
dW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKICAgICAg
ICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVkRm9ySW5Db250
ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAoT3BHZXRCeVZh
bDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXRXaXRoU21h
bGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2Us
IGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENvbnRleHQuYWRk
R2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwot
ICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFdlIGNhbm5v
dCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJlY3RQbmFtZSA9
PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFkYXRhIElEIGFs
bG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4
dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAgT3BHZXREaXJl
Y3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0KSwgYmFzZSwg
cHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29udGV4dC5lbnVt
ZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJ
bnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhhdCBjYW4gcmVz
aXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6
ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0
eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAg
ICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVy
dHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAtNDU1MiwzMyAr
NDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEdsb2JhbFBy
aXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBlbWl0R2V0RnJv
bVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsKIH0KIAotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1lcmFibGVMZW5n
dGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3Rl
cklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0KHRoaXMsIGRz
dCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFt
ZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRF
bnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OjplbWl0KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1cm4gZHN0Owor
ICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRl
eCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFz
RW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFz
ZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQotewot
ICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRv
cik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0g
ICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBlbnVtZXJhdG9y
LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsK
LSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAg
ICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAgcmV0dXJuIGRz
dDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0NlbGxXaXRoVHlw
ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUpCiB7CiAgICAg
T3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBAIC00NjQ4LDIz
ICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7CiB9CiAKLXZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBs
b2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAgIGlmICghbG9j
YWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3Rh
Y2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVy
LCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0KLQotdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxS
ZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJldHVybjsKLSAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7
Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvckluQ29udGV4dCgp
LmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQogUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGljYWxFbnZpcm9u
bWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VSVChtX2NvZGVC
bG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dGdW5jdGlvbkNv
bnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkV4dGVuZHMg
fHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VNb2RlKCkgPT0g
U291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAgLTQ3NjgsMjAg
KzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNUb0Fycm93RnVu
Y3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0
ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgUmVnaXN0
ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lz
dGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNp
emUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IFN0cnVj
dHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBwcm9wZXJ0eVJl
Z2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRvcHRSZWYoKm5l
dyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0ZXIsIHByb3Bl
cnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lzdGVyLCBiYXNl
VmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAgICByZXR1cm47
CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVyZUZvckluQ29u
dGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxpemUoKnRoaXMs
IG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAgIG1fZm9ySW5D
b250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzExLDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJRCogc3JjKQog
ICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1wb3JhcnkoKSwg
c3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsKIH0KIAotdm9p
ZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4
dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKLSAgICAvLyBl
aXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAgLy8KLSAgICAv
LyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0
aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlh
YmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KLSAg
ICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJl
bHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAiYW5hbHlzaXMi
IHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywg
d2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRp
dmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdh
cwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBj
aGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJlYXNzaWduZWQg
ZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9mZnNldCA9IGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNv
ZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5z
dHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8
T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1
Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewotICAgICAgICAg
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRy
KCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0K
LSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlw
ZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5zdEluZGV4ID0g
c3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAgQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgogICAgIC8vIDMu
IHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5LgogCi0gICAg
aWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVjdFBuYW1lPjo6
dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZhbCkgPD0gc2l6
ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlIGlmIGNvbnN0
ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3BlcnR5Pjo6dmFs
dWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8PSBzaXplb2Yo
T3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1pdDxPcGNvZGVT
aXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2Us
IFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
TmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBlOjplbWl0KCZn
ZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rl
cihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSByZW1haW5pbmcg
Ynl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkgPCBlbmQpCiAg
ICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRvcik7CiB9CiAK
LXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNv
ZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAgIEJhc2U6OmZp
bmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
IGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBGb3JJbkNvbnRl
eHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlmCisgICAgLy8g
ZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAgIC8vCisgICAg
Ly8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25lZCB3aXRoaW4g
dGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJp
YWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVuY3Rpb24uCisg
ICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNpZW50bHkgcmFy
ZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8gImFuYWx5c2lz
IiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRvIGRvIHRoaXMs
IHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZsb3ctc2Vuc2l0
aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSB3
YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRvIHJ1bnRpbWUg
Y2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyByZWFzc2lnbmVk
IGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpOyAhZXNj
YXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAgICAgIGF1dG8g
aW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKKyAgICAg
ICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAgIGZvciAoQ2hl
Y2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsg
Y2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJl
Z2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0gaW5zdHJ1Y3Rp
b24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAgIHJldHVybjsK
IAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RPcGNvZGVJRDsK
ICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBuYW1lPihnZW5l
cmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0b3JHZXRCeVZh
bCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEluU3RydWN0
dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9w
RW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAg
ICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEptcCkgPD0gc2l6
ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3RydWN0dXJlRm9y
SW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtl
ZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5
dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICBCYXNlOjpm
aW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAg
ICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBp
bnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBpbnN0UGFpci5z
ZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4KS0+Y2FzdDxP
cEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlSZWdJbmRl
eCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9p
ZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8qIGluc3RydWN0
aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAsMTQgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6OmVtaXQodGhp
cywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3RydWN0dXJlRm9y
SW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChS
ZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5lcmF0b3I6OmZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAgICBGb3JJbkNv
bnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwogICAgICAgICBp
ZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2NjYzdjZmRiNjg0
ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBK
U0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAgIGNsYXNzIElu
ZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250ZXh0OworICAg
IGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlvbiB7CiAgICAg
ICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVkPEZvckluQ29u
dGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1
YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBt
X2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4X3Qg
ewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0dXJlRm9ySW4K
LSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBt
X3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3RydWN0dXJlRm9y
SW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9ySW5Db250ZXh0
KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4ZWRGb3JJbkNv
bnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4
dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NF
UlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1cm4gKnJlaW50
ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRleHQoUmVnaXN0
ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlCeXRlY29kZVN0
YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0KLQotICAgICAg
ICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2Rl
R2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0cnVlIH07Ci0g
ICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0
T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQgOiBwdWJs
aWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKICAg
ICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCBp
bnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1c2luZyBIYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWduZWQ+OwogCi0g
ICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAg
ICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVGb3JJbiwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRl
eFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJvcGVydHlSZWdp
c3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVyYXRvclJlZ2lz
dGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUpCi0gICAgICAg
IHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lz
VmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsg
fQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleFJl
Z2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5nZXQoKTsgfQor
ICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxSZWdpc3Rl
ci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7IH0KKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
LmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+JiBiYXNlVmFy
aWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAgICAgIHZvaWQg
YWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0luZGV4KQpAQCAt
MzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBtX2hhc093blBy
b3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsgYnJhbmNoSW5z
dEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAgICAgIEZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBS
ZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUsIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBtX2xvY2FsUmVn
aXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVy
dHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5T2Zmc2V0KQor
ICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAgICAgICwgbV9t
b2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKKyAg
ICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRP
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OyB9CisKICAg
ICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2VkQ29kZUJsb2Nr
R2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgLy8gVE9ETzogIERvZXMg
dGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fcHJvcGVy
dHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9mZnNldDsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gbV9iYXNl
VmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOworICAgICAgICBi
b29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5Qnl0ZWNvZGVT
dGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOworICAgICAgICBW
ZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093blByb3BlcnR5
SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAotICAgIGNsYXNz
IEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNp
bmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4ZWRGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdp
c3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZv
ckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5kZXhSZWdpc3Rl
cikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCogaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFkZEdldEluc3Qo
dW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldEluc3RzLmFwcGVu
ZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgVmVjdG9yPHN0
ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAgICAgc3RydWN0
IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAgSGFuZGxlclR5
cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwogCiAgICAgICAg
IGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIEluZGV4
ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9sZE9w
VHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xk
T3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KICAgICAgICAg
ZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVUeXBlJik7CiAK
ICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAg
ICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0IElkZW50aWZp
ZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0KiBmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAgICAgICAgRm9y
SW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Npb25JbmZvKGNv
bnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3NpdGlvbiYgZW5k
RGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdl
dCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVnaXN0ZXJJRCog
Y29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRlSnVtcElmTm90
RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsK
LSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0
cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZv
ckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsK
IAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1wT3A+CiAgICAg
ICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJn
ZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzEsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAgdm9pZCBlbWl0
Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lz
dGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAgICBSZWdpc3Rl
cklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRH
ZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1lcmF0b3IoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5ndGgpOwotICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRvcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwgUmVnaXN0ZXJJ
RCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJh
dG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOworICAgICAg
ICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lz
dGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQq
IG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0NlbGxXaXRo
VHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
c3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2VuZXJhdG9yVHlw
ZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3RvcihSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bWJlcihSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051
bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRFcXVhbGl0
eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChudWxscHRyLCBqc051bGwoKSkpOyB9
CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFOdWxsPihkc3QsIHNyYyk7IH0KICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihkc3QsIHNyYywg
ZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlzRGVs
ZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpOwog
Ci0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBS
ZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUoUmVn
aXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHks
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOwot
ICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwor
ICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBl
bnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNl
KTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAogICAg
ICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAg
IExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRl
eCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2
Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMxLDI0
IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdzLT5t
X2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1fbGlz
dE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2FyZ3Mt
Pm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNSZXNv
bHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRleHQg
PSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAgVmFy
aWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1lbnRW
YXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBhcmd1
bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5lcmF0
b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRleHQg
PSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAgYXV0
byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVjdHVy
ZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAgICAg
ICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8UmVz
b2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJpYWJs
ZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAgICAg
ICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52b2tl
ZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRoaXN8
IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5h
bWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlw
ZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBSZWdp
c3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShC
eXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5lcmF0
b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdldCgp
LCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0dXJl
UHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0Tm9k
ZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAgIGdl
bmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgpLCBi
YXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCks
IGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAgICAg
ICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0ZXJJ
RCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJ
bkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRleHQs
IGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBDYWxs
QXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBnZW5l
cmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKQEAg
LTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0b3Iu
c2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQtPmhh
c0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3Qs
IGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7CiAg
ICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6OlNj
b3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6SXNO
ZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBAIHZv
aWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwg
UmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9yLmln
bm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9
IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVuZ3Ro
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9yLmVt
aXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxvY2Fs
ID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJh
c2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5LDEz
NyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxlID0g
Z2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVz
KCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAgIH0K
IAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9y
Li5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7Ci0K
ICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNldCgp
OwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQoKSAr
IChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERaU3Rh
Y2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2socHJl
c2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAgIHsK
LSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUo
TGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJh
dG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVyYWJs
ZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwotICAg
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3Iu
bmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9IGdl
bmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsK
ICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0Lmdl
dCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZG
YWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQoKSk7
Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdl
dCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
clN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNjb3Bl
KGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRzdCwg
bV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUobG9j
YWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHBy
b2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29wZS0+
Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVi
dWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZv
ciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9v
cFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdlbmVy
YXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3RydWN0
dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2NvcGUg
PSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVmPExh
YmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVyYXRv
ckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0b3JT
dHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwotICAg
ICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1bHQu
Z2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUt
PmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAgIGdl
bmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAgICBn
ZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7CisgICAg
ICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IubW92
ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50Ojpl
bXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVxdWFs
aXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBw
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUocHJv
cGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNjb3Bl
Rm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5n
ZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAgICAg
Z2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25t
ZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BFbmQu
Z2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZlZFRE
WlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAgICAg
IFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVsU2Nv
cGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5uZXdM
YWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFiZWwo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdlbmVy
aWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVt
ZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0
YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1YWxs
eSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdldF9i
eV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlzIG9w
Y29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5hbWUu
Z2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxwcyBw
bGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5ndWlz
aCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVsbChn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3IsIHBy
b3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJv
bEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hGb3JJ
blNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBlbnVt
ZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BGb3JJ
blNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUu
Z2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdu
bWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5l
cmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRQ
cm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0b3Iu
ZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
Q29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmluZGV4
IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjgyN2MwYjVlNmRhZTQ4
YWY5Njg3MTE1NmNjNGYyYzg5MjMzYTVmY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIxNTEs
NyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5nQ2hh
ckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgp
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRvckdl
dEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIHVzZSB0
aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2YgdGhlIG5vZGUgd2hlbiBw
cm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBt
YWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoK
QEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2Ug
QXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoKICAgICBjYXNlIEF0b21pY3NYb3I6
IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3IgRW51bWVyYXRvckdldEJ5VmFsIGJ1
dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFjdGljZS4KICAgICAgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAgIGF1dG8gZm9sZEdldEJ5VmFsT25D
b25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVkZ2UsIEVkZ2UmIGluZGV4RWRnZSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZXhwYW5kIHRoaXMgZm9yIG5vbiB4
ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAgICAgICAgICBpZiAoIWlzWDg2KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFycmF5RWRnZSk7CiAKQEAgLTQyNDQs
MjUgKzQyNDgsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICBzZXROb25DZWxs
VHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgc2V0
Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgc2V0Tm9u
Q2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKLSAgICAgICAgY2xvYmJlcldvcmxk
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eTogeworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKQEAgLTQyODEs
MjYgKzQyNjgsNTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWkKICAgICAgICAgc2V0Tm9uQ2Vs
bFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQot
ICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgY2xvYmJlcldvcmxkKCk7Ci0gICAg
ICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQorCiAg
ICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAgICAgICAgc2V0VHlwZUZvck5vZGUo
bm9kZSwgU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29ybGQoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAg
IHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIGlmIChhcnJheU1vZGUuaXNT
YW5lQ2hhaW4oKSkKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEo
KSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKTsKKyAgICAgICAgZWxz
ZSBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUgfHwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkg
IT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworCisgICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpLCAwKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBT
cGVjSW50MzJPbmx5KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVy
YXRvckdlbmVyaWNQbmFtZTogeworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZTogewogICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nIHwgU3Bl
Y090aGVyKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzog
ewotICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVm
aW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJzdHJhY3QKKyAgICAgICAgLy8gdmFsdWUgaW5mb3Jt
YXRpb24uCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZv
ck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCmluZGV4IDExMTFmODlmOWQ3YjViOTc3
NzhjMTZjOGQ1NDY0MGJlYTM3NDQyYjIuLmEwMjZhYWQxODkzYmYyM2M1NzE5NmZjYzZjOTFmYzIw
MDAzYzQ1NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaApAQCAt
Mjg5LDYgKzI4OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09
IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICB9CiAKKyAgICBib29sIGlzU2FuZUNo
YWluKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0luQm91bmRzU2FuZUNoYWluKCkg
fHwgaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpOworICAgIH0KKwogICAgIGJvb2wgaXNPdXRPZkJv
dW5kcygpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgfHwgc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBkYjM3ZjRkZGRiZjgwY2Q2NmViNTc4N2Q3
YmFhMmJmNTNhZjg5MDc2Li45ZGJkMGI0N2Q5ZGZmNGNmNjAzOGFmNTAwMTc5MzQ4YmUwYWVhMjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTM5MCw3ICszOTAsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgbm9kZS0+Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2Rl
TmVlZHNOZWdaZXJvKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAg
ICAKKworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRC
eVZhbDogewogICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VG
bGFncyhOb2RlQnl0ZWNvZGVVc2VzQXNWYWx1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5v
ZGVCeXRlY29kZVVzZXNBc090aGVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVj
b2RlVXNlc0FzQXJyYXlJbmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGEyOTZjNGI4N2M4NTg4NjRmYmRlZGQ3NGVmNzI3ZTU0
ZDk1ZmQ2OTQuLjJjOTgzYmFjMzcwMGM4ZDI5NTcyMzFkYmRlZjJlYmYzNTBkMzBiN2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC04
Mzg3LDEwMyArODM4NywxMzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZCBsaW1pdCkKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19wcml2YXRlX2JyYW5k
KTsKICAgICAgICAgfQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoR2V0RW51bWVyYWJsZUxlbmd0aCwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChi
eXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVt
ZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KTsKKyAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRv
cjogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9k
c3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUubV9iYXNl
KSkpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3Ip
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eTog
ewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BI
YXNFbnVtZXJhYmxlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoSGFzRW51bWVyYWJsZVByb3BlcnR5LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwg
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9o
YXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbnVt
ZXJhdG9yX25leHQ6IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0
YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUg
YXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6
UmVhZCk7CisgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7Cisg
ICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChieXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAg
ICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKTsKKyAgICAg
ICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNvZGUubV9tb2RlKTsKIAotICAgICAgICBjYXNl
IG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5Pigp
OwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc093blN0cnVj
dHVyZVByb3BlcnR5LAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAg
ICAgICAgICAgICAgIGdldChieXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBn
ZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotICAgICAgICB9CisgICAgICAgICAgICBhdXRv
IHNlZW5Nb2RlcyA9IG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhOwogCi0gICAgICAgIGNh
c2Ugb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAg
ICBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9w
ZXJ0eT4oKTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsK
LSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUu
bWV0YWRhdGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAg
ICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOwotICAgICAgICAg
ICAgTm9kZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSk7
Ci0gICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBIYXNJbmRleGVkUHJvcGVydHkgbXVz
dCBiZSB0cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIHNpbmNlIEZpeHVwUGhh
c2UgbWF5IG1ha2UgaXQgZ2VuZXJpYy4KLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
aGFzSXRlcmFibGVQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGlu
ZGV4KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxs
cHRyKTsgLy8gc3RvcmFnZSBmb3IgSW5kZXhlZE1vZGUgb25seS4KKyAgICAgICAgICAgIE5vZGUq
IHVwZGF0ZWRJbmRleEFuZE1vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRv
ck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcElu
Zm8oc2Vlbk1vZGVzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRNb2RlID0gYWRkVG9H
cmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCB1cGRhdGVkSW5kZXhBbmRNb2RlKTsKKyAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX21vZGUsIHVwZGF0ZWRNb2RlKTsKKworICAgICAgICAg
ICAgTm9kZSogdXBkYXRlZEluZGV4ID0gYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RJ
bmRleCwgdXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9p
bmRleCwgdXBkYXRlZEluZGV4KTsKKworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fcHJvcGVy
dHlOYW1lLCBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB1cGRh
dGVkSW5kZXgsIHVwZGF0ZWRNb2RlLCBlbnVtZXJhdG9yKSk7CisKKyAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudW1lcmF0b3JfbmV4dCk7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9w
X2dldF9kaXJlY3RfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCk7Ci0gICAg
ICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6IHsKKyAgICAg
ICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdldEJ5VmFsPigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFy
cmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOworICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4
aXQoKTsKKwogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwot
ICAgICAgICAgICAgTm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eU5hbWUgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWUpOwogICAgICAgICAgICAgTm9kZSogaW5kZXggPSBnZXQoYnl0ZWNvZGUubV9pbmRleCk7Cisg
ICAgICAgICAgICBOb2RlKiBtb2RlID0gZ2V0KGJ5dGVjb2RlLm1fbW9kZSk7CiAgICAgICAgICAg
ICBOb2RlKiBlbnVtZXJhdG9yID0gZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcik7CiAKKyAgICAg
ICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gT3B0aW9uU2V0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6TW9kZT46OmZyb21SYXcobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOworICAgICAg
ICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9T
UkV4aXQpOworCisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBiYWRNb2RlID0g
YWRkVG9HcmFwaChBcml0aEJpdEFuZCwgbW9kZSwganNDb25zdGFudChqc051bWJlcihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IHRoZSBBcml0aEJp
dEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNvIGl0J3Mgb2sgdG8gZXhpdCBoZXJlLgorICAgICAg
ICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEV4
aXRPSyk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJ
bmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzTnVtYmVyKDApKSksIGJhZE1vZGUpOworCisgICAg
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5k
ZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxw
dHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAg
ICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXRC
eVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsK
KworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGVudW1lcmF0b3IpOworICAgICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVja2luZyBmb3IgYSBCYWRDb25zdGFudFZh
bHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNlIHRoZSBHZW5lcmljIHZhcmlhbnQgaWYgd2Ugc3dp
dGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJbmRleGVkTW9kZSArIE5hbWVkTW9kZSBldmVuIHRo
b3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAgICAgICAgICBpZiAoIXNlZW5Nb2Rlcy5jb250
YWluc0FueSh7IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoIH0pCisg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENvbnN0YW50VmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgTm9kZSogbW9kZVRlc3QgPSBhZGRUb0dyYXBoKFNhbWVWYWx1ZSwgbW9kZSwganNDb25zdGFu
dChqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlKSkpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSXNDb25z
dGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzQm9vbGVhbihmYWxzZSkpKSwgbW9k
ZVRlc3QpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2UnbGwgdXNl
IHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRjaCBHZXRC
eVZhbC4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJv
cGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0
byBtYXRjaCBHZXRCeVZhbC4KICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBHZXREaXJlY3RQbmFtZSwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGlj
dGlvbikpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2Rl
OjpWYXJBcmcsIEVudW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKIAotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0
X2RpcmVjdF9wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcjogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUu
bV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1l
cmF0b3IpOwotICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9pbl9ieV92YWw6
IHsKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckluQnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2Rl
ID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CiAK
LSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZTogewotICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLAotICAgICAgICAgICAgICAgIGdldChieXRl
Y29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2luZGV4
KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUpOwotICAgICAgICB9CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUu
bV9iYXNlKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eU5hbWUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2lu
ZGV4KSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7
CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJn
LCBFbnVtZXJhdG9ySW5CeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyht
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpKTsKIAotICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgICAgICAg
ICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvciksCi0gICAgICAg
ICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOworICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKLSAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChUb0luZGV4U3RyaW5nLCBnZXQoYnl0ZWNv
ZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX2luZGV4X3N0cmlu
Zyk7CisKKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHk6IHsKKyAg
ICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVy
YXRvckhhc093blByb3BlcnR5PigpOworICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGdldEFycmF5TW9kZShtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwor
CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9iYXNlKSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpKTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2luZGV4KSk7CisgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9tb2RlKSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEpKSk7CisKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Vu
dW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9w
X2dldF9pbnRlcm5hbF9maWVsZDogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDRkFQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmNwcAppbmRleCBjYzBkMDE0ZGEyOTMxZmYzZWNkY2U5NDI5Y2MyNjI1NjFlMmY3Zjc2Li4w
NmQxOWQxNzM5NzMwM2Y3NDFiZTZiMDJiZjAxMDU3ZjcyMjU2NDgxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBkYXRhTG9nKCIgICBGb3VuZCBtdXN0LWhhbmRsZSBibG9jazogIiwgKmJs
b2NrLCAiXG4iKTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgbWVyZ2VzIHNuYXBzaG90IG9m
IHN0YWNrIHZhbHVlcyB3aGlsZSBDRkEgcGhhc2Ugd2FudCB0byBoYXZlIHByb3ZlbiB0eXBlcyBh
bmQgdmFsdWVzLiBUaGlzIGlzIHNvbWV3aGF0IHRyaWNreS4KLSAgICAgICAgLy8gQnV0IHRoaXMg
aXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlkYXRlcyB0aGUgaW5wdXRzIHdpdGgg
KnByb3ZlbiogQWJzdHJhY1ZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMK
KyAgICAgICAgLy8gQnV0IHRoaXMgaXMgT0sgYXMgbG9uZyBhcyBERkcgT1NSIGVudHJ5IHZhbGlk
YXRlcyB0aGUgaW5wdXRzIHdpdGggKnByb3ZlbiogQWJzdHJhY3RWYWx1ZSB2YWx1ZXMuIEFuZCBp
dCB0dXJucyBvdXQgdGhhdCB0aGlzCiAgICAgICAgIC8vIHR5cGUgd2lkZW5pbmcgaXMgY3JpdGlj
YWwgdG8gbmF2aWVyLXN0b2tlcy4gV2l0aG91dCBpdCwgbmF2aWVyLXN0b2tlcyBoYXMgbW9yZSBz
dHJpY3QgY29uc3RyYWludCBvbiBPU1IgZW50cnkgYW5kCiAgICAgICAgIC8vIGZhaWxzIE9TUiBl
bnRyeSByZXBlYXRlZGx5LgogICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBjNzE2NGIzMGY0
NjRlYjBkNDM4MmUyY2NhNDJkNTY5OTY0ZDFiZjY3Li5hYzc4MmQ5OWI0NTNjNTA4MjYxYTdmM2E4
Nzk1NTg4MDBkMDA1Zjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCkBAIC0yNTQsMTcgKzI1NCw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJ
CiAgICAgY2FzZSBvcF9oYXNfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX2dldF9zY29wZToK
ICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgotICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVf
bGVuZ3RoOgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eToKLSAg
ICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNlIG9w
X2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHk6Ci0gICAgY2FzZSBvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBv
cF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6
Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZToKLSAgICBjYXNlIG9wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZToKLSAgICBjYXNlIG9wX3RvX2luZGV4X3N0cmluZzoKICAg
ICBjYXNlIG9wX25ld19mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ug
b3BfbmV3X2dlbmVyYXRvcl9mdW5jOgpAQCAtMjk5LDYgKzI4OSwxMCBAQCBDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29kZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgY29uc3QgSQogICAgIGNhc2Ugb3Bfc2V0X3ByaXZhdGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9j
aGVja19wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNl
IG9wX2VudW1lcmF0b3JfbmV4dDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoK
KyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOgorICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9oYXNfb3duX3Byb3BlcnR5OgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
IAogICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAppbmRleCA5ZDEwMDRmZTUzZjNkNDQ3ZGYxMDNmYWNhMGQyZTEwZWM0ZmY1ZjQ2
Li41ZGQ2NTE0ZDFlMWFmY2E3YzM3YWMxOTg4YWFiMzIxNGI3ZmI2YWE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaApAQCAtMTQ3LDYgKzE0NywxMCBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYg
cmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheU9yRW1wdHk6CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
R2V0QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0
eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgIGNhc2UgR2V0
VmVjdG9yTGVuZ3RoOgpAQCAtMTY0LDcgKzE2OCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1
CiAgICAgICAgIGNhc2UgQXJyYXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgogICAg
ICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5OgogICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0FuZDoKICAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgpAQCAtMzM3
LDIxICszNDAsODAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwg
Y29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgd3JpdGUoTWF0
aERvdFJhbmRvbVN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogCi0gICAgY2FzZSBHZXRFbnVtZXJh
YmxlTGVuZ3RoOiB7Ci0gICAgICAgIHJlYWQoSGVhcCk7Ci0gICAgICAgIHdyaXRlKFNpZGVTdGF0
ZSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RJbmRleDogeworICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGNhc2UgVG9JbmRleFN0cmluZzoKLSAgICBjYXNlIEdldEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsK
LSAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRlcmZseSk7Cisg
ICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok5hbWVkTW9kZSAmJiBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgcmVhZChOYW1lZFByb3BlcnRpZXMpOworICAg
ICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpICE9IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIGNsb2Ji
ZXJUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFycmF5
TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CisgICAgICAgICAgICB3cml0
ZShTaWRlU3RhdGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQXJyYXk6OkludDMyOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRl
ZihIZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0
aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5
OjpEb3VibGU6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAg
ICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAg
IHJlYWQoSW5kZXhlZERvdWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFw
TG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywg
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwg
TGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAg
ICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAg
cmVhZChJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3Bl
cnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7
CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICByZWFkKEluZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg
ICAgICAgIGNsb2JiZXJUb3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eTogeworICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJlYWQoSlNPYmpl
Y3RfYnV0dGVyZmx5KTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUo
KTsKICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewpAQCAtNzA1LDYgKzc2Nyw4IEBAIHZv
aWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9y
JiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNlIFRv
UHJvcGVydHlLZXk6CiAgICAgY2FzZSBJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAg
LTcxNiwxMiArNzgwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFJlc29s
dmVTY29wZUZvckhvaXN0aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6
CiAgICAgY2FzZSBUb09iamVjdDoKLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0
cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNl
IEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgIGNh
c2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICBjYXNlIFRvTnVtYmVyOgogICAgIGNhc2UgVG9OdW1l
cmljOgpAQCAtOTA2LDYgKzk2NSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAg
ICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0
PGludD4oaSkpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlz
IGlzIGZhciB0b28gY29uc2VydmF0aXZlIGZvciB0aGUgY2hpbGQxKCkudXNlS2luZCgpID09IElu
dDMyVXNlIGNhc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY2xv
YmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEdl
dEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZlYTkxZGYyMjRi
ZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1
M2MzN2UxOGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAt
MjA1LDcgKzIwNSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgogICAg
IGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hl
Y2tCYWRWYWx1ZToKQEAgLTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIEdldEJ5SWRX
aXRoVGhpczoKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CiAg
ICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhl
ZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAg
IGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6Ci0g
ICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJv
cGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSGFz
UHJpdmF0ZU5hbWU6CkBAIC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBUaHJvd1N0
YXRpY0Vycm9yOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNhc2UgR2V0
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJ
bmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1h
dGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3Jl
YXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToK
ICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAg
ICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5
NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li43ZjIxYWE0NGRiZGM2ODQ4YTViODU0ZTg3NDYwY2RmNTRl
Njc2MzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
QEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAg
ICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlv
bigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEw
NjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAgICAgICBub2Rl
LT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUo
KS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgIGNh
c2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9T
UiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE5hbWVkTW9kZS4KKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogV0Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlw
ZShBcnJheTo6R2VuZXJpYykpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KQEAgLTEwOTYsNyArMTExMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IC8vIHNvbWUgYWNjZXNzZXMgdGhhdCBoaXQgYSBob2xlIHdpbGwgbm93IG5lZWQgdG8gdGFrZSB0
aGUgZnVsbC1ibG93bgogICAgICAgICAgICAgICAgICAgICAvLyBvdXQtb2YtYm91bmRzIHNsb3cg
cGF0aC4gV2UgY2FuIGZpeCB0aGF0IHdpdGg6CiAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKLSAgICAgICAgICAgICAg
ICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJh
eTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFu
dGljLCBOZWdhdGl2ZUluZGV4KSkKQEAgLTExMTEsNyArMTEyNyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6SW5Cb3VuZHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3Bl
Y3VsYXRpb24gPSBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5v
ZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcikgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vzbid0
IGNhcmUKQEAgLTExMjEsNyArMTEzNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6T3V0T2ZCb3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNl
bWFudGljLCBOZWdhdGl2ZUluZGV4KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5l
Q2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMTc4LDcgKzExOTQsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAorCisgICAgICAgICAgICAvLyBGSVhNRTogV2UgY2FuJ3Qgc2V0IGEgbm9uLUpTVmFsdWUgcmVz
dWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgc2luY2Ugd2UgY291bGQgc3RpbGwgZG8gYSBOYW1l
ZE1vZGUgcHJvcGVydHkgYWNjZXNzLiBXZSBhbHNvIGRvbid0IGhhdmUgYSBnb29kIHdheSB0bwor
ICAgICAgICAgICAgLy8gcHJvdmUgdGhlcmUncyBubyBzdHJ1Y3R1cmUgcHJvcGVydGllcyBhdCB0
aGlzIHBvaW50LgorICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5
VmFsKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgc3dpdGNoIChhcnJheU1v
ZGUudHlwZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAg
ICAgICAgaWYgKCFhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpCkBAIC0yMjc1LDI4ICsyMjk1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+
KG5vZGUtPmNoaWxkMigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhF
ZGdlPFN0cmluZ1VzZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93
bkNlbGxVc2U+KG5vZGUtPmNoaWxkMygpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duU3RyaW5nVXNlPihub2RlLT5jaGls
ZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewor
ICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICAgICAgbm9kZS0+c2V0
QXJyYXlNb2RlKAogICAgICAgICAgICAgICAgIG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgKICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwKQEAgLTIzMTUsMzYgKzIzMTQsNjQgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsIEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAgICAgICBFZGdlJiBiYXNlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKLSAgICAgICAgICAgIEVkZ2UmIHByb3BlcnR5
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKTsKLSAgICAgICAgICAgIEVkZ2UmIGluZGV4
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKLSAgICAgICAgICAgIEVkZ2UmIGVudW1l
cmF0b3IgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgICAgICAgICAgZml4RWRn
ZTxDZWxsVXNlPihiYXNlKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihwcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihpbmRleCk7Ci0gICAgICAgICAg
ICBmaXhFZGdlPEtub3duQ2VsbFVzZT4oZW51bWVyYXRvcik7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7CiAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKICAgICAg
ICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBu
YW1lOiB7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkp
OwotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQyKCkpOworCisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAgICAgICAgICAg
IEVkZ2UmIGJhc2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOworICAgICAgICAgICAg
RWRnZSYgaW5kZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOworICAgICAgICAgICAg
RWRnZSYgc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpOworCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFk
YXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZSgKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9k
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkt
PnByZWRpY3Rpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMSktPnByZWRpY3Rpb24oKSkpOworCisgICAgICAgICAgICAgICAgZml4RWRnZTxD
ZWxsVXNlPihiYXNlKTsKKyAgICAgICAgICAgICAgICBibGVzc0FycmF5T3BlcmF0aW9uKGJhc2Us
IGluZGV4LCBzdG9yYWdlRWRnZSk7CisKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlN
b2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5i
ZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICAgICAgICAgIHNldFNhbmVD
aGFpbklmUG9zc2libGUobm9kZSwgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzID8gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluIDogQXJyYXk6Ok91dE9mQm91bmRzU2Fu
ZUNoYWluKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlICYmICFt
X2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUpKQorICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMy
VXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8
S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNwZWN1bGF0ZUNl
bGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVz
ZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBpbnN0cnVj
dGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBlU2V0Lgog
ICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNvbnRhaW5l
ZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IKQEAgLTM2
OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFycmF5TW9kZS5h
c1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAorICAgIHZvaWQg
c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3RkOjpv
cHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9uOworICAgICAg
ICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKSB7CisgICAg
ICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsgb24gYSBwZXIt
dHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEp
IFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJuIHVuZGVmaW5l
ZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNoYW5nZSB0byB0
aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAgICAgLy8gdGhp
bmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBhY3R1YWxseSBo
YWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9tIGEgaG9s
ZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2VseSB0aGUgYmVz
dCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQgb2YKKyAgICAg
ICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5vdyB3ZSBq
dXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5hTiBhcmUgaW5k
aXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiwgYW5kIGp1
c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0IGNhc2UuIFRo
aXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRvIGhhdmUgdG8g
ZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0byBVbmRlZmlu
ZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3YW50IHRvCisg
ICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMyLiBGSVhN
RTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAvLyBiYXNlZD8K
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGljYXRpb25z
LiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAgICAgICAgICAg
IC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBob2xlIGNo
ZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9s
ZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAgICAgIC8vIG91
dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgKKworICAg
ICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5z
cGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0
ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAgICAgICAg
ICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3Vv
dXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5h
dHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHJldHVybmVk
IGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0aWxsIGRv
CisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVpcmUgdGFr
aW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgp
ICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9n
cmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJv
dW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUuc3BlY3Vs
YXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFp
blNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAgICAgICAg
ICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJh
eU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNlciBkb2Vz
bid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAv
LyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFy
cmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzNjRC
aXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYg
IW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4
KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0
T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAgICAgICBzZXRT
YW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7CisgICAgfQor
CiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFycmF5OjpTcGVj
dWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2MzI1YzVk
NGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQxOTJkMTc1MmQ0
NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAt
Mzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3Qg
Y2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1B1dEJ5SWRT
dGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0YXR1cygp
KTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0
YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
IlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0JyYW5jaCgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRp
bWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQwZWY0MDMzMGMy
MzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4OTIyMTUxZTQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJSYW5nZU9w
dGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKKyAg
ICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1dGVOb2Rl
KE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgu
CiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0UmVsYXRpb25z
aGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUt
PmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAgICAgICAgICAg
c2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5u
b2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4NmQzOTNmZDg3
YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBkNmY0NjQ2
NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApAQCAtMTEx
LDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1czoKICAg
ICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2UgRmlsdGVyU2V0
UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToK
KyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBicmVhazsKIAor
ICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2FzZSBTdHJD
YXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2ZDBhNDM4ZTVl
ZDgxLi40NzA2NTZiZWY4NTg4NTk5NTExMjI2OGY5ZGE5MGJmYzBhMTEyYjI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgIkRlbGV0
ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRl
ICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRl
ICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAgICAgICBjYXNl
IEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2Ug
R2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlJ
ZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIEdl
dEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKICAgICAgICAg
Y2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAg
ICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAg
ICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAgIGJvb2wgaGFz
U3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAg
ICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0Ogor
ICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JH
ZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbEFsaWFz
OgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAg
ICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NF
eGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNz
T3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6
CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAg
ICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAg
IGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVkIHN0b3Jh
Z2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdlQ2hpbGQoKSk7
CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAg
ICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2lu
dEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRC
eVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0
OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgorICAgICAgICBj
YXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKKyAg
ICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0xvYWQ6Cisg
ICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToKKyAgICAg
ICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6CisgICAgICAgICAg
ICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAgIGNhc2UgQXJy
YXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBBcnJheVBvcDoK
KyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAyOworCisg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0dXJuIDI7CisK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAg
ICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3MgdG8gZGV0ZXJt
aW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiArMjI4MiwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxB
bGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6Cisg
ICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAgY2FzZSBT
dHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgpAQCAtMjIx
Niw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAgICBj
YXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgY2FzZSBBdG9t
aWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0Nv
bXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyMyBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJl
NTY1NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdl
bmVyYXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAg
ICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVy
ZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBt
YWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRv
SW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFw
IGFuZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3
ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLjViOTk5MGNjZjI3NTVlYjcxOGIxOTk4YmYyYzMxNDVkMTM1
MzNmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNl
KTsKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFt
ZSkpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxP
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAg
ICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1v
ZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1l
U3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9i
amVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpO
dW1iZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5k
ZXgpOworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBt
b2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3It
PnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVu
dW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFs
T2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZS
QU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7Cisg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVS
TihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVy
dHlOYW1lKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgRW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVW
YWx1ZSwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZt
ID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFS
RV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1
ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51
bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNP
YmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5n
ZXRPYmplY3QoKS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpT
U3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1
ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNj
b3BlLCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFs
KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNl
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwg
aW50MzJfdCBtb2RlTnVtYmVyKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAg
IEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1l
KTsKLSAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5z
dHJpbmcoKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisg
ICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFz
T3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9w
ZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHBy
b3BlcnR5TmFtZVZhbHVlKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50
b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2Us
IGlkZW50aWZpZXIpKSkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
TmV3UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIEpTQ2VsbCogcmVnZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFm
ZWRlNTk1ZDBmYjhmYTgzNWVmNzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQx
M2JmMTg4MGNlNzYzNGVlMzEzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5z
dGFuY2U7CiBjbGFzcyBKU0JpZ0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsK
K2NsYXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAg
LTEwNCwxMiArMTA1LDE0IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvdG90eXBlT2YsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3Qq
LCBKU0NlbGwqLCBpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0Kiwg
SlNDZWxsKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25I
YXNFbnVtZXJhYmxlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBF
bmNvZGVkSlNWYWx1ZSwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIEpTQ2VsbCosIEpTU3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25JblN0cnVjdHVyZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgSlNDZWxsKiwgSlNTdHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
RW5jb2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0
UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxs
KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBK
U0NlbGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVk
SlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQz
Ml90LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwg
dWludDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
RW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9i
YWxPYmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikp
OworCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0
SW5kZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwg
KEpTR2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xB
UkVfSklUX09QRVJBVElPTihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3Ry
dWN0dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3
ZTMwNmJhYjg1MzdjMGU4OWUyZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1
ZTM3NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsK
ICAgICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAg
ICAgICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hp
bGQyLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAg
ICAgCisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091
dE9mQm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRI
ZWFwUHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVk
aWN0aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51
bWVyYXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxl
SW50NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24o
U3BlY0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAg
ICAgICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNh
c2UgUmVnRXhwRXhlYzoKQEAgLTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEdldFByaXZhdGVOYW1lOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAg
ICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgog
ICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdEluZGV4OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9u
bHkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1l
cmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAg
ICAgICAgY2FzZSBJbkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBI
YXNQcml2YXRlTmFtZToKICAgICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNh
c2UgSGFzT3duUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0g
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZTogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7
CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAg
ICAgICAgICAgLy8gVGhpcyBjYW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJh
bmNoIG9mIHRoYXQgY2FzZSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50
IHRvIG1lc3Mgd2l0aAorICAgICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAg
IHNldFByZWRpY3Rpb24oU3BlY0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNTdHJpbmcpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQ
cm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZh
bHVlIHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3Ry
aW5nLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDog
ewogICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHBy
b2R1Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0
IHByb2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBj
OTYzN2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJi
ZWFiMDJhZDBjNTEzZGRiNDljYTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRl
OgogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAg
IGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91
bmRzQ2hlY2sobV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwg
MSksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewog
ICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MCksIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJk
MGI5YjQ2MGUyYzUwLi4xZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2
LDEwICsyOTYsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRl
LCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRv
TnVtYmVyOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5
OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVu
dW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5h
bWU6Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3Vt
ZW50QnlWYWxPdXRPZkJvdW5kczoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJv
b2wgaWdubwogICAgICAgICAvLyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBp
biBjb250cm9sIGZsb3cgaGVyZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoK
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxl
bmd0aDoKQEAgLTQ5Niw2ICs0OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAg
ICAgcmV0dXJuIGlzU2FmZTsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOgorICAgIC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0
cyBidXQgdGhleSdsbCBvbmx5IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUgc28gd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5k
ZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNl
IFRvVGhpczoKICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpA
QCAtNTk1LDYgKzU5Nyw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNh
c2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6
CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAg
ICBjYXNlIEhhc093blByb3BlcnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4
ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUs
IGJvb2wgaWdubwogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zm
c2V0OgogICAgIGNhc2UgTXVsdGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFi
bGVMZW5ndGg6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1
MThhNjA4NzEzNDJkNjQ0ZWQ5NzhiMWU1YjguLjE0ODcyMjJhYzUzMDZlMzk3ZWUyZDYzNGUzNjVm
NTZiYjdhMjBhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1Zh
bHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGpp
dCwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQp
Ci0gICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0
LCBzcGVjaWZpY1BheWxvYWQpCiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVS
ZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBS
ZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1f
cGF5bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNl
bmRpZgogewotICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1f
cGF5bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAg
bV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3Bh
eWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0Uo
SlNWQUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAg
LTI1OTUsNyArMjU4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29k
ZUF0KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJy
ZW50Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3Ry
aW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVn
cywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAw
KSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3Jh
cGguY2hpbGQobm9kZSwgMSkpOwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFs
aWRHUFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewot
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0
VGFnLmFkb3B0KHJlYWxSZXN1bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgfQotI2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6
IERhdGFGb3JtYXRDZWxsKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVy
IG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6
Om9mZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nLCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRh
Rm9ybWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7CiAjZW5kaWYKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9q
aXQuZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsy
NjUzLDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5v
ZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1
Y3R1cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBt
X2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFBy
b3RvdHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdl
bmVyYXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdz
KHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxP
YmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKLSAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5l
cmF0b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAg
ICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5n
SW50LAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwot
I2Vsc2UKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9w
ZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAg
IH0KICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChz
Y3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0g
ZWxzZQotICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9k
ZSk7CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2Rl
KE5vZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmxvYWRGcm9tSW50VHlwZWRBcnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5
UmVnCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9h
ZFJlc3VsdChOb2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBib29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBp
ZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBp
c1VJbnQzMiA9IGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChz
aG91bGRCb3gpIHsKKyAgICAgICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1w
b3JhcnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHJlc3VsdFJlZywgZnJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhh
bk9yRXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0
LmFkZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6
OnR3b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1
bHRSZWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlz
VUludDMyKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBl
KSA9PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3Vs
YXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBz
dHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9k
ZSwgR1BSUmVnIHJlc3VsdFJlZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwg
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlw
ZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJy
YXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAg
QVNTRVJUKGlzSW50KHR5cGUpKTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUs
IFR5cGVkQXJyYXlUeXBlIHQKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAg
ICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7
CisgICAgYm9vbCBzaG91bGRCb3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1p
dFR5cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAg
bG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcs
IHR5cGUpOworICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNh
blNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwg
cmVzdWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2Fk
UmVzdWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
IH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgK
QEAgLTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZh
bEZvckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1
bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxv
YXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBU
eXBlZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwog
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJl
c3VsdC5mcHIoKTsKICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcs
IHByb3BlcnR5UmVnKTsKQEAgLTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5
VHlwZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAK
LSAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERh
dGFGb3JtYXRKUykgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwg
R1BSUmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcw
Myw3ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxv
YXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0
aFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmlu
ZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJS
ZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOwor
ICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0
SlMpOworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCks
IGFyZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9i
amVjdFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFH
UFIsIGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNv
bnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OwpAQCAtMzczMSwxMiArMzczMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIg
PSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKIApAQCAtODAzOCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQz
MlJlc3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3Qg
U2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3Jt
YXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNl
LmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgw
ODIsMjQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1
bWVudHMoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNW
YWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZp
eCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgLy8gVE9ETzogQXJlIGJvdGggb2YgdGhlc2UgbmVj
ZXNzYXJ5Pz8KICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0g
c2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsK
ICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKKworICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25v
cmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cigKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKQEAgLTEzNDQyLDQ0
ICsxMzQ0NywzMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRocm93U3RhdGljRXJy
b3IoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKiBu
b2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGVudW1lcmF0
b3IpOworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwor
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgbW9kZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworCisg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIG1vZGVHUFIgPSBt
b2RlLmdwcigpOwogICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsK
KworICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgUmV1c2UsIGlu
ZGV4KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSksIFRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBpbmNyZW1lbnRMb29wOworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBkb25lOworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geworCisgICAgICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoLmdwcigpKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGluaXRNb2RlID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBt
b2RlR1BSKTsKKworICAgICAgICAgICAgaW5jcmVtZW50TG9vcCA9IG1faml0LmxhYmVsKCk7Cisg
ICAgICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2guZ3ByKCkpOwor
CisgICAgICAgICAgICBpbml0TW9kZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBkb25lID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaC5ncHIo
KSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihzY3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Cisg
ICAgICAgIH0pKTsKKyAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkubGlua1RvKGluY3JlbWVudExvb3AsICZtX2pp
dCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkg
PDwgMzIpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0Lm9yNjQoc2Ny
YXRjaC5ncHIoKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChu
b2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5h
bWVkTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwor
CisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGVudW1lcmF0b3IuCisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgp
LCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKSk7CisKKyAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAg
ICAgbV9qaXQuYWRkMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgICAgICBtX2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpO
dW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpOYW1lZE1vZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworI2Vsc2UKKyAg
ICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBi
YXNlUmVncyA9IGJhc2UucmVncygpOworCisgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBKU1Zh
bHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJhdG9yR1BS
KTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleChOb2RlKiBub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIHVwZGF0
ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1ZhbHVlUmVncyBwYWlyUmVncyA9
IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHBheWxvYWRHUFIgPSBwYWly
UmVncy5wYXlsb2FkR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAKLSAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgIG1faml0LmFuZDMy
KFRydXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXls
b2FkR1BSLCByZXN1bHRHUFIpOworCiAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9w
ZXJ0eShOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKIHsKLSAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBh
aXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGFpckdQUiA9IGlzNjRCaXQoKSA/IHBhaXJS
ZWdzLnBheWxvYWRHUFIoKSA6IHBhaXJSZWdzLnRhZ0dQUigpOwogCi0gICAgSlNWYWx1ZVJlZ3Mg
YmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgR1BSUmVnIHByb3BlcnR5R1BSID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBt
X2ppdC5yc2hpZnQ2NChwYWlyR1BSLCBUcnVzdGVkSW1tMzIoMzIpLCByZXN1bHRHUFIpOworI2Vs
c2UKKyAgICBtX2ppdC5tb3ZlKHBhaXJHUFIsIHJlc3VsdEdQUik7CisjZW5kaWYKKyAgICBtX2pp
dC5hbmQzMihUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbnVtZXJhdGlv
bk1vZGVNYXNrKSwgcmVzdWx0R1BSKTsKKworICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZShOb2RlKiBub2RlKQoreworICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBpbmRleE9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvck9wZXJhbmQodGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworCisgICAgR1BSUmVnIGluZGV4ID0gaW5kZXhPcGVyYW5kLmdwcigpOworICAg
IEdQUlJlZyBtb2RlID0gbW9kZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIGVudW1lcmF0b3Ig
PSBlbnVtZXJhdG9yT3BlcmFuZC5ncHIoKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7CiAgICAg
SlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVncywgcHJvcGVydHlHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcik7CiAgICAgbV9qaXQu
ZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgbm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9k
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSog
bm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
ICAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1Y3R1cmVTbG93UGF0aDsKKworICAgICAg
ICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQpIHsKKyAgICAgICAg
ICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOworICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdl
RWRnZSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLmVtcGxhY2UodGhpcywgc3RvcmFnZUVkZ2Up
OworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7Cisg
ICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgNSkpOworCisgICAgICAgICAgICBHUFJSZWcgbW9kZUdQUiA9IG1v
ZGUuZ3ByKCk7CisgICAgICAgICAgICBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICAg
ICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgICAgIHJlc3Vs
dCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgcmVzdWx0UmVncyA9
IHJlc3VsdC5yZWdzKCk7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpOworCisgICAgICAgICAgICBib29sIGhhdmVTdG9yYWdlID0gISFzdG9y
YWdlRWRnZTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdG9yYWdlVGVtcG9yYXJ5OworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdl
KSB7CisgICAgICAgICAgICAgICAgc3RvcmFnZVRlbXBvcmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlz
LCBSZXVzZSwgZW51bWVyYXRvcik7CisgICAgICAgICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3Jh
Z2VUZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IG5vdEZhc3ROYW1lZENhc2VzOworCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkbid0IGdlbmVyYXRlIHRoaXMgY29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGFuIG9i
amVjdC4KKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIGJhc2UgaXMgYSBjZWxsIGhlcmUgc2luY2Ug
d2Ugd29uJ3QgZ2VuZXJhdGUgTmFtZWRNb2RlIHByb3BlcnRpZXMgZm9yIG5vbi1vYmplY3RzLgor
ICAgICAgICAgICAgICAgIC8vIFRPRE86IHB1dCBBc3NlcnQgaGVyZT8KKworICAgICAgICAgICAg
ICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYg
d2Uga25vdyB0aGVyZSdzIG9ubHkgb25lIHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBl
bWJlZCBpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2Ny
YXRjaEdQUik7CisKKyAgICAgICAgICAgICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaEdQUiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpOworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1heWJlIHdlIHNo
b3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byByZXByZXNlbnQgSW5kZXhlZCtOYW1lZD8KKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS5ub2RlKCkgPT0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAzKS5ub2RlKCkpCisgICAgICAgICAgICAgICAgICAgIGJh
ZFN0cnVjdHVyZVNsb3dQYXRoID0gYmFkU3RydWN0dXJlOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgbm90RmFzdE5hbWVkQ2FzZXMuYXBwZW5kKGJhZFN0cnVjdHVy
ZSk7CisKKyAgICAgICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKKyAgICAgICAgICAg
ICAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5s
aW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworCisgICAgICAgICAgICAg
ICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYmFzZUNlbGxHUFIs
IGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9m
SW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0UmVncyk7CisKKyAgICAgICAgICAgICAgICBkb25lQ2Fz
ZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgICAgICAvLyBPdGhlcndpc2Ug
aXQncyBvdXQgb2YgbGluZQorICAgICAgICAgICAgICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKCZt
X2ppdCk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaEdQUik7
CisgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0
eU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQubmVnMzIoc2Ny
YXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuc2lnbkV4dGVuZDMyVG9QdHIoc2NyYXRj
aEdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlQ2VsbEdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgc3RvcmFnZUdQUik7Cisg
ICAgICAgICAgICAgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlR1BSLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgfSkpOworCisgICAgICAgIC8vIFdlIHJlbHkgb24gY29tcGlsZUdldEJ5VmFsIHRv
IGNhbGwganNWYWx1ZVJlc3VsdCBmb3IgdXMuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIGtp
bmRhIGhhY2t5Li4uCisgICAgICAgIEFTU0VSVChnZW5lcmF0aW9uSW5mbyhub2RlKS5qc1ZhbHVl
UmVncygpID09IHJlc3VsdFJlZ3MgJiYgZ2VuZXJhdGlvbkluZm8obm9kZSkucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0SlMpOworCisgICAgICAgIGlmIChiYWRTdHJ1Y3R1cmVTbG93UGF0
aC5pc1NldCgpKQorICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxs
KGJhZFN0cnVjdHVyZVNsb3dQYXRoLCB0aGlzLCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5h
bWVBbmRHZXRCeVZhbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VDZWxsR1BSLCBpbmRleEdQUiwgZW51bWVyYXRvckdQUikpOworCisgICAgICAgIGRvbmVDYXNl
cy5saW5rKCZtX2ppdCk7CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2lu
ZCgpKSkgeworICAgICAgICAvLyBVc2UgbWFudWFsIG9wZXJhbmQgc3BlY3VsYXRpb24gc2luY2Ug
Rml4dXAgbWF5IGhhdmUgcGlja2VkIGEgVXNlS2luZCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gQ2Vs
bFVzZS4KKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIGJhc2VFZGdlKTsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZU9wZXJhbmQodGhpcywgYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRn
ZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2VPcGVyYW5kLmdwcigpKTsKKyAgICB9Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShOb2RlKiBub2RlLCBTbG93UGF0aEZ1bmN0
aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9uKQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7
CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIp
IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMykpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOwogCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAg
ICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJp
bmcsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKLSAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlOYW1lUmVncyA9IHByb3BlcnR5TmFtZS5y
ZWdzKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBH
UFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BS
ID0gZW51bWVyYXRvci5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygp
OworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsKKwor
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlKS5tX3R5cGUgJiB+U3BlY0NlbGwp
CisgICAgICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxs
KGJhc2UpKTsKKworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRoaXMg
Y29kZSBpZiB3ZSBrbm93IGJhc2UgaXMgbm90IGEgY2VsbC4KKyAgICAgICAgb3BlcmF0aW9uQ2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQ
UiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSkpOwor
CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICBvcGVyYXRpb25DYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRT
dHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOworCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsoJm1faml0KTsKKworICAgICAg
ICBmbHVzaFJlZ2lzdGVycygpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigp
KTsKKyAgICAgICAgYXV0byBiYXNlUmVncyA9IEpTVmFsdWVSZWdzKGJhc2VDZWxsR1BSLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyNlbHNlCisgICAgICAgIGF1dG8gYmFzZVJlZ3MgPSBiYXNlOwor
I2VuZGlmCisgICAgICAgIGNhbGxPcGVyYXRpb24oc2xvd1BhdGhGdW5jdGlvbiwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eU5hbWVSZWdz
LCBpbmRleEdQUiwgbW9kZUdQUik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisKKyAgICAgICAgYmxlc3NlZEJvb2xlYW5SZXN1
bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOworICAgIH07CisKKyAgICBpZiAoaXND
ZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UuZ3ByKCksIGJhc2Uu
Z3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
YmFzZUVkZ2UpOworICAgICAgICBnZW5lcmF0ZShiYXNlLnJlZ3MoKSwgYmFzZS5yZWdzKCkucGF5
bG9hZEdQUigpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9ySW5CeVZhbChOb2RlKiBub2RlKQoreworICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJv
cGVydHkobm9kZSwgb3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqIG5vZGUpCit7
CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJh
dG9ySGFzT3duUHJvcGVydHkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlJZEZsdXNoKE5vZGUqIG5vZGUpCkBAIC0xMzYyMiw2NyArMTM5MDEsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlTWF0Y2hTdHJ1Y3R1cmUoTm9kZSogbm9kZSkKICAgICBibGVzc2Vk
Qm9vbGVhblJlc3VsdCh0ZW1wR1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKiBub2RlKQotewotICAg
IEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKLSAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQot
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdTdHJ1Y3R1cmU7Ci0KLSAgICB3cm9uZ1N0
cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VSZWdzKSk7Ci0KLSAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZ3MucGF5bG9hZEdQUigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksCi0gICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIG1vdmVUcnVlVG8o
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xv
d1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJv
cGVydHksIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVncywg
cHJvcGVydHlHUFIpKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSwgbm9kZSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoTm9kZSog
bm9kZSwgRnVuY3Rpb24gc2xvd1BhdGgpCi17Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1l
cmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJS
ZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIENDYWxsSGVscGVyczo6SnVtcExpc3Qgd3JvbmdT
dHJ1Y3R1cmU7Ci0KLSAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCkpOwotICAgIHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsCi0gICAgICAgIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLAotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yLmdwcigpLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICBtb3ZlVHJ1
ZVRvKHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLQotICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KHNsb3dQYXRoQ2FsbCh3cm9uZ1N0cnVjdHVyZSwgdGhpcywgc2xvd1BhdGgsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUikpOwotICAg
IGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKLX0K
LQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KE5v
ZGUqIG5vZGUpCi17Ci0gICAgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2Rl
LCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7Ci19Ci0KLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgY29t
cGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChub2RlLCBvcGVyYXRpb25JblN0cnVjdHVy
ZVByb3BlcnR5KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5
RW51bWVyYXRvcihOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSkgewpAQCAtMTM3MDksMzkgKzEzOTI3LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKiBub2RlKQogICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEVudW1lcmF0b3JQbmFtZShOb2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSB8fCBub2RlLT5vcCgpID09IEdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3Io
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBp
bmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhp
cyk7Ci0gICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVn
IGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGluQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBpbmRleEdQUiwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgKG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lKQotICAgICAg
ICAgICAgPyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXhPZmZzZXQoKQotICAgICAgICAgICAgOiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1faml0Lm1vdmVWYWx1ZShqc051
bGwoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwotICAgIGluQm91bmRzLmxpbmsoJm1faml0KTsKLQotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc2NyYXRjaEdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIo
KSk7Ci0jZW5kaWYKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0UmVncywgbm9kZSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRF
eGVjdXRhYmxlKE5vZGUqIG5vZGUpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rp
b24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTQ5MzQsMjggKzE1MTE5LDI4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZU5ld0FycmF5V2l0aFNpemUoSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjCiAgICAgICAgIHNpemVHUFIsIHN0b3JhZ2VHUFIpKTsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2Rl
LCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9u
X0dDWiBzbG93UGF0aE9wZXJhdGlvbiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BS
UmVnLCBHUFJSZWc+KCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyBpbmRleEdQUiA9IEludmFs
aWRHUFJSZWc7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IEludmFsaWRHUFJSZWc7CiAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIEFycmF5TW9kZSBtb2RlID0g
bm9kZS0+YXJyYXlNb2RlKCk7CiAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgIGNhc2Ug
QXJyYXk6OkludDMyOgogICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgQVNT
RVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVy
YW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAg
IEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5k
ZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBHUFJU
ZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsK
IAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOworCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VHUFIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwog
CiAgICAgICAgIGlmIChtb2RlLmlzSW5Cb3VuZHMoKSkKQEAgLTE0OTgzLDEyICsxNTE2OCwxNCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5v
ZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2Fz
ZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIG5vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIG5vZGUtPnN0b3Jh
Z2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAg
ICAgICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gc2NyYXRjaC5mcHIoKTsKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BS
LCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
b3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5k
cygpKQpAQCAtMTUwMTIsMTMgKzE1MTk5LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAg
ICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFn
ZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKIAogICAgICAgICBHUFJSZWcgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKIAorICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZp
eCgpOworCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKTsKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgb3V0T2ZC
b3VuZHMpOwpAQCAtMTUwNDcsNzMgKzE1MjM2LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNs
CiAgICAgZGVmYXVsdDogewogICAgICAgICAvLyBGSVhNRTogT3B0aW1pemUgVHlwZWRBcnJheXMg
aW4gSGFzSW5kZXhlZFByb3BlcnR5IElDCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExODMKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJl
c3VsdEdQUikgPSBwcmVmaXgoKTsKICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5qdW1w
KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQogCiAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgc2xvd1BhdGhPcGVyYXRpb24sIHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIGluZGV4R1BSKSk7
Ci0KLSAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci19Ci0KLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXREaXJlY3RQbmFtZShOb2RlKiBub2RlKQotewot
ICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAwKTsK
LSAgICBFZGdlJiBwcm9wZXJ0eUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUs
IDEpOwotICAgIEVkZ2UmIGluZGV4RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMik7Ci0KLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsK
LSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBwcm9wZXJ0eUVkZ2UpOwot
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIg
PSBwcm9wZXJ0eS5ncHIoKTsKLQotICAgIEVkZ2UmIGVudW1lcmF0b3JFZGdlID0gbV9qaXQuZ3Jh
cGgoKS52YXJBcmdDaGlsZChub2RlLCAzKTsKLSAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgaW5kZXgodGhpcywgaW5kZXhFZGdlKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVt
ZXJhdG9yKHRoaXMsIGVudW1lcmF0b3JFZGdlKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBHUFJS
ZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVu
dW1lcmF0b3IuZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVy
ZQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICBzbG93UGF0aC5hcHBl
bmQoCi0gICAgICAgIG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLAotICAgICAgICAgICAgc2NyYXRjaEdQUiwKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKAotICAgICAgICAgICAgICAgIGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8v
IENvbXB1dGUgdGhlIG9mZnNldAotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51
bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nl
c3MKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAotICAgICAgICBpbmRleEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0KLSAgICBtX2ppdC5sb2FkVmFs
dWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJl
c3VsdFJlZ3MpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAo
KTsKLQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNj
ZXNzLmxpbmsoJm1faml0KTsKLSAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKLSAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKLSAgICBt
X2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNo
R1BSKTsKLSAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKLSAgICBtX2ppdC5zaWduRXh0ZW5k
MzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIG1faml0Lmxv
YWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
LCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFBy
b3BlcnR5KSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsoJm1faml0KTsKLQotICAgIGFk
ZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChzbG93UGF0aCwgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxDZWxsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZUdQUiwgQ0NhbGxIZWxwZXJzOjpDZWxsVmFsdWUocHJvcGVydHlHUFIpKSk7Ci0KLSAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAppbmRleCA5OGM3NjE2YjhmZDJmYmY1YzRkZDhh
NTc3MTUwOGFkMjY3OWY5OWQxLi5kMTIwYjdiNGZiODQ0MzY5ZDcyY2Q2MDE4MWJjMDhjMGI2Yzkx
N2FjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CkBAIC00Nyw2ICs0Nyw3IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNs
YXNzIEdQUlRlbXBvcmFyeTsKK2NsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OwogY2xhc3MgSlNW
YWx1ZU9wZXJhbmQ7CiBjbGFzcyBTbG93UGF0aEdlbmVyYXRvcjsKIGNsYXNzIFNwZWN1bGF0aXZl
SklUOwpAQCAtMjQ2LDYgKzI0Nyw4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgR1BSUmVnIGFsbG9j
YXRlKEdQUlJlZyBzcGVjaWZpYykKICAgICB7CisgICAgICAgIGlmIChzcGVjaWZpYyA9PSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICAgICAgYWxsb2NhdGUoKTsKICNpZiBFTkFCTEUoREZHX1JFR0lT
VEVSX0FMTE9DQVRJT05fVkFMSURBVElPTikKICAgICAgICAgbV9qaXQuYWRkUmVnaXN0ZXJBbGxv
Y2F0aW9uQXRPZmZzZXQobV9qaXQuZGVidWdPZmZzZXQoKSk7CiAjZW5kaWYKQEAgLTEzNDUsMTIg
KzEzNDgsMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdGVtcG9yYXJ5UmVnaXN0ZXJGb3JQ
dXRCeVZhbCh0ZW1wb3JhcnksIG5vZGUtPmFycmF5TW9kZSgpKTsKICAgICB9CiAgICAgCisgICAg
Ly8gV2UgdXNlIGEgc2NvcGVkTGFtYmRhIHRvIHBsYWNhdGUgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2
YWxpZGF0aW9uLgorICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKE5vZGUqLCBjb25zdCBTY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKwogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQo
Tm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSopOworICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6
OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1h
dCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZUZyb21DaGFyQ29kZShOb2RlKik7IAogCi0g
ICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKik7Ci0gICAgdm9p
ZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CisgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9y
bWF0KT4mIHByZWZpeCk7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFG
b3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAKICAgICB2b2lk
IGNvbXBpbGVHZXRQcml2YXRlTmFtZShOb2RlKik7CiAgICAgdm9pZCBjb21waWxlR2V0UHJpdmF0
ZU5hbWVCeUlkKE5vZGUqKTsKQEAgLTE0MjQsMTIgKzE0MzAsMTIgQEAgcHVibGljOgogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGp1bXBGb3JUeXBlZEFycmF5SXNEZXRhY2hlZElmT3V0T2ZCb3VuZHMo
Tm9kZSosIEdQUlJlZyBiYXNlR1BSLCBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyk7CiAg
ICAgdm9pZCBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKE5vZGUqLCBHUFJSZWcgYmFzZUdQUiwg
R1BSUmVnIGluZGV4R1BSKTsKICAgICB2b2lkIGNvbXBpbGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNl
dChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSos
IFR5cGVkQXJyYXlUeXBlKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpT
VmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVm
aXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheShHUFJSZWcgYmFz
ZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29t
cGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKKyAg
ICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5
VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21w
aWxlUHV0QnlWYWxGb3JGbG9hdFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0
eSwgTm9kZSosIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTdHJpbmcoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN5bWJvbChOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3RyaW5nKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSosIGNvbnN0IFNjb3Bl
ZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHBy
ZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2Vs
bFdpdGhTdHJpbmcoTm9kZSosIEVkZ2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGls
ZDMpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2woTm9kZSosIEVk
Z2UmIGNoaWxkMSwgRWRnZSYgY2hpbGQyLCBFZGdlJiBjaGlsZDMpOwogICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsV2l0aFRoaXMoTm9kZSopOwpAQCAtMTQ1OCw3ICsxNDY0LDcgQEAgcHVibGljOgog
I2VuZGlmCiAgICAgICAgIEVkZ2UgdmFsdWVVc2UpOwogICAgIHZvaWQgbG9hZEZyb21JbnRUeXBl
ZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcsIEdQUlJlZyByZXN1
bHRSZWcsIFR5cGVkQXJyYXlUeXBlKTsKLSAgICB2b2lkIHNldEludFR5cGVkQXJyYXlMb2FkUmVz
dWx0KE5vZGUqLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSwgYm9vbCBjYW5TcGVj
dWxhdGUpOworICAgIHZvaWQgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSwgYm9v
bCBzaG91bGRCb3gpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDbGFzc1R5cGU+IHZvaWQgY29t
cGlsZU5ld0Z1bmN0aW9uQ29tbW9uKEdQUlJlZywgUmVnaXN0ZXJlZFN0cnVjdHVyZSwgR1BSUmVn
LCBHUFJSZWcsIEdQUlJlZywgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0Jiwgc2l6ZV90LCBGdW5j
dGlvbkV4ZWN1dGFibGUqKTsKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbihOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlU2V0RnVuY3Rpb25OYW1lKE5vZGUqKTsKQEAgLTE1MjQsMjEgKzE1MzAs
MjIgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVRvTG93ZXJDYXNlKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVUaHJvdyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlVGhyb3dTdGF0aWNFcnJv
cihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChOb2RlKik7Ci0g
ICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqKTsKLSAg
ICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZVRvSW5kZXhTdHJpbmcoTm9kZSopOworCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5v
ZGUqKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoTm9kZSosIFNsb3dQYXRoRnVuY3Rpb25U
eXBlKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChOb2RlKik7CisgICAgdm9p
ZCBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KE5vZGUqKTsKKwogICAgIHZvaWQgY29t
cGlsZVB1dEJ5SWRGbHVzaChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZChOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlUHV0QnlJZERpcmVjdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxl
UHV0QnlJZFdpdGhUaGlzKE5vZGUqKTsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rpb24+
Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKE5vZGUqLCBGdW5j
dGlvbik7Ci0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwot
ICAgIHZvaWQgY29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29t
cGlsZUdldERpcmVjdFBuYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVu
dW1lcmF0b3IoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlR2V0RXhlY3V0YWJsZShOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlR2V0R2V0dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRTZXR0ZXIoTm9kZSopOwpA
QCAtMTU2OCw3ICsxNTc1LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUNhbGxOdW1iZXJD
b25zdHJ1Y3RvcihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlTG9nU2hhZG93Q2hpY2tlblByb2xv
Z3VlKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuVGFpbChOb2RlKik7
Ci0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlv
bl9HQ1opOworICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiwgU19KSVRP
cGVyYXRpb25fR0NaLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJl
Zz4oKT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRXh0cmFjdENhdGNoTG9jYWwoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZUNsZWFyQ2F0Y2hMb2NhbHMoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZVByb2ZpbGVUeXBlKE5vZGUqKTsKQEAgLTE5MjYsNiArMTkzMyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGVkZ2UoKS5ub2RlKCk7CiAgICAgfQogCisgICAgSlNWYWx1ZVJlZ3MgcmVn
cygpIHsgcmV0dXJuIGpzVmFsdWVSZWdzKCk7IH0KKwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
R1BSUmVnIGdwcigpCiAgICAgewpAQCAtMTk2NSw3ICsxOTc0LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gSlNWYWx1ZVJlZ3ModGFnR1BSKCksIHBheWxvYWRHUFIoKSk7CiAgICAgfQogCi0g
ICAgR1BSUmVnIGdwcihXaGljaFZhbHVlV29yZCB3aGljaCkKKyAgICBHUFJSZWcgZ3ByKFdoaWNo
VmFsdWVXb3JkIHdoaWNoID0gUGF5bG9hZFdvcmQpCiAgICAgewogICAgICAgICByZXR1cm4ganNW
YWx1ZVJlZ3MoKS5ncHIod2hpY2gpOwogICAgIH0KQEAgLTIwMDMsMjEgKzIwMTIsMjAgQEAgcHJp
dmF0ZToKIGNsYXNzIFN0b3JhZ2VPcGVyYW5kIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKKyAgICBTdG9yYWdlT3BlcmFuZCgpID0gZGVmYXVsdDsKKwogICAgIGV4cGxp
Y2l0IFN0b3JhZ2VPcGVyYW5kKFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKICAgICAg
ICAgOiBtX2ppdChqaXQpCiAgICAgICAgICwgbV9lZGdlKGVkZ2UpCiAgICAgICAgICwgbV9ncHJP
ckludmFsaWQoSW52YWxpZEdQUlJlZykKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ppdCk7Ci0g
ICAgICAgIEFTU0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2lu
ZCgpID09IEtub3duQ2VsbFVzZSk7Ci0gICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkp
Ci0gICAgICAgICAgICBncHIoKTsKKyAgICAgICAgZW1wbGFjZShqaXQsIGVkZ2UpOwogICAgIH0K
ICAgICAKICAgICB+U3RvcmFnZU9wZXJhbmQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3By
T3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcpOwotICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3By
T3JJbnZhbGlkKTsKKyAgICAgICAgaWYgKG1fZ3ByT3JJbnZhbGlkICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgICAgICBtX2ppdC0+dW5sb2NrKG1fZ3ByT3JJbnZhbGlkKTsKICAgICB9CiAgICAg
CiAgICAgRWRnZSBlZGdlKCkgY29uc3QKQEAgLTIwMzYsNiArMjA0NCwxNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBtX2dwck9ySW52YWxpZCA9IG1faml0LT5maWxsU3RvcmFnZShlZGdlKCkpOwog
ICAgICAgICByZXR1cm4gbV9ncHJPckludmFsaWQ7CiAgICAgfQorCisgICAgdm9pZCBlbXBsYWNl
KFNwZWN1bGF0aXZlSklUKiBqaXQsIEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIG1faml0ID0g
aml0OworICAgICAgICBtX2VkZ2UgPSBlZGdlOworICAgICAgICBBU1NFUlQobV9ncHJPckludmFs
aWQgPT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIEFTU0VSVChtX2ppdCk7CisgICAgICAgIEFT
U0VSVChlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlIHx8IGVkZ2UudXNlS2luZCgpID09IEtu
b3duQ2VsbFVzZSk7CisgICAgICAgIGlmIChqaXQtPmlzRmlsbGVkKG5vZGUoKSkpCisgICAgICAg
ICAgICBncHIoKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCB1c2UoKQogICAgIHsKQEAgLTIwNDMs
OSArMjA2Miw5IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRlOgotICAgIFNwZWN1bGF0
aXZlSklUKiBtX2ppdDsKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQgeyBudWxscHRyIH07CiAg
ICAgRWRnZSBtX2VkZ2U7Ci0gICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOworICAgIEdQUlJlZyBt
X2dwck9ySW52YWxpZCB7IEludmFsaWRHUFJSZWcgfTsKIH07CiAKIApAQCAtMjEzNCwxMSArMjE1
MywxOSBAQCBjbGFzcyBKU1ZhbHVlUmVnc1RlbXBvcmFyeSB7CiBwdWJsaWM6CiAgICAgSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJ
VCopOworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNw
ZWNpZmljUGF5bG9hZCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICBKU1ZhbHVlUmVnc1Rl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIEdQUlJlZyBzcGVjaWZpY1BheWxvYWQsIEdQUlJlZyBz
cGVjaWZpY1RhZyk7CisjZW5kaWYKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdo
aWNoVmFsdWVXb3JkIHJlc3VsdFJlZ1dvcmQgPSBQYXlsb2FkV29yZCk7CiAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgSlNWYWx1ZU9wZXJhbmQmKTsK
ICAgICB+SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoKTsKICAgICAKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgeyByZXR1cm4gISFyZWdzKCk7IH0KKworICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
JiBvcGVyYXRvcj0oSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmJikgPSBkZWZhdWx0OworCiAgICAgSlNW
YWx1ZVJlZ3MgcmVncygpOwogCiBwcml2YXRlOgpAQCAtMjE1MCw2ICsyMTc3LDI2IEBAIHByaXZh
dGU6CiAjZW5kaWYKIH07CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2
ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCisgICAgOiBt
X2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQoreworfQorI2Vsc2UKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRp
dmVKSVQqIGppdCwgUmV1c2VUYWcsIFQmIG9wZXJhbmQsIFdoaWNoVmFsdWVXb3JkIHJlc3VsdFdv
cmQpCit7CisgICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQpIHsKKyAgICAgICAgbV9w
YXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgICAgICBt
X3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGF5
bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQpOworICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBv
cmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKKyAgICB9Cit9CisjZW5kaWYKKwogY2xhc3MgRlBS
VGVtcG9yYXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CmluZGV4IDlkNDAzNjk2MTBkODllNDFlNTE2ZjZjNGE0MjVlNWZkNzEwMmExYmUuLmFiYzhkMThh
YTM5NzY0YTJmOWMwYzA3NDFjZmQxZTlhNThkZGM0MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMTgxMiw2ICsx
ODEyLDMzNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ29udGlndW91c1B1dEJ5VmFs
KE5vZGUqIG5vZGUsIEJhc2VPcGVyYW5kVHlwZSYgYmFzZQogICAgIG5vUmVzdWx0KG5vZGUsIFVz
ZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7ICAgIAogfQogCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVw
bGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4m
IHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAg
IGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAgY2FzZSBBcnJheTo6Rm9y
Y2VFeGl0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2lmIENPTVBJ
TEVSX1FVSVJLKENPTlNJREVSU19VTlJFQUNIQUJMRV9DT0RFKQorICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVSZWdzKCksIDAp
OworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogewor
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0
aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwK
KyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5k
ZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRC
eVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhu
b2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51
c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRC
eVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOyAvLyBTYXZlIGEgcmVnaXN0ZXIsIHNwZWN1bGF0ZSBjZWxsLiBXZSdsbCBwcm9iYWJs
eSBiZSByaWdodC4KKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcHJvcGVydHlSZWdzID0gcHJv
cGVydHkuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZp
eChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eVJlZ3MpOworICAgICAg
ICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworCisgICAgICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1Zh
bHVlUmVncygpOworICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5q
c1ZhbHVlUmVncygpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAg
IHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMp
OworCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRp
YzsKKyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRl
QW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBt
X3N0cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRo
aXMtPnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBK
SVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCisgICAgICAgICAgICBtX2ppdC5jb2RlQmxvY2soKSwg
SklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6R2V0QnlW
YWwsIHVzZWRSZWdpc3RlcnMsCisgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCBy
ZXN1bHRSZWdzLCBJbnZhbGlkR1BSUmVnKTsKKworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKKyAgICAg
ICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlz
VHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQorICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVlOworCisgICAgICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5z
bG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJh
dG9yPiBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJhc2VSZWdzLCBwcm9wZXJ0
eVJlZ3MpOworCisgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkp
OworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7CisKKyAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCks
IDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZv
cm1hdEludDMyKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzU2FuZUNoYWluKCkpOworCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKKyAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsCisg
ICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAorICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCks
CisgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1
ZVRhZykpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxv
YWRPZmZzZXQpLAorICAgICAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisgICAgICAgICAgICAgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BS
KCksIG5vZGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBtX2pp
dC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MudGFn
R1BSKCkpOworICAgICAgICAgICAgbV9qaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisg
ICAgICAgICAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJl
c3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAg
ICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAg
ICAgICAgICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omln
bm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRSZWdzKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVt
cHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRv
cigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMs
IHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3Vs
dFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZv
cm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgo
RGF0YUZvcm1hdERvdWJsZSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZC
b3VuZHMsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgICAg
IG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZnByKCkpOwor
ICAgICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOworICAgICAgICAgICAg
aWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpIHsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUo
cmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUgJiYgIXJlc3VsdFJlZ3MpOworICAg
ICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VS
ZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAg
ICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBG
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZw
cigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgIGJveERvdWJsZSh0ZW1wUmVn
LCByZXN1bHRSZWdzKTsKKworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworCisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAg
ICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7
CisKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZFbXB0eShy
ZXN1bHRSZWdzLnRhZ0dQUigpKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7
CisKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVm
aXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5k
cyA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1
bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0
LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChob2xlKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAgICAg
ICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwKKyAgICAgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJl
ZykpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RB
cmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6
U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OiB7CisgICAgICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgp
OworICAgICAgICBpZiAoaXNJbnQodHlwZSkpCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSwgcHJlZml4
KTsKKyAgICB9IH0KK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogewogICAgIE5vZGVUeXBlIG9wID0gbm9kZS0+b3AoKTsKQEAgLTIyMzMsNyArMjU2MiwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAKICAgICBjYXNlIFN0
cmluZ0NoYXJBdDogewogICAgICAgICAvLyBSZWxpZXMgb24gU3RyaW5nQ2hhckF0IG5vZGUgaGF2
aW5nIHNhbWUgYmFzaWMgbGF5b3V0IGFzIEdldEJ5VmFsCi0gICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uU3RyaW5nKG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQ7Cisg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1
cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+
KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJl
ZEZvcm1hdCAmIERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3Bh
aXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAKQEAgLTIyNjUsMzI2ICsyNTk5LDI3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7
Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZv
cmNlRXhpdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jaWYg
Q09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCi0gICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihJbmFkZXF1YXRlQ292ZXJhZ2UsIEpTVmFsdWVS
ZWdzKCksIDApOwotI2VuZGlmCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJh
eTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMsIFJldXNlLCBpbmRleCk7Ci0gICAgICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLQotICAgICAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0g
cmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSBy
ZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2RlLAotICAgICAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMCkpKTsKLQotICAgICAgICAgICAgdXNlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgaW5kZXgudXNlKCk7Ci0KLSAgICAgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcp
LCByZXN1bHRUYWdHUFIpOwotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKLSAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0
QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVj
dFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwg
c3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgotICAgICAgICAgICAgICAg
IEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVn
cygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdz
KCk7Ci0gICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbENlbGws
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0
eVJlZ3MpOwotICAgICAgICAgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkganNWYWx1ZVJlc3VsdDsKKyAgICAgICAg
R1BSVGVtcG9yYXJ5IG9uZVJlZ1Jlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUs
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsK
KyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2gg
KHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMs
IFJldXNlLCBwcm9wZXJ0eSwgVGFnV29yZCk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzLCBSZXVzZSwgcHJvcGVydHksIFBheWxvYWRXb3JkKTsKLQotICAgICAg
ICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAg
ICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOwot
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZXN1bHRUYWcuZ3ByKCksIHJlc3Vs
dFBheWxvYWQuZ3ByKCkpOwotCi0gICAgICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBu
b2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOwotICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMtPnVzZWRSZWdpc3RlcnMoKTsKLQotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIGlmICgh
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVj
Q2VsbCkpCi0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5v
dENlbGwoYmFzZVJlZ3MudGFnR1BSKCkpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5l
cmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpE
RkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJl
Z2lzdGVycywKLSAgICAgICAgICAgICAgICBiYXNlUmVncywgcHJvcGVydHlSZWdzLCByZXN1bHRS
ZWdzLCBJbnZhbGlkR1BSUmVnKTsKLQotICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZSht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N0cmluZykpCi0gICAgICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc0ludDMyID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUu
Zm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkp
Ci0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0cnVl
OwotCi0gICAgICAgICAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aChtX2ppdCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQot
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aCA9
IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9y
aWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1Bh
dGguZ2V0KCkpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93
UGF0aCkpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1Nh
bmVDaGFpbigpKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAg
ICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRQYXlsb2FkLmdwcigpLCBub2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7
Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBUYWdPZmZzZXQpLAot
ICAgICAgICAgICAgICAgICAgICByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMigKLSAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICAgICAg
ICAgIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0VGFn
LmdwcigpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRU
YWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBh
eWxvYWQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3Vs
dFBheWxvYWRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdFRhZ1JlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0g
ICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9h
ZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywg
cmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCAwLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHQuZnByKCkpKTsKLSAgICAgICAgICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgICAgIGNhc2Ug
RGF0YUZvcm1hdEludDMyOgorICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKKyAgICAg
ICAgICAgICAgICBvbmVSZWdSZXN1bHQgPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAg
ICAgICAgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShvbmVSZWdSZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0g
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1Jl
ZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVn
ID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIEZQUlJlZyB0ZW1wUmVnID0gdGVt
cC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgIGJv
eERvdWJsZSh0ZW1wUmVnLCByZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpOwotCi0gICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1Jl
ZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21w
aWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMp
OwotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0g
ICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJl
c3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWQuZ3ByKCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCks
IHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgZGVmYXVsdDogeworICAg
ICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7
CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IGpzVmFsdWVSZXN1bHQucmVncygpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwot
ICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQg
c3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcg
PSBiYXNlLmdwcigpOwotCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRo
aXMpOwotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKAot
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LAotICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKLQotICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWdSZWcp
OwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaG9sZSA9IG1faml0LmJyYW5jaElmRW1w
dHkocmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRP
RihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFBheWxvYWRSZWcpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChvdXRPZkJvdW5kcyk7Ci0gICAgICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGhvbGUpOwotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0g
ICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHJlc3VsdFBheWxvYWRSZWcpLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwKLSAgICAgICAgICAgICAgICAgICAgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKLQotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdSZWcsIHJlc3VsdFBh
eWxvYWRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJn
dW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1l
bnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMobm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgVHlw
ZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0g
ICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkpCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwot
ICAgICAgICB9IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAg
ICBicmVhazsKICAgICB9CiAgICAgCkBAIC00MTEyLDUxICs0MTQ3LDU1IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJh
YmxlTGVuZ3RoKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJv
cGVydHkobm9kZSk7CisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRl
eCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVn
PigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIo
KSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisK
KyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJv
cGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5
KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
b21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJv
cGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Io
bm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
SW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCmluZGV4IGI1ZTFjYzNlNDJkMmZiNGM5ZDRmMTMxMDdlOThlZmUwYjIwNWU1YzcuLjEw
NzcxMzE3MTRkYThhNDU1M2JiY2I1ZDhlNDZiZDMzOGI2ZjRhMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtMjI0Niw2ICsy
MjQ2LDM3MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUqIG5vZGUpCiAg
ICAgfQogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwoTm9kZSogbm9k
ZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+
KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKK3sKKyAgICBzd2l0Y2ggKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgeworICAgIGNhc2UgQXJyYXk6OkFueVR5cGVkQXJyYXk6
CisgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5n
QXJndW1lbnRzOgorICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CisgICAg
Y2FzZSBBcnJheTo6VW5wcm9maWxlZDoKKyAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCks
IG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJyYXk6OlVuZGVjaWRlZDogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
aW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlJl
ZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChE
YXRhRm9ybWF0SlMpOworCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpT
VmFsdWVSZWdzKCksIG5vZGUsCisgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KSk7CisKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpT
VmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0UmVncy5ncHIoKSk7CisKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJyYXk6CisgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJy
YXk6CisgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogeworICAgICAgICBpZiAobV9ncmFwaC5tX3Ns
b3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgeworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgeworICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdV
c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0
cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdw
cigpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9u
Q2hlY2soKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlH
UFIgPSBwcm9wZXJ0eS5ncHIoKTsKKworICAgICAgICBHUFJUZW1wb3Jhcnkgc3R1YkluZm87Cisg
ICAgICAgIEdQUlJlZyBzdHViSW5mb0dQUiA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIGlmIChK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc3R1Yklu
Zm8gPSBHUFJUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBzdHViSW5mb0dQUiA9IHN0dWJJ
bmZvLmdwcigpOworICAgICAgICB9CisKKyAgICAgICAgc3BlY3VsYXRlKG5vZGUsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHRSZWdzLmdwcigpOwor
CisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsK
KyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5k
R2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0
cmVhbS0+c2l6ZSgpKTsKKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHRoaXMt
PnVzZWRSZWdpc3RlcnMoKTsKKworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQorICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZUdQUikpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2Vu
ZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdK
SVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lz
dGVycywKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBKU1ZhbHVlUmVncyhwcm9w
ZXJ0eUdQUiksIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHN0dWJJbmZvR1BSKTsKKworICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKKyAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3Ry
aW5nID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjSW50MzJPbmx5KSkKKyAgICAgICAgICAgIGdl
bi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOworICAgICAgICBlbHNlIGlmICht
X3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNT
eW1ib2wpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTeW1ib2wgPSB0
cnVlOworCisgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKKworICAgICAgICBp
ZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQorICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7CisgICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93
UGF0aElDQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5m
bygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1
Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZh
bE9wdGltaXplLAorICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBz
dHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAg
ICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0
ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOworICAgICAgICB9CisKKyAgICAgICAgbV9qaXQuYWRk
R2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpJbnQzMjoK
KyAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisg
ICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBEYXRhRm9y
bWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0g
cmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAg
ICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpD
b250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0g
bV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHQpOworICAgICAgICAgICAgICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdCk7
CisgICAgICAgICAgICAgICAgbm90SG9sZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAg
ICAgIExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwKKyAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LCBub2RlLCBmb3JtYXQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgo
RGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3By
KCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVn
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKKworICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAg
ICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZyk7CisgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWcpOworICAg
ICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7CisgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisgICAgICAgIH0KKworCisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
CisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAg
RlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAg
ICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91Ymxl
KTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRl
cmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9h
ZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBp
ZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0
ciwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0UmVnKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0
ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHRSZWcs
IHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChmb3Jt
YXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9k
ZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKKworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgIGlm
ICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBGUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwor
CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIERhdGFGb3JtYXQgZm9y
bWF0OworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KHJlc3Vs
dElzVW5ib3hlZCA/IERhdGFGb3JtYXREb3VibGUgOiBEYXRhRm9ybWF0SlMpOworCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9k
ZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgaWYgKGZvcm1hdCA9
PSBEYXRhRm9ybWF0RG91YmxlKSB7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQu
anVtcCgpOworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5
UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgTmFOID0gUE5hTjsKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKFRydXN0ZWRJbW1QdHIoJk5hTiksIHRlbXBSZWcpOworICAgICAgICAgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOworICAgICAgICAgICAgICAgIEFTU0VSVCghcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHRlbXBSZWcsIG5vZGUpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
TmFOKHRlbXBSZWcpKTsKKyAgICAgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0
UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwor
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
KSwgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgYm94RG91Ymxl
KHRlbXBSZWcsIHJlc3VsdFJlZ3MuZ3ByKCkpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRSZWdzLmdwcigpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncy5ncHIoKSwgbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFy
cmF5U3RvcmFnZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworCisKKyAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJy
YXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQu
YnJhbmNoSWZFbXB0eShyZXN1bHRHUFIpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAgICAgICAg
R1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOworCisgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1
bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0
aE9mZnNldCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKKworICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAor
ICAgICAgICAgICAgICAgIHJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcs
IG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6U3RyaW5nOgor
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBwcmVmaXgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25TY29wZWRBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgorICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6CisgICAgY2Fz
ZSBBcnJheTo6SW50MzJBcnJheToKKyAgICBjYXNlIEFycmF5OjpVaW50OEFycmF5OgorICAgIGNh
c2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQxNkFycmF5
OgorICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJB
cnJheToKKyAgICBjYXNlIEFycmF5OjpGbG9hdDY0QXJyYXk6IHsKKyAgICAgICAgVHlwZWRBcnJh
eVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAg
IGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0g
fQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAg
Tm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMjcxMyw3ICszMDc3LDEyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0
OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBi
YXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmco
bm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRh
Rm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ID09
IERhdGFGb3JtYXRKUyB8fCBwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdC5yZWdzKCksIHByZWZlcnJlZEZv
cm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNzQ2LDM0
NSArMzExNSwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewotICAgICAgICBzd2l0Y2ggKG5vZGUtPmFycmF5
TW9kZSgpLnR5cGUoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpBbnlUeXBlZEFycmF5OgotICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVz
aW5nQXJndW1lbnRzOgotICAgICAgICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25z
OgotICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgotICAgICAgICAgICAgREZHX0NSQVNI
KG1faml0LmdyYXBoKCksIG5vZGUsICJCYWQgYXJyYXkgbW9kZSB0eXBlIik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7Ci0gICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBpbmRleCk7Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1
c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2Uo
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50
NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6QmlnVWludDY0QXJyYXk6Ci0gICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5
VmFsLmNvbnRhaW5zKG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3RyaW5n
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RX
aXRoU3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKG5vZGUpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgICAgICAgICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0
aW9uQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiBzdHViSW5m
bzsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMsIFJldXNlLCBwcm9wZXJ0eSk7Ci0KLSAgICAgICAgICAgIEdQUlJlZyBzdHViSW5m
b0dQUiA9IEludmFsaWRHUFJSZWc7Ci0gICAgICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlD
KEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAgICAgICAgICAgICBzdHViSW5mby5lbXBsYWNlKHRo
aXMpOwotICAgICAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8tPmdwcigpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotCi0gICAgICAgICAgICBzcGVjdWxh
dGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0KLSAgICAgICAgICAg
IENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAg
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVy
YXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0t
PnNpemUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+
dXNlZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xv
d0Nhc2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7Ci0KLSAgICAgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKLSAgICAgICAgICAgICAgICBtX2ppdC5jb2RlQmxv
Y2soKSwgSklUVHlwZTo6REZHSklULCBjb2RlT3JpZ2luLCBjYWxsU2l0ZSwgQWNjZXNzVHlwZTo6
R2V0QnlWYWwsIHVzZWRSZWdpc3RlcnMsCi0gICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9w
ZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAg
ICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkKLSAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0KLSAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGg7Ci0gICAg
ICAgICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpIHsKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAotICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIGdlbi5zdHViSW5mbygpLCBzdHViSW5mb0dQUiwgQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKHN0dWJJbmZvR1BSLCBTdHJ1Y3R1cmVTdHViSW5mbzo6b2Zmc2V0T2ZTbG93
T3BlcmF0aW9uKCkpLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAg
ICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgc3R1YkluZm9HUFIsIG51bGxwdHIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICAgICAg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNl
R1BSLCBwcm9wZXJ0eUdQUik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIG1faml0LmFkZEdldEJ5VmFsKGdlbiwgc2xvd1BhdGguZ2V0KCkpOwotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOwotCi0gICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMo
KSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotCi0g
ICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOwotICAgICAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0
eShyZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUsIG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIgPyBE
YXRhRm9ybWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVt
cG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJk
YTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCk+KFsmXSAoRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpIHsKKyAgICAgICAgICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBzd2l0Y2ggKHByZWZlcnJlZEZv
cm1hdCkgeworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
OwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZyk7Ci0KLSAgICAg
ICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3Vs
dFJlZyk7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51
bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmpl
Y3RJbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1Q
dHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAg
ICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsK
LQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdFJlZykpOwotICAgICAgICAg
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICAgICAgZGVmYXVs
dDogeworICAgICAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1h
dEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnQzMik7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAg
ICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+
YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3Rk
OjpvcHRpb25hbDxHUFJSZWc+IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNV
bmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBS
ZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9
IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0
KTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBK
U1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAg
ICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAg
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJl
Zyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAg
ICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAq
cmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgp
OwotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCks
IG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVy
dHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpKSwgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRS
ZWcsIG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7
Ci0gICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93
UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJl
ZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0g
ICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFy
cmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3Jh
Z2U6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsK
LSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCi0g
ICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOwotICAgIAotICAgICAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50LAotICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNj
b3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBjYXNlIEFy
cmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAg
ICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2
NEFycmF5OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlN
b2RlKCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAg
ICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3Jt
YXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU4MSw3ICsz
NjI2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3Vs
YXRlID0gZmFsc2U7Ci0gICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJl
c3VsdEdQUiwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hv
dWxkQm94ID0gZmFsc2U7CisgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUs
IEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTUyNjksNTIgKzUzMTUsNTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxl
U3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAotICAg
IGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0RW51bWVyYWJs
ZUxlbmd0aChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3Ry
dWN0dXJlUHJvcGVydHkobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3Bl
cnR5KG5vZGUpOworCisgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3Bl
Y3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRl
eCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVn
PigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIo
KSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisK
KyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJv
cGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5
KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogewor
ICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAg
ICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxl
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
b21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBk
YXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVBy
b3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJv
cGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Io
bm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxl
RW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9y
SW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0
cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2Ug
RW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJv
ZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBi
cmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBi
ZWYxZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRkMDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRl
cmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJl
Y3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKQEAgLTM1Miw2ICszNTMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNl
IEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
ICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5k
ZXggMmUyZjA3ZGZjN2U4YzEzZGRiMGVkZDVhMmQwN2E1ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcy
MzBlMGUxYmQ0NDVmMzA2MjM0MzdmY2Q2MzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTExNCw2ICsxMTQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
bW9kZVNldE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVT
dHJpbmc6Om9mZnNldE9mRmxhZ3MoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19sZW5ndGgs
IEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmlu
Z19maWJlcjAsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGExYTVmZDI0NGNmMjEx
MDMyNjQxOTdhNzZhZTMwYzdmNjBmNzllNjQuLjAzZjg2NTJjNmNiODJjNjIwMjBkMWU2NmJiNTlm
NDY1OTFkODNlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAKQEAgLTI4NiwxOCArMjg2LDE1IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIEJv
b2xlYW5Ub051bWJlcjoKICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBI
YXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0g
ICAgY2FzZSBHZXREaXJlY3RQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6CiAg
ICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0UHJvcGVydHlF
bnVtZXJhdG9yOgotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNh
c2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Cisg
ICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRl
eDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2Ug
RW51bWVyYXRvckdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2Fz
ZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBj
YXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNmZlMjlk
OTlmYTQ0MTQ5YzE0NmIyMWFiNDEwNGM0MDgwMzY5ZjM3MS4uMWU2OWIyYTczMmFhYjdkZTRkZjRm
YjM2N2ViZmRlZDAyOWVhZmZlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcApAQCAtMTAyLDYgKzEwMiw4IEBACiAjaW5jbHVkZSA8d3RmL1JlY3Vy
c2FibGVMYW1iZGEuaD4KICNpbmNsdWRlIDx3dGYvU3RkVW5vcmRlcmVkU2V0Lmg+CiAKKyNpbmNs
dWRlICJQcm9iZUNvbnRleHQuaCIKKwogI3VuZGVmIFJFTEVBU0VfQVNTRVJUCiAjZGVmaW5lIFJF
TEVBU0VfQVNTRVJUKGFzc2VydGlvbikgZG8geyBcCiAgICAgaWYgKCEoYXNzZXJ0aW9uKSkgeyBc
CkBAIC0xNTIzLDQwICsxNTI1LDMxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlU3Rv
cmVCYXJyaWVyKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAg
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAg
IGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICAgICAgICAgIGNv
bXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc093
blN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9y
OgorICAgICAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAg
IGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGUoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldERpcmVjdFBuYW1lKCk7CisgICAg
ICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgICAgICBjb21waWxl
RW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51bWVy
YWJsZUxlbmd0aCgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6Cisg
ICAgICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgICAgICAg
ICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcigpOworICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lKCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCk7CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckluQnlWYWw6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckluQnlWYWwoKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFRvSW5kZXhTdHJpbmc6Ci0gICAgICAg
ICAgICBjb21waWxlVG9JbmRleFN0cmluZygpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNP
d25Qcm9wZXJ0eToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRp
YXRlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCk7CkBAIC01
MDIwLDcgKzUwMTMsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyB3ZSBkb21pbmF0ZSB0aGVtLgog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisgICAgTFZhbHVlIGNvbXBp
bGVHZXRCeVZhbEltcGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewpAQCAtNTA0Nyw4ICs1MDQw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBh
bGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBp
ZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAg
ICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgZmFzdENhc2UgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTA4MCw4ICs1MDcyLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRv
IGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgaWYgKG1fbm9kZS0+
YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RG91
YmxlOiB7CkBAIC01MTAwLDggKzUwOTEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKHJlc3VsdCwgcmVzdWx0KSk7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBtX25v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG1fbm9kZS0+Zmxh
Z3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKQEAgLTUxNDEsMTggKzUxMzIsMTYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKQotICAg
ICAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkoRG91YmxlLCBmYXN0UmVzdWx0LCBzbG93
UmVzdWx0KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSht
X291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCk7CisKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6
VW5kZWNpZGVkOiB7CiAgICAgICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogCiAgICAgICAgICAgICBzcGVjdWxhdGUoT3V0T2ZC
b3VuZHMsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5sZXNzVGhhbihpbmRleCwgbV9vdXQuaW50
MzJaZXJvKSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1
ZTo6VmFsdWVVbmRlZmluZWQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVkKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czogewpA
QCAtNTE2OSw4ICs1MTU4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
T3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgbnVsbHB0ciwgaXNPdXRPZkJvdW5kcyk7CiAgICAgICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCiAgICAgICAg
ICAgICAgICAgICAgIG1faGVhcHMuRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIGJhc2UsIG1fb3V0
Lnplcm9FeHRQdHIoaW5kZXgpKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0Lmxv
YWQ2NChhZGRyZXNzKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IHJldHVybiBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUxOTIsOCAr
NTE4MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwot
ICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5w
aGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOiB7CkBAIC01MjQ2LDggKzUy
MzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBuYW1lZFJl
c3VsdCwgb3ZlcmZsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5
OgpAQCAtNTI1NiwyNCArNTI0MiwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobV9ub2RlKSkgewogICAgICAgICAgICAgICAgIGlm
IChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkudXNlS2luZCgpID09IE9iamVjdFVzZSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEp
LnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpT
VmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RT
dHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmlu
ZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJv
bFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN5bWJvbCwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDApKSwgbG93U3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAg
ICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEpKSkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgbG93
SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gbV9ub2RlOwpAQCAtNTM3Myw4ICs1MzU2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICBzZXRKU1Zh
bHVlKHBhdGNocG9pbnQpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IHBhdGNocG9pbnQ7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3Jh
Z2U6CkBAIC01MzkwLDggKzUzNzIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuaXNaZXJvNjQocmVz
dWx0KSk7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8g
a2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3Rp
bGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CkBAIC01NDE3LDEzICs1Mzk4LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIC8v
IFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFs
aXZlLgogICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwot
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6IHsKLSAgICAgICAgICAgIGNvbXBpbGVTdHJpbmdDaGFyQXQo
KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBjb21waWxlU3RyaW5n
Q2hhckF0SW1wbCgpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6SW50OEFycmF5OgpAQCAtNTQ0OCw5ICs1NDI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvYWRGcm9tSW50VHlwZWRBcnJheShwb2ludGVyLCB0
eXBlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUg
c2luY2UgdGhhdCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgICAgICBlbnN1
cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICAgICAgY29uc3RleHByIGJv
b2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgc2V0SW50VHlwZWRB
cnJheUxvYWRSZXN1bHQocmVzdWx0LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzRmxv
YXQodHlwZSkpOwpAQCAtNTQ2OSw4ICs1NDQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0
aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2
ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtNTQ4MCw4ICs1NDU2LDI0IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6CiAgICAgICAgIGNhc2UgQXJy
YXk6OlVucHJvZmlsZWQ6CiAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5
cGUgdHlwZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAg
aWYgKGlzSW50KHR5cGUpKSB7CisgICAgICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxh
dGUgPSB0cnVlOworICAgICAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQocmVzdWx0
LCB0eXBlLCBjYW5TcGVjdWxhdGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIHNldERv
dWJsZShyZXN1bHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3Vs
dCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldE15QXJndW1lbnRCeVZhbCgpCkBA
IC04NTcxLDcgKzg1NjMsNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBo
aShJbnQ2NCwgZmFzdFJlc3VsdCwgZW1wdHlSZXN1bHQsIHNsb3dSZXN1bHQpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckF0KCkKKyAgICBMVmFsdWUgY29tcGlsZVN0
cmluZ0NoYXJBdEltcGwoKQogICAgIHsKICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dTdHJpbmco
bV9ncmFwaC5jaGlsZChtX25vZGUsIDApKTsKICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50
MzIobV9ncmFwaC5jaGlsZChtX25vZGUsIDEpKTsKQEAgLTg2NzksNyArODY3MSwxMiBAQCBwcml2
YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9y
YWdlIGFsaXZlLgogICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIHJlc3VsdHMpKTsKKyAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQ2NCwgcmVzdWx0cyk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlU3RyaW5n
Q2hhckF0KCkKKyAgICB7CisgICAgICAgIHNldEpTVmFsdWUoY29tcGlsZVN0cmluZ0NoYXJBdElt
cGwoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJDb2RlQXQoKQpA
QCAtMTI5MDYsMTcgKzEyOTAzLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIGVtaXRTdG9yZUJhcnJp
ZXIobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgbV9ub2RlLT5vcCgpID09IEZlbmNlZFN0b3Jl
QmFycmllcik7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCisgICAgTFZhbHVlIGNvbXBp
bGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKExWYWx1ZSBpbmRleCwgU19KSVRPcGVyYXRpb25fR0Na
IHNsb3dQYXRoT3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKICAg
ICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAxKSk7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbV9ub2RlLT5hcnJheU1vZGUo
KTsKIAogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7
Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFn
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgp
KSk7CiAKICAgICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtb2RlLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIgPwogICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMy
UHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzOwpAQCAtMTI5
NTEsMTEgKzEyOTQ3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9s
ZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwor
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1faGVhcHMuaW5kZXhlZERv
dWJsZVByb3BlcnRpZXM7CiAgICAgICAgICAgICAKQEAgLTEyOTg5LDEyICsxMjk4NCwxMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQs
IHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
X291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0K
IAogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwor
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKIAogICAgICAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTEzMDI2LDE5NiAr
MTMwMjAsMjY5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3Vs
dCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4g
bV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9
CiAKICAgICAgICAgZGVmYXVsdDogewotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5ub3Ra
ZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwgYmFzZSwgaW5kZXgpKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IHJldHVybiBtX291dC5ub3RaZXJvNjQodm1DYWxsKEludDY0LCBzbG93UGF0aE9wZXJhdGlvbiwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgpKTsKICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KCkK
KyAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChpbmRleCwgb3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0
UHJvcGVydHlFbnVtZXJhdG9yKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMigpKTsKLSAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKKyAgICAgICAgaWYg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpCisgICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2VsbCwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0
aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFNsb3dQYXRoQ2FsbD4KLSAgICB2b2lkIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eUlt
cGwoTFZhbHVlIGJhc2UsIFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwpCisgICAgdm9pZCBjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoKQogICAgIHsKICAgICAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3Jp
Z2luLnNlbWFudGljKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93U3RyaW5nKG1fbm9k
ZS0+Y2hpbGQyKCkpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDMoKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3Ig
PSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKSk7CiAKLSAgICAgICAgTEJh
c2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGNvcnJlY3RTdHJ1Y3R1cmUgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNC
bG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIGlmIChtX25vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
IHsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1f
b3V0Lm5vdFplcm8zMihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKSk7CiAKLSAgICAgICAgbV9v
dXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwKLSAg
ICAgICAgICAgIHVzdWFsbHkoaXNDZWxsQ2FzZSksIHJhcmVseShzbG93UGF0aCkpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNoZWNrSGFzUHJvcGVydHkgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKIAot
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2Us
IGNvcnJlY3RTdHJ1Y3R1cmUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5pdGlhbElu
ZGV4ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGlu
aXRpYWxJbmRleEZvckhhc1Byb3BlcnR5ID0gbV9vdXQuYW5jaG9yKGluZGV4KTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm8zMihtb2RlKSwgdW5zdXJlKGNoZWNrSGFzUHJv
cGVydHkpLCB1bnN1cmUoaW5jcmVtZW50KSk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxs
X3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hl
YXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAg
ICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb3JyZWN0U3RydWN0dXJlKSk7CisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAgICAgICAgTFZhbHVlIGlu
ZGV4UGhpID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgpOworICAgICAgICAgICAgTFZh
bHVlIGluY3JlbWVudGVkSW5kZXggPSBtX291dC5hZGQoaW5kZXhQaGksIG1fb3V0LmludDMyT25l
KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluY3JlbWVudGVkSW5kZXhSZXN1bHQgPSBt
X291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBmaW5hbEluY3JlbWVudGVkSW5kZXggPSBtX291dC5hbmNob3IoaW5jcmVtZW50ZWRJbmRleCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQubGVzc1RoYW4oaW5jcmVtZW50ZWRJbmRl
eCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yX2luZGV4TGVuZ3RoKSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGNvbnRp
bnVhdGlvbikpOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvcnJlY3RTdHJ1Y3R1cmUsIHNs
b3dQYXRoKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSGFzUHJvcGVydHkp
OworICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5SW5kZXggPSBtX291dC5waGkoSW50MzIsIGlu
aXRpYWxJbmRleEZvckhhc1Byb3BlcnR5LCBpbmNyZW1lbnRlZEluZGV4UmVzdWx0KTsKKyAgICAg
ICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkoaW5kZXhQaGksIG1fb3V0LmFuY2hvcihwcm9w
ZXJ0eUluZGV4KSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBmaW5hbFByb3BlcnR5SW5k
ZXggPSBtX291dC5hbmNob3IocHJvcGVydHlJbmRleCk7CisgICAgICAgICAgICBMVmFsdWUgaGFz
UHJvcGVydHkgPSBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5SW1wbChwcm9wZXJ0eUluZGV4LCBv
cGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChoYXNQcm9wZXJ0eSwgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShpbmNyZW1l
bnQpKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsK
LSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3IoCi0g
ICAgICAgICAgICBtX291dC5lcXVhbCgKLSAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgCi0gICAgICAgICAgICAgICAgdm1D
YWxsKEludDY0LCBzbG93UGF0aENhbGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2Us
IHByb3BlcnR5KSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAgICAgICAgTFZhbHVlIGZp
bmFsSW5kZXggPSBtX291dC5waGkoSW50MzIsIGZpbmFsSW5jcmVtZW50ZWRJbmRleCwgZmluYWxQ
cm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQu
emVyb0V4dChmaW5hbEluZGV4LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVt
YmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGUpIDw8IDMyKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjb3JyZWN0U3RydWN0dXJlUmVzdWx0LCBzbG93
UGF0aFJlc3VsdCkpOworICAgICAgICBFZGdlJiBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkg
PT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZUVkZ2UudXNlS2lu
ZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChiYXNl
RWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2Rl
LCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShC
YWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9tb2RlU2V0KSwgbV9v
dXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok5hbWVkTW9kZSkpKTsKKwor
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihp
bmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVu
c3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNy
ZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJP
bmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ID0gbV9v
dXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIExWYWx1ZSBiYXNlID0gbG93SlNWYWx1
ZShiYXNlRWRnZSk7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25F
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0
KSwgYmFzZSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKICAgICB9CiAKLSAgICB2b2lkIGNv
bXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCkKICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1
Y3R1cmVQcm9wZXJ0eUltcGwobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9u
SGFzRW51bWVyYWJsZVByb3BlcnR5KTsKKyAgICAgICAgTFZhbHVlIGJveGVkUGFpciA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgc2V0SW50MzIobV9vdXQuY2FzdFRv
SW50MzIoYm94ZWRQYWlyKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0
dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUo
KQogICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk7Cisg
ICAgICAgIExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
CisgICAgICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LmxTaHIo
Ym94ZWRQYWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQzMihtX291
dC5iaXRBbmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjplbnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUlu
U3RydWN0dXJlUHJvcGVydHkoKQorICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcHJvYmFibHkgaGF2
ZSBhIG1ldGhvZCBvZiB2YWx1ZSByZWNvdmVyeSBmb3IgdGhpcyBub2RlIHNpbmNlIGl0J3MgImVm
ZmVjdCIgZnJlZSBidXQgYWx3YXlzIGxpdmUgaW4gYnl0ZWNvZGUuCisgICAgdm9pZCBjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKQogICAgIHsKLSAgICAgICAgY29tcGls
ZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVy
YXRpb25JblN0cnVjdHVyZVByb3BlcnR5KTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1
ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0
eU5hbWUsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9y
KSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoKQorICAgIHZvaWQg
Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50
aWMpOwotICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApKTsKLSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRv
ciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKyAgICAgICAgRWRn
ZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgRWRn
ZSBwcm9wZXJ0eU5hbWVFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpOworICAg
ICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpOwor
ICAgICAgICBFZGdlIGluZGV4RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKTsK
IAotICAgICAgICBMQmFzaWNCbG9jayBjaGVja09mZnNldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWQgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAg
ICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUg
YmFzZSA9IERGRzo6aXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkgPyBsb3dDZWxsKGJhc2VFZGdl
LCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pIDogbG93SlNWYWx1ZShiYXNlRWRnZSk7CisKKyAg
ICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBzdG9yYWdlRWRnZSA/IGxvd1N0b3JhZ2Uoc3RvcmFnZUVk
Z2UpIDogbnVsbHB0cjsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgcHJv
cGVydHlOYW1lIGhlcmUgaW4gY2FzZSBpdCByZXF1aXJlcyBib3hpbmcgc2luY2UgdGhlIElDIHBh
dGggd29uJ3QgZG9taW5hdGUgc3Vic2VxdWVudCB1c2VzIGluIHN1YnNlcXVlbnQgbm9kZXMuCisg
ICAgICAgIC8vIElmIGl0J3MgYW4gSW50MzIgYW5kIHdlIHVzZSBpdCBhcyBzdWNoIHRoaXMgYm94
aW5nIHdpbGwgYmUgRENFJ2QgYnkgYjMgbGF0ZXIgYW55d2F5LgorICAgICAgICBsb3dKU1ZhbHVl
KHByb3BlcnR5TmFtZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKworICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihpbmRleEVkZ2UpOworICAgICAgICBMVmFsdWUgbW9k
ZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KSk7CisgICAgICAgIExW
YWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNSkp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2sg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVMb2FkQmxvY2sg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBnZW5lcmljSUNCbG9j
ayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFs
KAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVy
ZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAotICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNldCkpOworICAgICAgICBMVmFsdWUgaXNO
b3ROYW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROYW1lZCwgdW5z
dXJlKGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNrU3RydWN0dXJlQmxvY2spKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgLy8gVE9E
TyBjaGVjayBjZWxsPworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8g
c3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUu
b25seVN0cnVjdHVyZSgpOworICAgICAgICBpZiAoc3RydWN0dXJlKQorICAgICAgICAgICAgc3Ry
dWN0dXJlSUQgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMu
SlNDZWxsX3N0cnVjdHVyZUlEKTsKKworICAgICAgICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVj
dHVyZSA9IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKKwor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdDsKKyAgICAg
ICAgaWYgKGluZGV4RWRnZS5ub2RlKCkgPT0gcHJvcGVydHlOYW1lRWRnZS5ub2RlKCkpIHsKKyAg
ICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBiYWRT
dHJ1Y3R1cmVTbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZM
aW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYmFkU3RydWN0dXJlU2xvd1BhdGgpOworICAgICAgICAgICAgYmFkU3RydWN0dXJl
U2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVt
ZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
YmFzZSwgaW5kZXgsIGVudW1lcmF0b3IpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9y
T3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKIAotICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGNoZWNrT2Zmc2V0LCBpbmxpbmVMb2Fk
KTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQu
bG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hl
ZElubGluZUNhcGFjaXR5KSksCi0gICAgICAgICAgICB1bnN1cmUob3V0T2ZMaW5lTG9hZCksIHVu
c3VyZShpbmxpbmVMb2FkKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5saW5lT3JP
dXRPZkxpbmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBpbmxpbmVDYXBhY2l0eSA9IG51bGxwdHI7
CisgICAgICAgIGJvb2wgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgICAg
IGlmIChzdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9
ICFzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgICAgICAgICBpbmxpbmVDYXBh
Y2l0eSA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIWlubGluZUNhcGFjaXR5KQorICAgICAgICAgICAgaW5saW5l
Q2FwYWNpdHkgPSBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpOworICAgICAgICBMVmFsdWUgaXNJbmxp
bmUgPSBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPyBtX291dC5pbnQzMk9uZSA6IG1fb3V0LmJl
bG93KGluZGV4LCBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0lubGlu
ZSwgdW5zdXJlKGlubGluZUxvYWRCbG9jayksIHVuc3VyZShvdXRPZkxpbmVMb2FkQmxvY2spKTsK
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkLCBvdXRPZkxpbmVMb2FkKTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaW5saW5lTG9hZEJsb2NrKTsKICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9h
ZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCisg
ICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGll
cy5hdEFueU51bWJlcigpLAogICAgICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5k
ZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob3V0T2ZMaW5lTG9hZCwgc2xvd0Nhc2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFn
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAg
ICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVMb2FkQmxvY2spOworICAgICAgICBpZiAoIXN0
b3JhZ2UpCisgICAgICAgICAgICBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBz
LkpTT2JqZWN0X2J1dHRlcmZseSk7CisKICAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0
LnNpZ25FeHQzMlRvNjQoCi0gICAgICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBt
X291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Jf
Y2FjaGVkSW5saW5lQ2FwYWNpdHkpKSkpOworICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1
YihpbmRleCwgaW5saW5lQ2FwYWNpdHkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJz
dFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RP
dXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1f
b3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVy
KCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgdm1DYWxsKEludDY0
LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJv
cGVydHkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291
dC5hcHBlbmRUbyhnZW5lcmljSUNCbG9jayk7CisgICAgICAgIExWYWx1ZSBnZW5lcmljUmVzdWx0
ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0g
bV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQo
dHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWdu
ZWQodHlwZSkpCisgICAgICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveEludDMyKGdlbmVy
aWNSZXN1bHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1
bHQgPSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgfSBlbHNl
IGlmIChnZW5lcmljUmVzdWx0LT50eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgZ2VuZXJp
Y1Jlc3VsdCA9IGJveERvdWJsZShnZW5lcmljUmVzdWx0KTsKIAotICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkoSW50NjQsIGlubGluZVJlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBzbG93Q2FzZVJlc3VsdCkp
OwotICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVzdWx0ID0gbV9vdXQu
YW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAg
IExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
c2V0SW50MzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yX2luZGV4TGVuZ3RoKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbik7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJ
Q1Jlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBpbmxpbmVSZXN1bHQpOworICAgICAgICBpZiAoYmFk
U3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpCisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKHJlc3VsdCwgYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpOworICAgICAgICBzZXRKU1Zh
bHVlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJh
dG9yKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xv
d1BhdGhGdW5jdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAg
IGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNl
bGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkp
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9w
ZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwg
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGls
ZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgZW51
bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRl
eCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBFZGdlIGJhc2VFZGdlID0g
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICBMVmFsdWUgYmFzZSA9IGJh
c2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlID8gbG93Q2VsbChiYXNlRWRnZSkgOiBsb3dKU1Zh
bHVlKGJhc2VFZGdlKTsKKyAgICAgICAgTFZhbHVlIHByb3BlcnR5TmFtZSA9IGxvd0pTVmFsdWUo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVl
IG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworICAgICAg
ICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDQpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNOYW1lZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBtYXRjaGVzU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBvcGVyYXRpb25CbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleCkpLAotICAgICAgICAgICAgdXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5k
cykpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291
dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKSksIHVuc3Vy
ZShpc05hbWVkQmxvY2spLCB1bnN1cmUob3BlcmF0aW9uQmxvY2spKTsKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNOYW1lZEJsb2NrKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBz
dG9yYWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5s
b2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQ
dHIoaW5kZXgpKSkpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5
cGUoYmFzZUVkZ2UpKSwgdW5zdXJlKGlzQ2VsbEJsb2NrKSwgdW5zdXJlKG9wZXJhdGlvbkJsb2Nr
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNDZWxsQmxvY2spOworICAgICAgICBMVmFs
dWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0
dXJlSUQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1f
b3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9j
YWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAgICAgICAgICAgdXN1YWxseShtYXRjaGVzU3RydWN0dXJl
QmxvY2spLCByYXJlbHkob3BlcmF0aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhtYXRjaGVzU3RydWN0dXJlQmxvY2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBuYW1lZFJl
c3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywg
Y29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpWYWx1ZU51bGwpKTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ob3BlcmF0aW9uQmxvY2spOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3IodW5ib3hCb29sZWFuKHZtQ2FsbChJ
bnQ2NCwgc2xvd1BhdGhGdW5jdGlvbiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwg
cHJvcGVydHlOYW1lLCBpbmRleCwgbW9kZSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBpbkJvdW5kc1Jl
c3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24pOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1
bHQsIG9wZXJhdGlvblJlc3VsdCkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWUoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCkK
ICAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7
Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAg
ICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0KLSAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgp
KSwKLSAgICAgICAgICAgIHVzdWFsbHkoaW5Cb3VuZHMpLCByYXJlbHkob3V0T2ZCb3VuZHMpKTsK
LQotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRz
LCBvdXRPZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0
eU5hbWVzVmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBt
X291dC5hbmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
Q29udGVudHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKSkpOwotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZC
b3VuZHMsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRz
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVOdWxs
KSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LnBoaShJbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91bmRzUmVzdWx0KSk7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRv
ckluQnlWYWwpOwogICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkK
KworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSgpCiAgICAgewotICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMiht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJh
dGlvblRvSW5kZXhTdHJpbmcsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGluZGV4KSk7Cisg
ICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRvckhh
c093blByb3BlcnR5KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUoKQpAQCAtMTczNDQsNyArMTc0MTEsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0SW50MzIocmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICAKKwogICAgICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpICYmIGNh
blNwZWN1bGF0ZSkgewogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIE92
ZXJmbG93LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJlc3VsdCwgbV9vdXQu
aW50MzJaZXJvKSk7CkBAIC0yMDI5Niw2ICsyMDM2MywyNyBAQCBwcml2YXRlOgogICAgICAgICBt
X291dC51bnJlYWNoYWJsZSgpOwogICAgIH0KIAorICAgIC8vIFRoaXMgb25seSB3b3JrcyBmb3Ig
aW50cyByaWdodCBub3cuCisgICAgUGF0Y2hwb2ludFZhbHVlKiBkYXRhTG9nRm9yRGVidWdnaW5n
KGNvbnN0IGNoYXIqIHByZWZpeCwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUGF0Y2hw
b2ludFZhbHVlKiByZXN1bHQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAgICByZXN1
bHQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC0+YXBw
ZW5kKHZhbHVlLCBWYWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIFR5cGUg
dmFsdWVUeXBlID0gdmFsdWUtPnR5cGUoKTsKKyAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikg
eworICAgICAgICAgICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRj
aChqaXQpOworCisgICAgICAgICAgICBqaXQucHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0
JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PSBJbnQzMikKKyAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8aW50MzJfdD4o
R1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPEpTVmFsdWU+KEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKICAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0
dXJuIG1fYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAg
IFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0RTTC5yYgppbmRleCA3MzE3MTAwOTZjZjNlMjQ5OGFlNDVkZGEyNmFhODJlNzljZDQ2
YTRlLi42OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTM4LDYgKzEzOCw3IEBAIG1vZHVsZSBE
U0wKICNpbmNsdWRlICJHZXRCeVZhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5o
IgogI2luY2x1ZGUgIkl0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1ZGUgIlByaXZh
dGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCmluZGV4IDQ0NDYzNWU5ODBkOTBh
ZjgzN2ViZDYzYjk2MmZhZWRlMmVjNTM1MDMuLmQ4NzljOTBiZTMxMTc4NjIzM2Y1MjZiMTgzZWRm
MWNiM2M3YmIzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3Rlci5oCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBBTFdBWVNf
SU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZyYW1lKik7CiAgICAgICAgIEFMV0FZU19J
TkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sqKTsKICAgICAgICAgQUxXQVlTX0lO
TElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTU2NvcGUqKTsKLSAgICAgICAgQUxXQVlTX0lOTElO
RSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7CisgICAgICAgIEFMV0FZU19JTkxJTkUg
UmVnaXN0ZXImIG9wZXJhdG9yPShKU0NlbGwqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdp
c3RlciYgb3BlcmF0b3I9KEVuY29kZWRKU1ZhbHVlKTsKIAogICAgICAgICBpbnQzMl90IGkoKSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rl
cklubGluZXMuaAppbmRleCBjNTZlZjVlNDU1NGNiMTAzYWJlYmU3MmU2Mjk4ZjhjNDhhYWQ5ODYw
Li41OTNlZjY2NjhkZTJlMDNhNjU5YjM5ZjMxYWY2MGY4OGMyNzgzOTg4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCkBAIC02
Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0o
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1BTFdBWVNfSU5M
SU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTT2JqZWN0KiBvYmplY3QpCitBTFdB
WVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTQ2VsbCogb2JqZWN0KQog
ewogICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShvYmplY3QpKTsKICAgICBy
ZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMu
aAppbmRleCBhYzhiNTEzN2Q4NTM1NDUwNmFlZWRjZWRiZDFjNWJkNzcyNTc5YzAxLi40MTU5ZTdl
NTA0OTY5MzdlZTFlNTZhZmI3YzIwYWU5Y2YyYTg5ZWU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTg4OSw3ICs4ODksNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAgICAgQmVsb3csIEFkZHJlc3MoY2VsbEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBl
KSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBp
bmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUoR1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJh
bmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCA0MmI4Y2Fm
NWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0Li4zYTg0NWFhYjdjMjYxZjI1NTQ2YjYw
NzZjNjU5YjYxOGNhOTRmM2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCkBAIC0zMDgs
MTAgKzMwOCw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
REVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3ByZWFkKQogICAgICAgICBERUZJTkVfU0xP
V19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBERUZJTkVfU0xPV19PUChzcHJlYWQpCi0g
ICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKLSAgICAgICAgREVG
SU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9X
X09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAgICAgICBERUZJTkVfU0xPV19PUCh0b19p
bmRleF9zdHJpbmcpCisgICAgICAgIERFRklORV9TTE9XX09QKGVudW1lcmF0b3JfbmV4dCkKICAg
ICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiAgICAgICAgIERF
RklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfU0xP
V19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50cykKQEAgLTM2NSw2ICszNjMsOSBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlf
aWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAg
ICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2luX2J5
X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkK
ICAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcml2YXRlX25hbWUpCiAgICAgICAgIERFRklORV9P
UChvcF9zZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2NoZWNrX3ByaXZh
dGVfYnJhbmQpCkBAIC00NzMsMTQgKzQ3NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX2FyZ3VtZW50cykKICAgICAg
ICAgREVGSU5FX09QKG9wX3B1dF90b19hcmd1bWVudHMpCiAKLSAgICAgICAgREVGSU5FX09QKG9w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9o
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9o
YXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2luX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCi0g
ICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLSAgICAgICAg
REVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKLSAgICAgICAgICAgIAogICAg
ICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAKQEAgLTU3OCw2ICs1NzEsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9n
ZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X3ByaXZhdGVfbmFtZSkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAg
ICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTYwOSw3ICs2
MDMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09Q
KG9wX2RlbF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
CiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKQEAgLTY0MiwxMSArNjM1LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1Aobm90KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChzdHJpY3RlcSkKICAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobnN0cmljdGVxKQotICAgICAgICBERUZJTkVf
U0xPV0NBU0VfU0xPV19PUChnZXRfZGlyZWN0X3BuYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChnZXRfcHJvdG90eXBlX29mKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAjaWYgIUVOQUJMRShF
WFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZl
X3Njb3BlKQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA0ODdhNWFjNWI4ZTVk
OGE5ZDgwYjJjNmQzMDZlMDgxNTIxYjgyODE0Li40ZmM5YTAyYjcyOWEzMjk0NWI3NTg0Zjc4YTE2
MzVkZTZhOGIyZjExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTY3MCwyMSArNjcwLDIz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9sb2Fk
KGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChjb25z
dCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0
cnVjdGlvbiopOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLSAgICAg
ICAgdm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9p
ZCBlbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVt
aXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgor
ICAgICAgICB2b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworCisgICAgICAgIHZvaWQgZW1pdF9v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+CisgICAgICAg
IHZvaWQgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBjb25zdCBPcGNvZGVUeXBlJiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgICAgICB2b2lk
IGVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKGNvbnN0IEluc3RydWN0aW9u
KiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRT
bG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpAQCAtNzM1LDcgKzcz
Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRTbG93X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3ByaXZhdGVfbmFtZShjb25zdCBJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5k
ZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRfb3BfcmVzb2x2ZV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmlu
ZGV4IGY2ZGIzZjU5YzRhYTRlMDI3YTE1NjExZWRiYmEyNjFjYWQ4ZWZlZDYuLjliYTEwZWQ2Nzcy
ZmFlYzNmMjBlNjM0YmFiZTE0YWRkOWExMDg5MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcApAQCAtMTY5Miw0NiArMTY5MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlw
ZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotCi0gICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1Qw
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0
eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlv
bik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVu
dEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAorCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUs
IG51bGxwdHIpOwpAQCAtMTczOSw3ICsxNzA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQK
ICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0
aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5saW5lQ2FjaGUpOwotICAg
IAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbEluZm8tPnNsb3dQYXRoVGFy
Z2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlWYWxJbmZvLT5zbG93UGF0
aFRhcmdldCk7CiAKQEAgLTE3NDgsNyArMTcxNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0
CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCiAg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCiAg
ICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJu
IHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewogICAgICAgICBieVZhbEluZm8tPm1fYmFkVHlwZUp1bXBU
YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZv
LT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIGJ5VmFsSW5mby0+bV9zbG93
T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYzsKQEAgLTE3NTgs
MTcxICsxNzI0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2st
PmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5j
b3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0
aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3
YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5
cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGgg
aXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0g
ICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRp
bmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAgICAv
LyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3Mg
Y2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAvLyBleHRl
bmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhl
IHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLQotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5
UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIo
VHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlN
b2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtl
IFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExv
YWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbElu
Zm8pOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4odHJ1ZSkpKSwgcmVnVDApOwotCi0gICAgaWYgKCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlw
ZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRT
bG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAg
IAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotICAgIExhYmVsIG5leHRIb3RQ
YXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZp
cnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAg
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotCi0gICAgQ2FsbCBjYWxsOwotICAgIGlm
IChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5
VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVm
YXVsdDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIEdQUkluZm86Om5v
bkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9uPGRlY2x0eXBlKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eURlZmF1bHQpPihBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjAsIEJ5VmFs
SW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBHUFJJbmZvOjpub25BcmdHUFIw
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0g
c2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgr
KzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNv
ZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7
Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwot
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwot
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0g
ICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxp
bmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIocmVnVDEpOwotICAgIHNpZ25FeHRlbmQz
MlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVnVDApOwot
ICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jf
c3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1f
ZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJl
Z1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJl
Z1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0
eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5C
b3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdU
MSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFz
ZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCmluZGV4IDRkNzQxMjZiZTFlM2RlNDMwZDNhNmQ5Y2I3ZmRkYjZkYzg2ZjdlYjQu
LmNhMzJkYzFjNTZlNjI3YWI2ZTBlNjI2OWU1Mzk4MTNjZWVlN2QwYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTExNDIsNDcgKzExNDIs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwog
fQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLXZvaWQgSklUOjplbWl0X29wX2hh
c19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BD
b2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0KLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Qm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVf
c3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJ
bXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQot
CiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0g
bV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCku
cHRyKCk7Ci0gICAgCisKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgCisKICAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5k
IEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTAzNC4KICAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShj
dXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFkVHlwZSwgbnVsbHB0cik7CkBAIC0xMTkw
LDcgKzExNTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBM
aW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAgCisKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKIApAQCAtMTE5
OSwxNzAgKzExNjQsMTEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICBieVZhbEluZm8t
PnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAgICAgICAgbV9jb2RlQmxv
Y2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAgICAgICAgIkJhc2VsaW5l
IGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NT
dHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudW50YWdnZWRWYWx1ZSgp
KTsKLSAgICAKKwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm1f
YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZh
bEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6
OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5l
cmljKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9maWxlKiBw
cm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwotICAgIAot
ICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotCi0gICAgLy8gVGhp
cyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQz
Mi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2UgY2hlY2sg
dGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0
aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBz
aW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhl
IHRvdGFsIGFsbG9jYXRpb24KLSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4g
QXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5k
aW5nIHRoZSB2YWx1ZQotICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3Mg
dXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRo
YW4gc2lnbgotICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUt
dGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRvV29yZChy
ZWdUMSwgcmVnVDEpOwotCi0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUo
cHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFk
ZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMu
Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUw
MzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3Ry
dWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxh
YmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21w
aWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwg
YmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFBy
b3BlcnR5PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEJ5VmFsSW5mbyogYnlW
YWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
YnlWYWxJbmZvOwotCi0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAotICAgIGVt
aXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1Qz
LCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgYnlWYWxJ
bmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9i
eVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVj
dF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRl
eCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBi
eXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxs
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1p
dExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMik7Ci0gICAgLy8g
SWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9y
YWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdU
MCk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQzMihC
YXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVB
Y2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbmVnMzIocmVnVDIpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChy
ZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQzMihCYXNl
SW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAg
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2lu
ZGV4OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQ
YXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIo
QmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmsodGhp
cyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIGxvYWRQ
dHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLQotICAgIGRvbmUubGluayh0
aGlzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0
TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFu
Y2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmso
dGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIGxv
YWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQdHIpLCByZWdUMCk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKLSAgICAKLSAgICBkb25l
LmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQogdm9p
ZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQcm9maWxlVHlwZT4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKaW5kZXggMTVlMWQzNDU3OWI2ZDRjOGMxNzBkMjM1MGM2YzM2NDQzZmZl
YTQxNS4uNDEzMDdjMDQ2YWE3ZGQ5YTg4NTg1OTdiMGM5YzIwY2U2MjAzZTNmNiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisjaW5jbHVkZSAi
UHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKQEAgLTg2LDEw
ICs4NywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+
Cit2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5
dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGlm
IChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
Jm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwpAQCAtMTM2LDYgKzEzNywxMSBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8UwogICAgIH0KIH0KIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2Uo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpLCBpdGVyKTsKK30KKwogI2lmIEVO
QUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPEpJVFRodW5rUHRy
VGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVwYXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0p
CiB7CkBAIC0yOTc3LDYgKzI5ODMsMTM2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5h
bF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB0ZW1wbGF0
ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0
aW9uKik7CiAKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9
IGJ5dGVjb2RlLm1fbW9kZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1f
YmFzZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAg
IFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsK
KyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisK
KyAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CisKKyAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9wZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZt
ZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkpOworICAgIC8vIFRoaXMgaXMgYWx3YXlzIGFu
IGludDMyIGVuY29kZWQgdmFsdWUuCisgICAgSnVtcCBpc05vdE5hbWVkTW9kZSA9IGJyYW5jaFRl
c3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7
CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKworICAgIC8vIENo
ZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3Is
IHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDMpOworICAgIEp1bXAgc3RydWN0dXJlTWlzbWF0Y2ggPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0
LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKKyAgICAvLyBJZiBp
bmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2Us
IHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKKworICAgIGRvbmVDYXNl
cy5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisg
ICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3ViMzIoQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9m
ZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0
cihyZWdUMSwgcmVnVDEpOworICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQp
KSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlc3VsdEdQUik7Cisg
ICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgc3RydWN0dXJlTWlzbWF0Y2gubGlu
ayh0aGlzKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwgJm1ldGFkYXRhLm1fZW51bWVy
YXRvck1ldGFkYXRhKTsKKworICAgIGlzTm90TmFtZWRNb2RlLmxpbmsodGhpcyk7CisgICAgSnVt
cCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgLy8gUmVwbGFjZSB0
aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKKworICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisKKyAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7CisgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBl
bHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CisKKyAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVy
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRo
RnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUm
IGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3sKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5t
X21vZGU7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1vZGUsIHJlZ1QwKTsKKyAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpOYW1lZE1vZGUpKSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
KSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRy
dWUpKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgc2xvd0Nhc2VzLmxpbmsodGhpcyk7CisKKyAgICBKSVRT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZ2VuZXJh
bENhc2UpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19w
cm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
RW51bWVyYXRvckluQnlWYWw+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFz
X293bl9wcm9wZXJ0eSk7Cit9CisKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklU
OjplbWl0V3JpdGVCYXJyaWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVy
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCA1OGU1ZDUyZmU1YjA4
YWUyOWUzZTVkZGRlM2Q3NDY3OTY3ZjIzMDE5Li4wZWIyZDdlM2Q1NGMzNjQ4MGFlMGQ3MzUxNDU4
YTJjYzhiMzQyNzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKQEAgLTE1MDUsNiArMTUwNSwzMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5
VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwogCisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNv
bnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit7Cisg
ICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
LmFzbQppbmRleCAzN2I2ZGYzMGYxMGMzYTAwMWE1NjU1ZWExYmIxZGI1OTU3M2NmNjA4Li5lNzE4
M2E3MmEzNjhmMWEyODA0Njg0ZDJiMDc2NDdmMjIwNjhmMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xOTkyLDE5
ICsxOTkyLDE0IEBAIHNsb3dQYXRoT3AoY3JlYXRlX2dlbmVyYXRvcikKIHNsb3dQYXRoT3AoY3Jl
YXRlX2FzeW5jX2dlbmVyYXRvcikKIHNsb3dQYXRoT3AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5
KQogc2xvd1BhdGhPcChkZWZpbmVfZGF0YV9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lKQotc2xvd1BhdGhPcChlbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkK
IHNsb3dQYXRoT3AoZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCi1zbG93UGF0aE9wKGdldF9kaXJlY3Rf
cG5hbWUpCi1zbG93UGF0aE9wKGdldF9lbnVtZXJhYmxlX2xlbmd0aCkKIHNsb3dQYXRoT3AoZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3IpCi1zbG93UGF0aE9wKGhhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHkpCi1zbG93UGF0aE9wKGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQorc2xvd1BhdGhP
cChlbnVtZXJhdG9yX25leHQpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKK3Ns
b3dQYXRoT3AoZW51bWVyYXRvcl9pbl9ieV92YWwpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfaGFz
X293bl9wcm9wZXJ0eSkKIAogaWYgbm90IEpTVkFMVUU2NAotICAgIHNsb3dQYXRoT3AoaGFzX2Vu
dW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotICAgIHNsb3dQYXRoT3AoaGFzX293bl9zdHJ1
Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xvd1BhdGhPcChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAg
ICAgc2xvd1BhdGhPcChnZXRfcHJvdG90eXBlX29mKQogZW5kCiAKQEAgLTIwMjEsNyArMjAxNiw2
IEBAIHNsb3dQYXRoT3AocmVzb2x2ZV9zY29wZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2
YWwpCiBzbG93UGF0aE9wKHNwcmVhZCkKIHNsb3dQYXRoT3Aoc3RyY2F0KQogc2xvd1BhdGhPcCh0
aHJvd19zdGF0aWNfZXJyb3IpCi1zbG93UGF0aE9wKHRvX2luZGV4X3N0cmluZykKIHNsb3dQYXRo
T3AodHlwZW9mKQogc2xvd1BhdGhPcCh0eXBlb2ZfaXNfb2JqZWN0KQogc2xvd1BhdGhPcCh0eXBl
b2ZfaXNfZnVuY3Rpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCmluZGV4IGJkODg1NWViZmQ2ZmMxOWIxNWMxYjU4ODZk
NGZhNTU2NDM4MmQ4N2QuLjhhNWY3ZDIzZTY0NzYzYmEyNTllMWIyYzVkODdmOGQxNmI4MjlhZGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCkBAIC0zMTQxLDM0ICszMTQxLDYgQEAgbGxpbnRPcChvcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbCwgT3BMb2dTaGFkb3dDaGlja2VuVGFpbCwgbWFjcm8gKHNpemUsIGdldCwg
ZGkKICAgICBkaXNwYXRjaCgpCiBlbmQpCiAKLW1hY3JvIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1w
bChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4sIHNsb3dQYXRoQ2FsbCkKLSAgICBnZXQobV9i
YXNlLCB0MCkKLSAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHNpemUsIHQwLCB0MSkKLSAgICBi
dHFueiB0MSwgbm90Q2VsbE1hc2ssIC5zbG93UGF0aAotCi0gICAgbG9hZFZhcmlhYmxlKGdldCwg
bV9lbnVtZXJhdG9yLCB0MCkKLSAgICBsb2FkaSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDFdLCB0
MQotICAgIGJpbmVxIHQxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1fY2FjaGVkU3RydWN0
dXJlSURbdDBdLCAuc2xvd1BhdGgKLQotICAgIHJldHVybihWYWx1ZVRydWUpCi0KLS5zbG93UGF0
aDoKLSAgICBjYWxsU2xvd1BhdGgoc2xvd1BhdGhDYWxsKQotICAgIGRpc3BhdGNoKCkKLWVuZAot
Ci1sbGludE9wV2l0aFJldHVybihvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHks
IE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNw
YXRjaCwgcmV0dXJuKQotICAgIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRp
c3BhdGNoLCAgcmV0dXJuLCBfc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4ob3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJv
cGVydHksIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3Bh
dGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlz
cGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi1l
bmQpCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BJblN0
cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAg
IGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBf
c2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQogb3AoZnV6emVyX3JldHVy
bl9lYXJseV9mcm9tX2xvb3BfaGludCwgbWFjcm8gKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2Zy
XSwgdDAKICAgICBsb2FkcCBDb2RlQmxvY2s6Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4
IDExMjk1NGJiOWI2ZTUwMTM2ODgzYjc0NTZjYjFlODMxOGZiNWE1MTEuLmIxNWQzNTQ4MDE5Yjcy
ZWQxZDY4Mzc3NTNmMzAyNjAyNjBlYTNkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcApAQCAtOTYyLDE2MSArOTYyLDEzNyBAQCBK
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3Byb3BlcnR5X2tleSkKICAg
ICBSRVRVUk4oR0VUX0MoYnl0ZWNvZGUubV9zcmMpLmpzVmFsdWUoKS50b1Byb3BlcnR5S2V5VmFs
dWUoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcikKIHsKICAgICBCRUdJTigpOwotICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRFbnVtZXJhYmxlTGVuZ3RoPigpOwotICAgIEpT
VmFsdWUgZW51bWVyYXRvclZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7
Ci0gICAgaWYgKGVudW1lcmF0b3JWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBS
RVRVUk4oanNOdW1iZXIoMCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRQcm9w
ZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29k
ZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIFJFVFVSTih2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CiAK
LSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKj4oZW51bWVyYXRvclZhbHVlLmFzQ2VsbCgpKTsKKyAgICBKU09i
amVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIENIRUNL
X0VYQ0VQVElPTigpOwogCi0gICAgUkVUVVJOKGpzTnVtYmVyKGVudW1lcmF0b3ItPmluZGV4ZWRM
ZW5ndGgoKSkpOworICAgIFJFVFVSTihwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGdsb2JhbE9iamVj
dCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7Ci0gICAgSlNPYmplY3QqIGJh
c2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmpl
Y3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9m
aWxlLm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+c3RydWN0dXJlKHZtKSk7Ci0gICAgQVNTRVJUKHBy
b3BlcnR5LmlzVUludDMyQXNBbnlJbnQoKSk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5o
YXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eS5hc1VJbnQzMkFzQW55
SW50KCkpKSk7Ci19CisgICAgUmVnaXN0ZXImIG1vZGVSZWdpc3RlciA9IEdFVChieXRlY29kZS5t
X21vZGUpOworICAgIFJlZ2lzdGVyJiBpbmRleFJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1faW5k
ZXgpOworICAgIFJlZ2lzdGVyJiBuYW1lUmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0
eU5hbWUpOwogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVt
ZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0
ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAg
SlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVj
dChnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJv
cGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJFTEVBU0Vf
QVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0Nl
bGwoKSk7Ci0gICAgaWYgKGJhc2UtPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+
Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0j
ZW5kaWYKLSAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1
dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAg
ICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1l
cmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKLX0KKyAgICBhdXRv
IG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KG1vZGVS
ZWdpc3Rlci5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgdWludDMyX3QgaW5kZXggPSBpbmRl
eFJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigpOwogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotewotICAgIEJFR0lO
KCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5
PigpOwotICAgIEpTVmFsdWUgYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgp
OwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVj
b2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS5pc0Nl
bGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pLT5pZCgpID09IGVudW1lcmF0b3It
PmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwot
I2VuZGlmCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0
PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpz
VmFsdWUoKSk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5q
c1ZhbHVlKCk7CisgICAgQVNTRVJUKCFiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSk7Cisg
ICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAg
ICBDSEVDS19FWENFUFRJT04oKTsKKyAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZl
U3RydWN0dXJlSUQoYmFzZS0+c3RydWN0dXJlSUQoKSk7CiAKLSAgICBKU1ZhbHVlIHByb3BlcnR5
ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmco
cHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIo
Z2xvYmFsT2JqZWN0KTsKKyAgICBKU1N0cmluZyogbmFtZSA9IGVudW1lcmF0b3ItPmNvbXB1dGVO
ZXh0KGdsb2JhbE9iamVjdCwgYmFzZSwgaW5kZXgsIG1vZGUpOwogICAgIENIRUNLX0VYQ0VQVElP
TigpOwogCi0gICAgUkVUVVJOKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0
eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFtZSkpKTsKKyAgICBtZXRhZGF0YS5tX2Vu
dW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsKKyAgICBtb2Rl
UmVnaXN0ZXIgPSBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKSk7CisgICAgaW5k
ZXhSZWdpc3RlciA9IGpzTnVtYmVyKGluZGV4KTsKKyAgICBuYW1lUmVnaXN0ZXIgPSBuYW1lID8g
bmFtZSA6IGpzTnVsbCgpOworICAgIEVORCgpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKQogewogICAgIEJFR0lO
KCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7
Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0j
aWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1l
cmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1f
ZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS5pc0NlbGwoKSAm
JiBiYXNlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hl
ZFN0cnVjdHVyZUlEKCkpCi0gICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlm
Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVl
KCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgUkVUVVJO
KGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2Us
IGFzU3RyaW5nKHByb3BlcnR5KSkpKTsKLX0KKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
RW51bWVyYXRvckdldEJ5VmFsPigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFz
VUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KG1vZGUpOworCisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVt
ZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5t
X2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgdW5zaWduZWQgaW5kZXggPSBHRVQoYnl0ZWNv
ZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzSW50MzIoKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICAgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOiB7CisgICAg
ICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxF
RChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4
KSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpO
YW1lZE1vZGU6IHsKKyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkgJiYgYmFzZVZh
bHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVy
ZUlEKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdsbCBvbmx5IG1hdGNoIHRoZSBzdHJ1Y3R1
cmUgSUQgaWYgdGhlIGJhc2UgaXMgYW4gb2JqZWN0LgorICAgICAgICAgICAgICAgIEFTU0VSVChp
bmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSk7CisgICAgICAg
ICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+Z2V0RGlyZWN0
KGluZGV4IDwgZW51bWVyYXRvci0+Y2FjaGVkSW5saW5lQ2FwYWNpdHkoKSA/IGluZGV4IDogaW5k
ZXggLSBlbnVtZXJhdG9yLT5jYWNoZWRJbmxpbmVDYXBhY2l0eSgpICsgZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoKTsKKyAgICAgICAg
ICAgIEZBTExUSFJPVUdIOworICAgICAgICB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5PigpOwotICAg
IEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHBy
b3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQo
cHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHBy
b3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGds
b2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVh
bihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUp
KSk7Ci19CisgICAgICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9k
ZTogeworICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBtb2RlICE9IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlKQorICAgICAgICAgICAgICAgIG1ldGFkYXRh
Lm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZUlEKCkpOworICAgICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdF
VChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICAgICAgICAgIGF1dG8g
cHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAg
ICAgICAgIC8vIFRPRE8gRG9lcyB0aGlzIGFjdHVhbGx5IGV2ZXIgdGhyb3c/IElzbid0IHN0cmlu
ZyBiYWNrZWQgYnkgYSBVVUlEPworICAgICAgICAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAg
ICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHByb3Bl
cnR5TmFtZSkpOworICAgICAgICB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfZ2V0X2RpcmVjdF9wbmFtZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNv
ZGUgPSBwYy0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcHJvcGVydHkg
PSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIEFTU0VSVChwcm9wZXJ0
eS5pc1N0cmluZygpKTsKLSAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkp
OwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBSRVRVUk4oYmFzZVZhbHVlLmdldChn
bG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH07CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotSlNDX0RFRklORV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcikKK0pTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpCiB7
CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0UHJvcGVydHlF
bnVtZXJhdG9yPigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySW5C
eVZhbD4oKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSku
anNWYWx1ZSgpOwotICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0g
c3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUu
bV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9y
TWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CiAKLSAgICBKU09iamVjdCog
YmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQ
VElPTigpOworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2Fz
dDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5q
c1ZhbHVlKCkpOworICAgIGlmIChhdXRvKiBiYXNlID0gYmFzZVZhbHVlLmdldE9iamVjdCgpKSB7
CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2Rl
ICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQo
KSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwogCi0gICAgUkVUVVJOKHBy
b3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7Ci19Ci0KLUpTQ19ERUZJ
TkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUp
Ci17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRv
clN0cnVjdHVyZVBuYW1lPigpOwotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVy
YXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9l
bnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIHVpbnQzMl90IGluZGV4ID0gR0VU
KGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMkFzQW55SW50KCk7CisgICAgICAg
IGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpCisgICAg
ICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3BlcnR5KGdsb2JhbE9iamVjdCwg
R0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpKSkpOworICAgIH0KIAot
ICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBudWxscHRyOwotICAgIGlmIChpbmRleCA8IGVu
dW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSkKLSAgICAgICAgcHJvcGVydHlO
YW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7Ci0gICAgUkVUVVJO
KHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVsbCgpKTsKKyAgICBKU1N0cmluZyog
c3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkp
OworICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFs
T2JqZWN0LCBiYXNlVmFsdWUsIHN0cmluZywgJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlKSkpOwog
fQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29k
ZSA9IHBjLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAg
dWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMy
QXNBbnlJbnQoKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckhhc093
blByb3BlcnR5PigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9i
YXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShj
b2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMyKCkp
OworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KG1vZGUpOwogCi0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IG51bGxwdHI7Ci0gICAg
aWYgKGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSA8PSBpbmRleCAmJiBp
bmRleCA8IGVudW1lcmF0b3ItPmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCkpCi0gICAgICAgIHBy
b3BlcnR5TmFtZSA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOwotICAg
IFJFVFVSTihwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5hbWUgOiBqc051bGwoKSk7Ci19CisgICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7Cisg
ICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAgaWYg
KG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpOYW1lZE1vZGUgJiYgYmFzZS0+c3Ry
dWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAg
ICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBi
eXRlY29kZSA9IHBjLT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgSlNWYWx1ZSBpbmRleFZh
bHVlID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQoaW5kZXhW
YWx1ZS5pc1VJbnQzMkFzQW55SW50KCkpOwotICAgIFJFVFVSTihqc1N0cmluZyh2bSwgSWRlbnRp
Zmllcjo6ZnJvbSh2bSwgaW5kZXhWYWx1ZS5hc1VJbnQzMkFzQW55SW50KCkpLnN0cmluZygpKSk7
CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc093blByb3BlcnR5KGds
b2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigpKSkp
OworICAgIH0KKworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUu
bV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJp
bmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwor
ICAgIFJFVFVSTihqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSkpKTsKIH0KIAogSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVfY2xlYXJfbG9nKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAppbmRleCBkOGQxNTAx
ZmIzNWJhYzI3OTRjNmQ5NDEwMjcxYmI2OGY0Y2MwNTdlLi5hNWUwMTVkNTNhNjllNjA1M2FmNGRi
YjMxYjJjOGYyNTdjMGRiMWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuaApAQCAtMjU0LDE3ICsyNTQsMTEgQEAgSlNDX0RFQ0xBUkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaXNfY29uc3RydWN0b3IpOwogSlNDX0RFQ0xBUkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfc3RyY2F0KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0eV9rZXkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKLUpTQ19ERUNMQVJFX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOwot
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3Ry
dWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFS
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKIEpTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsK
LUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1l
cmF0b3JfZ2VuZXJpY19wbmFtZSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF90b19pbmRleF9zdHJpbmcpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01NT05f
U0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOwogSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfcHJvZmlsZV90eXBlX2NsZWFyX2xvZyk7
CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF91bnJlYWNoYWJsZSk7CiBK
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9lbnZp
cm9ubWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxl
QmFzZWRGdXp6ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxl
QmFzZWRGdXp6ZXJBZ2VudC5jcHAKaW5kZXggZTJjYTE2MmUwYjU0ZTI1Y2YwNjllZWE4Yzg3ZTFl
ZWEyZTRjZDViZS4uMWIwMzEzMGYwYTVjMDdjMzM1Y2M1ODU2ODNiYjY0NWVlNTNlMDhiZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enpl
ckFnZW50LmNwcApAQCAtOTAsNyArOTAsNiBAQCBTcGVjdWxhdGVkVHlwZSBGaWxlQmFzZWRGdXp6
ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbkludGVybmFsKENvZGVCbG9jayogY29kZUJsb2NrLAogICAg
ICAgICBicmVhazsKIAogICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAgY2Fz
ZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfY29uc3RydWN0OgogICAgIGNhc2Ug
b3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdl
bnRCYXNlLmNwcAppbmRleCBmMTM5ZDRhNDQ3YjI3MGY5ZWQzM2Y3ZGZkMzVlMDJhZmZjMzFjNzAz
Li5jMjZjMDAzNzQwMzkwYzdiMzgzNjA3NjBlM2MyMjljMWZkMWI4OGUyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50
QmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBPcGNvZGVJRCBGaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2U6
Om9wY29kZUFsaWFzRm9yTG9va3VwS2V5KGNvbnN0IE9wY29kZUlEJiBvcGNvZAogewogICAgIGlm
IChvcGNvZGVJZCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSWQgPT0gb3BfY2FsbF9ldmFs
IHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJZCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncykKICAgICAgICAgcmV0dXJuIG9wX2NhbGw7Ci0gICAgaWYgKG9wY29kZUlkID09IG9w
X2dldF9kaXJlY3RfcG5hbWUgfHwgb3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMp
CisgICAgaWYgKG9wY29kZUlkID09IG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCB8fG9wY29kZUlk
ID09IG9wX2dldF9ieV92YWxfd2l0aF90aGlzKQogICAgICAgICByZXR1cm4gb3BfZ2V0X2J5X3Zh
bDsKICAgICBpZiAob3Bjb2RlSWQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCiAgICAgICAgIHJl
dHVybiBvcF9jb25zdHJ1Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMjRmY2YwODE1ZTI1MDQ5NWUwMzE3OTRhMDZlNGIzMTA1
Yzc4NGZiNC4uMTVmNWIwNjRlY2JmYzY1OGE5OTBkMmViNTk2MzViZjJiZGJlODg4MiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAt
MTQ2MSw2ICsxNDYxLDEwIEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUg
IyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgIH0pOwog
I2VuZGlmCiAKKyAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihM
aW5rVGltZUNvbnN0YW50OjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpXS5pbml0TGF0ZXIo
W10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgaW5pdC5zZXQo
aW5pdC52bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CisgICAgfSk7CisKICAgICBp
ZiAoT3B0aW9uczo6ZXhwb3NlUHJvZmlsZXJzT25HbG9iYWxPYmplY3QoKSkgewogI2lmIEVOQUJM
RShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIi
KSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgZW5hYmxlU2FtcGxp
bmdQcm9maWxlciksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmli
dXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwCmluZGV4IDIxYzcwYTI3YjY5MWJlMDU2OTBhMmZhZTc3YzY5OTEyYWVlYzExOWQu
LmNmMGE0YTUxMzRmODJkZWU5OWFhYjI1YjY2MzU5OGU1N2RjZTJjOGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLmNwcApAQCAtNDksMTMgKzQ5LDE5IEBAIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAKIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90IG51
bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdyaXRlQmFycmllcjxKU1N0cmluZz4qIHByb3BlcnR5
TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHByb3BlcnR5TmFtZXNTaXplKQogICAgIDogSlNDZWxsKHZt
LCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9wcm9w
ZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5hbWVzQnVmZmVyKQogICAgICwgbV9jYWNoZWRT
dHJ1Y3R1cmVJRChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlkKCkgOiAwKQogICAgICwgbV9pbmRl
eGVkTGVuZ3RoKGluZGV4ZWRMZW5ndGgpCiAgICAgLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXgobnVtYmVyU3RydWN0dXJlUHJvcGVydGllcykKICAgICAsIG1fZW5kR2VuZXJpY1Byb3BlcnR5
SW5kZXgocHJvcGVydHlOYW1lc1NpemUpCiAgICAgLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KHN0
cnVjdHVyZSA/IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSA6IDApCisgICAgLCBtX3Byb3Bl
cnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5TmFtZXNCdWZmZXIpCiB7CisgICAgaWYgKG1faW5k
ZXhlZExlbmd0aCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGU7CisgICAgaWYgKG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkKKyAg
ICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOwor
ICAgIGlmIChtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4IC0gbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4KQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpH
ZW5lcmljTW9kZTsKIH0KIAogdm9pZCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4mJiBpZGVudGlmaWVy
cykKQEAgLTE0OCw0ICsxNTQsNzAgQEAgdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgUHIKICAgICB9CiB9
CiAKK0pTU3RyaW5nKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCYgaW5kZXgs
IE1vZGUmIG1vZGUsIGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZykKK3sKKyAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworCisgICAgQVNTRVJUKGluZGV4ZWRMZW5ndGgoKSB8fCBzaXplT2ZQ
cm9wZXJ0eU5hbWVzKCkpOworCisgICAgaW5kZXgrKzsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAg
ICBjYXNlIEluaXRNb2RlOiB7CisgICAgICAgIG1vZGUgPSBJbmRleGVkTW9kZTsKKyAgICAgICAg
aW5kZXggPSAwOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGU6IHsKKyAgICAgICAgd2hpbGUgKGluZGV4
IDwgaW5kZXhlZExlbmd0aCgpICYmICFiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBpbmRleCkpIHsKKyAgICAgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IG51bGxwdHIpOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29w
ZS5hc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgICAgIGlmIChpbmRleCA8IGluZGV4ZWRMZW5n
dGgoKSkKKyAgICAgICAgICAgIHJldHVybiBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5n
ID8ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSkgOiBu
dWxscHRyOworCisgICAgICAgIGlmICghc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgbW9kZSA9IE5hbWVkTW9kZTsKKyAgICAgICAg
aW5kZXggPSAwOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TmFtZWRNb2RlOgorICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpHZW5lcmljTW9kZTogeworICAgICAgICBKU1N0cmluZyogbmFtZSA9IG51bGxw
dHI7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gc2l6
ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
bmFtZSA9IHByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFuYW1l
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGluZGV4IDwgZW5kU3Ry
dWN0dXJlUHJvcGVydHlJbmRleCgpICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gY2FjaGVkU3Ry
dWN0dXJlSUQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGF1dG8gaWQg
PSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lLT52YWx1ZShnbG9iYWxPYmplY3QpKTsK
KyAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBpZiAo
YmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaWQpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVs
bHB0cik7CisgICAgICAgICAgICBuYW1lID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGluZGV4Kys7
CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgICAg
ICBpZiAoaW5kZXggPj0gZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYmIGluZGV4IDwgc2l6
ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgbW9kZSA9IEdlbmVyaWNNb2RlOworICAg
ICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCmluZGV4IDAyMDEx
ZDQxYzdmNjZkYWQ4ODNhZThkNzcwYjVkM2QyODZjZDUwODcuLmEwMDliYjI5MDFiNGFhMTcwZDcz
OGE1OTg2MGEwOWExNTZkMjA0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCkBAIC0yOCw3ICsyOCw3IEBA
CiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IlByb3BlcnR5TmFtZUFycmF5LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlQ2hhaW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM3LDYgKzM3LDE3IEBA
IHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAgIHN0YXRpYyBjb25zdGV4cHIg
dW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVy
ZUlzSW1tb3J0YWw7CiAKKyAgICBlbnVtIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgSW5pdE1v
ZGUgPSAwLAorICAgICAgICBJbmRleGVkTW9kZSA9IDEgPDwgMCwKKyAgICAgICAgTmFtZWRNb2Rl
ID0gMSA8PCAxLAorICAgICAgICBHZW5lcmljTW9kZSA9IDEgPDwgMiwKKyAgICAgICAgLy8gUHJv
ZmlsaW5nIE9ubHkKKyAgICAgICAgSGFzU2Vlbk5hbWVkTW9kZVN0cnVjdHVyZU1pc21hdGNoID0g
MSA8PCAzLAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgZW51bWVyYXRp
b25Nb2RlTWFzayA9IChHZW5lcmljTW9kZSA8PCAxKSAtIDE7CisKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDZWxsVHlwZSwgU3Vic3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3Bh
Y2UqIHN1YnNwYWNlRm9yKFZNJiB2bSkKICAgICB7CkBAIC03NCwxNiArODUsMjAgQEAgcHVibGlj
OgogICAgIHVpbnQzMl90IGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsgfQogICAgIHVpbnQzMl90IGNhY2hlZElubGluZUNh
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsgfQogICAgIHVp
bnQzMl90IHNpemVPZlByb3BlcnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBlbmRHZW5lcmljUHJv
cGVydHlJbmRleCgpOyB9CisgICAgdWludDMyX3QgbW9kZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZVNldDsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkU3RydWN0dXJlSURPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2Nh
Y2hlZFN0cnVjdHVyZUlEKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhlZExlbmd0aE9m
ZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Is
IG1faW5kZXhlZExlbmd0aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGVuZFN0cnVjdHVyZVBy
b3BlcnR5SW5kZXhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBlbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fZW5kR2VuZXJpY1Byb3BlcnR5
SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1f
Y2FjaGVkSW5saW5lQ2FwYWNpdHkpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBtb2RlU2V0T2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwg
bV9tb2RlU2V0KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkUHJvcGVydHlOYW1lc1Zl
Y3Rvck9mZnNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKKyAgICBKU1N0
cmluZyogY29tcHV0ZU5leHQoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSwgdWludDMy
X3QmIGN1cnJlbnRJbmRleCwgTW9kZSYsIGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0
cmluZyA9IHRydWUpOworCiAgICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToK
QEAgLTkyLDEzICsxMDcsMTQgQEAgcHJpdmF0ZToKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IoVk0mLCBTdHJ1Y3R1cmUqLCB1aW50MzJfdCwgdWludDMyX3QsIFdyaXRlQmFycmllcjxKU1N0
cmluZz4qLCB1bnNpZ25lZCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxQ
cm9wZXJ0eU5hbWVBcnJheURhdGE+JiYpOwogCi0gICAgQXV4aWxpYXJ5QmFycmllcjxXcml0ZUJh
cnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9wZXJ0eU5hbWVzOwotICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVDaGFpbjsKICAgICBTdHJ1Y3R1cmVJRCBtX2NhY2hlZFN0
cnVjdHVyZUlEOwogICAgIHVpbnQzMl90IG1faW5kZXhlZExlbmd0aDsKICAgICB1aW50MzJfdCBt
X2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXg7CiAgICAgdWludDMyX3QgbV9lbmRHZW5lcmljUHJv
cGVydHlJbmRleDsKICAgICB1aW50MzJfdCBtX2NhY2hlZElubGluZUNhcGFjaXR5OworICAgIHVp
bnQzMl90IG1fbW9kZVNldCB7IDAgfTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFycmll
cjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5TmFtZXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZUNoYWluPiBtX3Byb3RvdHlwZUNoYWluOwogfTsKIAogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVy
dHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCB1
aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQp
OwpAQCAtMTM0LDcgKzE1MCwxMCBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBw
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBu
dW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzID0gMDsKICAgICB9CiAKLSAgICBlbnVtZXJhdG9yID0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZUFmdGVyR2V0dGlu
Z1Byb3BlcnR5TmFtZXMsIGluZGV4ZWRMZW5ndGgsIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMs
IFdURk1vdmUocHJvcGVydHlOYW1lcykpOworICAgIGlmICghaW5kZXhlZExlbmd0aCAmJiAhcHJv
cGVydHlOYW1lcy5zaXplKCkpCisgICAgICAgIGVudW1lcmF0b3IgPSB2bS5lbXB0eVByb3BlcnR5
TmFtZUVudW1lcmF0b3IoKTsKKyAgICBlbHNlCisgICAgICAgIGVudW1lcmF0b3IgPSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVy
dHlOYW1lcywgaW5kZXhlZExlbmd0aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92
ZShwcm9wZXJ0eU5hbWVzKSk7CiAgICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmIHN1Y2Nlc3NmdWxs
eU5vcm1hbGl6ZWRDaGFpbiAmJiBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzID09
IHN0cnVjdHVyZSkgewogICAgICAgICBlbnVtZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFp
bih2bSwgc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihnbG9iYWxPYmplY3QsIGJhc2UpKTsKICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtKSkK
QEAgLTE0Myw0ICsxNjIsNiBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBl
bnVtZXJhdG9yOwogfQogCit1c2luZyBFbnVtZXJhdG9yTWV0YWRhdGEgPSBzdGQ6OnVuZGVybHlp
bmdfdHlwZV90PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT47CisKIH0gLy8gbmFtZXNw
YWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGlj
dGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAKaW5kZXggY2RjZmE5
OWQ0OWE2OTE3NDAxZDY4MzE2OGJhMTlhYmRlYmFlOWE0ZC4uYzdhOGUzMWY3ZTQ3YmQ2OTExZmU0
YWM0NWZkZjc3ZDY4Mzk2NDEwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQu
Y3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTUyLDcgKzUyLDcgQEAgU3BlY3VsYXRlZFR5cGUgUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1
enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwoQ29kZUJsb2MKICAgICBjYXNlIG9wX2dl
dF9ieV9pZDoKICAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CiAgICAgY2FzZSBvcF9n
ZXRfYnlfdmFsX3dpdGhfdGhpczoKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAg
Y2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAg
ICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGw6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>434857</attachid>
            <date>2021-08-03 12:55:00 -0700</date>
            <delta_ts>2021-08-05 10:27:21 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-227989-20210803155459.patch</filename>
            <type>text/plain</type>
            <size>404287</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
MzhmM2NjZmJlODM1ZmZjOGQ2ZThhZjU0ZGNkYTQzNzc0N2FmYjJkLi42OTBkMWI2NDg3YzdlYzk5
OTdiZmJhNzg5ZmEzNThlNWI5YTE3NWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OTkgQEAKKzIwMjEtMDgtMDMgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29t
bW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uOjpvcjgpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhh
c093blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
TmV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhh
c093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJ
blNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUp
OgorICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmZpbmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJl
Rm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0
OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpm
aW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1Zh
bGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6
ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6
Rm9ySW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5D
b250ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1
Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0
cnVjdHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blBy
b3BlcnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6
OkluZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9y
SW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRG
b3JJbkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9u
Q2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1p
dEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAg
KiBkZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAg
ICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToK
KyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0Mp
OgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNl
dEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlclJh
bmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNwcDoK
KyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hl
YXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hpbGQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoK
KyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlND
X0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgor
ICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxv
d2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29w
ZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9w
ZXJ0eSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1Zh
bHVlT3BlcmFuZDo6cmVncyk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6Omdw
cik6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OlN0b3JhZ2VPcGVyYW5kKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6flN0b3JhZ2VPcGVyYW5kKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdG9yYWdlT3BlcmFuZDo6ZW1wbGFjZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRl
bnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAg
ICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBp
bGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVx
KToKKyAgICAgICAgKiBnZW5lcmF0b3IvRFNMLnJiOgorICAgICAgICAqIGludGVycHJldGVyL1Jl
Z2lzdGVyLmg6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OlJlZ2lzdGVyOjpvcGVyYXRvcj0pOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhl
bHBlcnMuaDoKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKToKKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oOgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJYODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpy
c2hpZnQ2NCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVj
b2RlL0J5dGVjb2RlTGlzdC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5j
cHA6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAg
ICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAg
ICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093
blByb3BlcnR5SW5Gb3JJbkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEluQnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5
VmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093
blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNj
b3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgor
ICAgICAgICAoSlNDOjpyZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRl
eHQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0
dXJlUHJvcGVydHlJbkZvckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3RydWN0dXJlRm9y
SW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0Ojpm
aW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5k
U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1ZhbGlk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRlKToKKyAgICAg
ICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvcklu
Q29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6ZW51
bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9kZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNOdWxsKToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojp0eXBlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250
ZXh0Ojppc0luZGV4ZWRGb3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpGb3JJbkNvbnRleHQ6OmlzU3RydWN0dXJlRm9ySW5Db250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc0luZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzU3RydWN0dXJlRm9ySW5Db250ZXh0
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNv
bnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUZvckluQ29udGV4dDo6ZW51bWVyYXRvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6YmFzZVZhcmlhYmxlIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjphZGRJbkluc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmFkZEhhc093blByb3Bl
cnR5SnVtcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6Oklu
ZGV4ZWRGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9O
b2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmlzU2FuZUNoYWluIGNvbnN0KToKKyAgICAgICAgKiBk
ZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGQVBoYXNlOjppbmplY3RPU1IpOgorICAgICAgICAqIGRmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAgICAgICog
ZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OnNldEpT
QXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdl
clJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0LmNw
cDoKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNTdG9yYWdlQ2hp
bGQgY29uc3QpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnN0b3JhZ2VDaGlsZEluZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNBcnJheU1vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6Omhhc0VudW1lcmF0b3JNZXRhZGF0YSBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6ZW51bWVyYXRvck1ldGFkYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUu
aDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5o
OgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAg
ICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNT
QUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVj
dXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1Rl
bXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9h
dFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25T
Y29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Q
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVP
cGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdl
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6On5TdG9yYWdlT3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVyYXRvciBib29sKToKKyAg
ICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1
Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVO
b2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5
VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVT
dHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6
CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6
CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAqIGppdC9KSVQuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVy
dHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0
eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMu
Y3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAg
ICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6CisgICAgICAgIChKU0M6
OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dCk6CisgICAg
ICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6
cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJBUk02NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTY0OjpvcjgpOgor
ICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6b3I4KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZf
NjQ6OnJzaGlmdDY0KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6Om9yOCk6
IERlbGV0ZWQuCisgICAgICAgICogYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmg6CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlVXNl
RGVmLmNwcDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbCk6
CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaDoKKyAg
ICAgICAgKiBieXRlY29kZS9PcGNvZGUuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3Jk
SGFzT3duUHJvcGVydHlJbkZvckluTG9vcCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0SW5CeVZhbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0
b3JOZXh0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEZv
ckluU2NvcGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wRm9ySW5TY29w
ZSk6CisgICAgICAgIChKU0M6OnJld3JpdGVPcCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZmluZEZvcklu
Q29udGV4dCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3Bl
cnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNF
bnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0
b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JHZW5lcmljUHJvcGVydHlOYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5T
Y29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BJbmRl
eGVkRm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjpwdXNoU3RydWN0dXJlRm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRTdHJ1Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxl
dGVkLgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAg
ICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzVmFsaWQgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJ
bkNvbnRleHQ6OmludmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmxvY2Fs
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpwcm9wZXJ0eU5hbWUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OnByb3BlcnR5T2Zmc2V0IGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjplbnVtZXJhdG9yIGNvbnN0KToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Db250ZXh0Ojptb2RlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
OjpGb3JJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmJvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJc051bGwpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OnR5cGUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzSW5kZXhlZEZvckluQ29udGV4dCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6
OmFzSW5kZXhlZEZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29u
dGV4dDo6YXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6aW5kZXggY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnByb3BlcnR5IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjplbnVtZXJhdG9y
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0Ojpi
YXNlVmFyaWFibGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQ6OmFkZEluSW5zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZUZvckluQ29udGV4dDo6YWRkSGFzT3duUHJvcGVydHlKdW1wKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6YWRkR2V0SW5zdCk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChK
U0M6Okhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAg
ICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNT
YW5lQ2hhaW4gY29uc3QpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlOjpw
cm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9E
RkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OmluamVjdE9TUik6
CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAg
ICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAg
IChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUpOgor
ICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Omhhc1N0b3JhZ2VDaGlsZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6c3RvcmFnZUNoaWxkSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0FycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzRW51bWVyYXRvck1ldGFk
YXRhIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjplbnVtZXJhdG9yTWV0YWRhdGEp
OgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBTG93ZXJpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBTG93ZXJpbmdQaGFzZTo6aGFuZGxlTm9kZSk6
CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpz
YWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFy
eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRB
cnJheUxvYWRSZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3ltYm9sKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1l
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVt
ZXJhdG9ySGFzUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlRW51bWVyYXRvckluQnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1l
cmFibGVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVUb0luZGV4U3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRFbnVtZXJhdG9yUG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0RGlyZWN0UG5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjph
bGxvY2F0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAg
ICAgICAoSlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6
OlN0b3JhZ2VPcGVyYW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Rv
cmFnZU9wZXJhbmQ6On5TdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFn
ZU9wZXJhbmQ6OmVtcGxhY2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9y
YXJ5OjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6
OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgor
ICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxv
d2VyREZHVG9CMzo6Y29tcGlsZUdldEJ5VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChK
U0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAg
ICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFkZElu
Y29taW5nVG9QaGlJZlNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAgICAg
KiBpbnRlcnByZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVy
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6b3BlcmF0b3I9KToKKyAgICAgICAg
KiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAg
KiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVy
YWJsZV9pbmRleGVkX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2dldF9kaXJlY3RfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTogRGVsZXRlZC4KKyAgICAgICAg
KiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNf
c3RydWN0dXJlX3Byb3BlcnR5SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19l
bnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2Vu
ZXJhdGVHZXRCeVZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29w
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX2luX2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2hhc19vd25fcHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAg
ICogcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5F
X0NPTU1PTl9TTE9XX1BBVEgpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6
CisgICAgICAgICogcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHA6CisgICAgICAgIChK
U0M6OkZpbGVCYXNlZEZ1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwpOgorICAgICAg
ICAqIHJ1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
RmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlOjpvcGNvZGVBbGlhc0Zvckxvb2t1cEtleSk6CisgICAg
ICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFs
T2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Ojpjb21wdXRlTmV4dCk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaDoKKyAgICAgICAgKEpTQzo6cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICog
cnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwOgorICAgICAgICAo
SlNDOjpQcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRl
cm5hbCk6CisKIDIwMjEtMDctMzAgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4K
IAogICAgICAgICBbSlNDXSBVc2UgVUNQVVJlZ2lzdGVyIGFyZ3VtZW50IHRvIHJlbW92ZSB6ZXJv
IGV4dGVuc2lvbiBpbiBKSVQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRleCAyOTZlODhmOWI1NDYyYzRhZjdk
MWY0NzQwZGM4MmJiYWViNTZmMDQwLi4wYzUxYzg5ZTU4Yjc0ODNiNWQ4YWEyM2M2YWFkNzQ1MzM3
MGVjMzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtOTc0LDYgKzk3NCwxMyBAQCBwdWJsaWM6CiAgICAgICAg
IHN0b3JlMzIoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBv
cjgoUmVnaXN0ZXJJRCBzcmMsIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbG9hZDgoYWRkcmVzcy5tX3B0ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52
YWxpZGF0ZSgpKTsKKyAgICAgICAgb3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1w
UmVnaXN0ZXIpOworICAgICAgICBzdG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0
cik7CisgICAgfQorCiAgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRy
ZXNzIGFkZHJlc3MpCiAgICAgewogICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0g
PSBMb2dpY2FsSW1tZWRpYXRlOjpjcmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9u
LmgKaW5kZXggNTRkNDU2N2Q0YzFjNDVkZmUwYzMyOGNhN2JjZGI4NGU5ZWIyZjk3Ni4uNjAyYzBl
YzlhYTJiM2I2YzdkNmVlMDI5ZjA3NTgyNDJlZjBlYjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApA
QCAtNjI1LDYgKzYyNSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShz
cmMsIGRlc3Qub2Zmc2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAg
IH0KIAorICAgIHZvaWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3Rl
cigpKSk7CisgICAgfQorCiAgICAgdm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJh
c2UsIGRlc3QpOwpAQCAtNjY1LDYgKzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1i
bGVyLm9yYl9pbShzdGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZz
ZXQsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQog
CisgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0
Y2hSZWdpc3RlcigpKTsKKyAgICAgICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIo
KSkpOworICAgIH0KKwogICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBv
cDIsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCmluZGV4IDk0MzdmZDNiZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYz
MzU2NTJmYzU0NDlmYzlhNTU5ZWNhNmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAg
LTk3LDEyICs5Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRj
aFJlZ2lzdGVyKCkpKTsKICAgICB9CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBB
YnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBB
ZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVz
dGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAt
NTg3LDYgKzU4MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJz
aGlmdDY0KFJlZ2lzdGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwg
ZGVzdCk7CisgICAgfQorCiAgICAgdm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1f
dmFsdWUsIGRlc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5z
L0J1aWx0aW5OYW1lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5O
YW1lcy5oCmluZGV4IGIwMmU1NjAyMTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRj
YWYwYmE2Y2EzMThmMTgwMjkyY2JhOGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAg
bWFjcm8oY3JlYXRlUHJpdmF0ZVN5bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBt
YWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlv
bkNvdW50cykgXAorICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBu
YW1lc3BhY2UgU3ltYm9scyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlTGlzdC5yYgppbmRleCAxODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2
NDljLi5iNmQ4MzQ5NTIzNTczYWQxMmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5
LDcgQEAgdHlwZXMgWwogICAgIDpEZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6
RXJyb3JUeXBlV2l0aEV4dGVuc2lvbiwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpH
ZXRCeUlkTW9kZSwKICAgICA6R2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0
b3J5LApAQCAtMTE1NCw4OSArMTE1NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAg
ICAgICAgIGJhc2ljQmxvY2tMb2NhdGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQog
Ci1vcCA6Z2V0X2VudW1lcmFibGVfbGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9y
LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJh
c2U6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVk
X3Byb3BlcnR5LAorb3AgOmVudW1lcmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRz
dDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6
IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVh
bFJlZ2lzdGVyLCAjIFdpbGwgYWx3YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpT
Rm9ySW5Nb2RlLgorICAgICAgICBpbmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQg
dG8gemVybyBldmVyeSB0aW1lIG1vZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBi
YXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIs
CisgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFk
YXRhOiB7CiAgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVt
ZXJhdG9yTWV0YWRhdGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51
bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBw
cm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCi0gICAgfQotCi1vcCA6aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJn
czogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVh
bFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBl
bnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3By
b3BlcnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAg
ICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3Ag
Omhhc19lbnVtZXJhYmxlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJv
cGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAor
b3AgOmVudW1lcmF0b3JfZ2V0X2J5X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmly
dHVhbFJlZ2lzdGVyLAogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHBy
b3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwK
KyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBW
aXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAg
ICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAg
ICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRh
ZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVt
ZXJhdG9yLAorb3AgOmVudW1lcmF0b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAg
ZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAg
ICB9Ci0KLW9wIDplbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAg
ICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVn
aXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlO
YW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0g
ICAgfQotCi1vcCA6ZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAg
ICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdp
c3RlciwKLSAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFk
YXRhOiB7CisgICAgICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVt
ZXJhdG9yTWV0YWRhdGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRl
eF9zdHJpbmcsCitvcCA6ZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsK
ICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdp
c3RlciwKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5h
bWU6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6
IHsKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0
b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VE
ZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNw
cAppbmRleCAwNzU2MTg5OWE2MjA5ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJl
NzE1MWIxZWQ1ODlhOTZkOTQ4NTc1MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkg
QEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBz
Y29wZVJlZ2lzdGVyLCBjb25zdCBJbnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50
KQogICAgIFVTRVMoT3BHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdl
dEVudW1lcmFibGVMZW5ndGgsIGJhc2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQog
ICAgIFVTRVMoT3BOZXdHZW5lcmF0b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5
bmNGdW5jRXhwLCBzY29wZSkKLSAgICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAg
VVNFUyhPcENyZWF0ZUxleGljYWxFbnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0
aWFsVmFsdWUpCiAgICAgVVNFUyhPcENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNj
b3BlLCBzeW1ib2xUYWJsZSwgaW5pdGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUs
IHNjb3BlKQpAQCAtMjIxLDExICsyMTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJ
bmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAg
IFVTRVMoT3BHZXRGcm9tQXJndW1lbnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5
QnVmZmVyLCBpbW11dGFibGVCdXR0ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhP
cEhhc0VudW1lcmFibGVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1l
cmF0b3JHZW5lcmljUG5hbWUsIGVudW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZh
bCwgYmFzZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9w
ZXJ0eSkKICAgICBVU0VTKE9wUHV0UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkK
QEAgLTI2NSw4ICsyNTgsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwo
VmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhP
cEdldEJ5VmFsV2l0aFRoaXMsIGJhc2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhP
cEluc3RhbmNlb2ZDdXN0b20sIHZhbHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkK
LSAgICBVU0VTKE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVt
ZXJhdG9yKQotICAgIFVTRVMoT3BJblN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwg
ZW51bWVyYXRvcikKIAogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8g
Ynl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsy
NzUsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgVVNFUyhPcEdldERpcmVjdFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1l
cmF0b3IpCi0KICAgICBVU0VTKE9wU3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhP
cFN3aXRjaENoYXIsIHNjcnV0aW5lZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUp
CkBAIC0yOTUsNiArMjg0LDExIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1w
bChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VT
KE9wWWllbGQsIGFyZ3VtZW50KQogCisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBp
bmRleCwgYmFzZSwgZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBi
YXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BF
bnVtZXJhdG9ySW5CeVZhbCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVy
YXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBw
cm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9v
cGVuOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRv
ck9wZW4+KCk7CiAgICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVy
YXRvck9wZW46OnN5bWJvbENhbGwsIGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2Rl
Lm1faXRlcmFibGUpOwpAQCAtNDI0LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0
ZWNvZGVJbmRleEltcGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dQogICAgICAgICByZXR1cm47CiAgICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGlu
YXRpb24gZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwg
ZHN0KQotICAgIERFRlMoT3BUb0luZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1l
cmFibGVMZW5ndGgsIGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eSwgZHN0KQotICAgIERFRlMoT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkK
LSAgICBERUZTKE9wSGFzRW51bWVyYWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093
blN0cnVjdHVyZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHks
IGRzdCkKLSAgICBERUZTKE9wR2V0RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJv
cGVydHlFbnVtZXJhdG9yLCBkc3QpCi0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFt
ZSwgZHN0KQotICAgIERFRlMoT3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVG
UyhPcEdldFBhcmVudFNjb3BlLCBkc3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkK
ICAgICBERUZTKE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUx
LDExIEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1W
YXJzLCBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2Vw
dGlvbiwgdGhyb3duVmFsdWUpCiAKKyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5
TmFtZSwgbW9kZSwgaW5kZXgpCisgICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQor
ICAgIERFRlMoT3BFbnVtZXJhdG9ySW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHksIGRzdCkKKwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAg
ICAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZj
ZmEyOTJhZDA0ZWYxMDYwNTI1ZTM3ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0
ODk4Y2ZjZjYxODljNmU5NGQyMGU1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCkBAIC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQo
KTsKICAgICAgICAgbV9ieXRlY29kZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAg
ICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHkpCi0KICAgICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQog
ICAgICAgICBMSU5LKE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9w
VGFpbENhbGxGb3J3YXJkQXJndW1lbnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJv
b2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93
bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkK
ICAgICAgICAgTElOSyhPcEdldFByaXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTkso
T3BHZXREaXJlY3RQbmFtZSwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhp
cywgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAg
IExJTksoT3BHZXRCeUlkRGlyZWN0LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29s
IENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGluawogCiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQog
CisgICAgICAgIExJTksoT3BFbnVtZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhP
cEVudW1lcmF0b3JJbkJ5VmFsLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhh
c093blByb3BlcnR5LCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFs
LCBwcm9maWxlKQorCiAgICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5L
KE9wVGFpbENhbGwsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0
YW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5o
CmluZGV4IGVlNDA5ODhhODYxZGIxNWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgy
MGU0NWZhNDlkYzkyZmM0NTY3YWFmNDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBA
IGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAg
ICAgdihoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2
YXRlU3ltYm9sLCBudWxscHRyKSBcCisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3Is
IG51bGxwdHIpIFwKIAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUs
IGNvZGUpIG5hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
T3Bjb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXgg
NDg2YzE1MTJhOTg0MzBhMWQzMjRiNjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4
M2Y1MDE3MmI5NWUyYTk2ZDY4ZDBkMWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9PcGNvZGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHBy
KG0KICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9w
Q29uc3RydWN0VmFyYXJncykgXAogICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhP
cEdldERpcmVjdFBuYW1lKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAg
ICBtYWNybyhPcEdldEJ5SWQpIFwKICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAg
IG1hY3JvKE9wVHJ5R2V0QnlJZCkgXApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENv
bnN0ZXhwcihtCiAgICAgbWFjcm8oT3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9F
QUNIX09QQ09ERV9XSVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAg
ICAgbWFjcm8oT3BUYWlsQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2Fy
ZEFyZ3VtZW50cykgXApAQCAtMTM2LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2ln
bmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIo
bQogICAgIG1hY3JvKE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBt
YWNybyhPcFB1dEJ5VmFsRGlyZWN0KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAor
ICAgIG1hY3JvKE9wRW51bWVyYXRvckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9y
SW5CeVZhbCkgXAorICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNk
ZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3Jv
KSBcCiAgICAgbWFjcm8oT3BOZXdBcnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUy
YzRhZTFhYTFjM2UyMjZjOTUyMmY3YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNl
ZGU0YTdhOTUzZWJkYmQ0YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywx
MSBAQCB1bnNpZ25lZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlv
bkhhc093blByb3BlcnR5KFJlZ2lzdGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9u
Lm9mZnNldCgpOwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eUluRm9ySW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJl
Q29udGV4dCwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvcklu
Q29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1Bh
dGgpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBS
RUxFQVNFX0FTU0VSVCghZ2VuZXJpY1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNv
bnRleHQuYWRkSGFzT3duUHJvcGVydHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9j
YXRpb24oKSk7CisgICAgY29udGV4dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0
LCBnZW5lcmljUGF0aC5sb2NhdGlvbigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6
aGFzQ29uc3RhbnQoY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsy
NTgxLDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9j
YWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICgh
Y29udGV4dC5pc1N0cnVjdHVyZUZvckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4
dC5hc1N0cnVjdHVyZUZvckluQ29udGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVy
dHk6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBz
dHJ1Y3R1cmVDb250ZXh0LmVudW1lcmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQu
YWRkSW5JbnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7
CisgICAgICAgIE9wRW51bWVyYXRvckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0
aGlzLCBkc3QsIGJhc2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0
eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5J
bnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAg
ICAgIHJldHVybiBkc3Q7CiAgICAgfQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIGJhc2UsIFIKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZv
ckluQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRl
eHQuYXNJbmRleGVkRm9ySW5Db250ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAg
ICAgICAgICBpZiAoT3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXpl
OjpOYXJyb3c+KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9w
R2V0QnlWYWw6OmVtaXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFy
cm93Pih0aGlzLCBkc3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoT3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXpl
OjpXaWRlMTY+KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9w
R2V0QnlWYWw6OmVtaXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lk
ZTE2Pih0aGlzLCBkc3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lk
ZTMyPih0aGlzLCBkc3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAg
ICAgaW5kZXhlZENvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwg
cHJvcGVydHktPmluZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIFdlIGNhbm5vdCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2lu
Y2UgT3BHZXREaXJlY3RQbmFtZSA9PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlm
ZmVyZW50IG1ldGFkYXRhIElEIGFsbG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29u
dGV4dCYgc3RydWN0dXJlQ29udGV4dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQo
KTsKLSAgICAgICAgT3BHZXREaXJlY3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRo
aXMsIGtpbGwoZHN0KSwgYmFzZSwgcHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwg
c3RydWN0dXJlQ29udGV4dC5lbnVtZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRl
eHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4
KCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUg
cmV3cml0ZXIgdGhhdCBjYW4gcmVzaXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0
QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNv
bnRleHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0
LmVudW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVj
dGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0Owog
ICAgIH0KIApAQCAtNDU1MiwzMyArNDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEdldEdsb2JhbFByaXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAog
ICAgIHJldHVybiBlbWl0R2V0RnJvbVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJ
Zk5vdEZvdW5kKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRF
bnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAg
ICBPcEdldEVudW1lcmFibGVMZW5ndGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1
cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1l
cmFibGVJbmRleGVkUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBS
ZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFBy
b3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4g
ZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNl
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVy
ZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9y
KTsKLSAgICByZXR1cm4gZHN0OworICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJv
cGVydHlOYW1lLCBtb2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdp
c3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVt
ZXJhdG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwg
YmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3Rl
cklEKiBlbnVtZXJhdG9yKQotewotICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQo
dGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVy
YXRvckhhc093blByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlO
YW1lLCBpbmRleCwgZW51bWVyYXRvcik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwy
NCArNDU1MCw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVy
dHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0K
IAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJl
UHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVn
aXN0ZXJJRCogaW5kZXgpCi17Ci0gICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQo
dGhpcywgZHN0LCBlbnVtZXJhdG9yLCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5
TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQq
IGluZGV4KQotewotICAgIE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3Qs
IGVudW1lcmF0b3IsIGluZGV4KTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBpbmRleCkKLXsKLSAgICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBp
bmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRJc0NlbGxXaXRoVHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywg
SlNUeXBlIHR5cGUpCiB7CiAgICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNy
YywgdHlwZSk7CkBAIC00NjQ4LDIzICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAg
IHJldHVybiBkc3Q7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9y
SW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lz
dGVyKQotewotICAgIGlmICghbG9jYWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVu
c2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwot
ICAgIG1fZm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvcklu
Q29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9m
ZnNldCkpKTsKLX0KLQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2Nv
cGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIp
Ci0gICAgICAgIHJldHVybjsKLSAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBp
bnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFz
SW5kZXhlZEZvckluQ29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwg
Ym9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxh
c3QoKTsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dG
dW5jdGlvbkxleGljYWxFbnZpcm9ubWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQog
ewogICAgIEFTU0VSVChtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxv
Y2stPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25z
dHJ1Y3RvcktpbmQ6OkV4dGVuZHMgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVC
bG9jay0+cGFyc2VNb2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6
ZXJNb2RlKTsKQEAgLTQ3NjgsMjAgKzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFB1dFRoaXNUb0Fycm93RnVuY3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCog
bG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJv
cGVydHlSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlv
bmFsPFZhcmlhYmxlPiBiYXNlVmFyaWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNo
Rm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0
eU5hbWVSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6
b3B0aW9uYWw8VmFyaWFibGU+IGJhc2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0
ZXIpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dCA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVu
ZChhZG9wdFJlZigqbmV3IFN0cnVjdHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRl
eFJlZ2lzdGVyLCBwcm9wZXJ0eVJlZ2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJp
YWJsZSwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFj
ay5hcHBlbmQoYWRvcHRSZWYoKm5ldyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVy
dHlOYW1lUmVnaXN0ZXIsIHByb3BlcnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3Rl
ciwgbW9kZVJlZ2lzdGVyLCBiYXNlVmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkp
OwogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJl
Z2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJ
blNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lz
dGVyKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0
ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgp
LT5hc1N0cnVjdHVyZUZvckluQ29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5n
ZXQoKSwgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxh
c3QoKS0+ZmluYWxpemUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRP
ZmZzZXQpOwogICAgIG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01
Mzg0LDM0ICs1MzExLDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hl
Y2soUmVnaXN0ZXJJRCogc3JjKQogICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9y
TnVsbChuZXdUZW1wb3JhcnkoKSwgc3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFz
dCgpLmdldCgpKTsKIH0KIAotdm9pZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ss
IHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52
YWxpZGF0aW5nIEZvckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25s
eSBvY2N1cnMgaWYKLSAgICAvLyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlz
IHRydWU6Ci0gICAgLy8KLSAgICAvLyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlz
IHJlLWFzc2lnbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhl
IGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3Bl
IG9mIHRoZSBmdW5jdGlvbi4KLSAgICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9j
Y3VyIHN1ZmZpY2llbnRseSByYXJlbHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUg
b2YKLSAgICAvLyAiYW5hbHlzaXMiIHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlk
bid0IHdhbnQgdG8gZG8gdGhpcywgd2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJm
b3JtIHNvbWUgZmxvdy1zZW5zaXRpdmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3Ag
aXRlcmF0aW9uIHZhcmlhYmxlIHdhcwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0
byByZXNvcnQgdG8gcnVudGltZSBjaGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVl
bgotICAgIC8vIHJlYXNzaWduZWQgZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3Ig
KHVuc2lnbmVkIG9mZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAm
JiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1
Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNT
RVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2lu
dCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2tw
b2ludC0tOykgewotICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVy
IG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVy
KCkgPT0gb3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAg
ICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXpl
KCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBU
dXBsZVR5cGU+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5
cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0
ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAg
dW5zaWduZWQgaW5zdEluZGV4ID0gc3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQg
KzUzMzEsNTIgQEAgQUxXQVlTX0lOTElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBUdXBsZVR5cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlz
IHRoZSBzYW1lLgogICAgIC8vIDMuIHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdp
bmFsIHByb3BlcnR5LgogCi0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBl
LCBPcEdldERpcmVjdFBuYW1lPjo6dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoT3BHZXRCeVZhbCkgPD0gc2l6ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BH
ZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7
Ci0gICAgfSBlbHNlIGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0
cnVjdHVyZVByb3BlcnR5Pjo6dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
T3BJbkJ5VmFsKSA8PSBzaXplb2YoT3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9w
SW5CeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1f
ZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7
Ci0gICAgfSBlbHNlCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
c3RhdGljX2Fzc2VydChzaXplb2YoTmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7Cisg
ICAgTmV3T3BUeXBlOjplbWl0KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5t
X2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBu
b3Agb3V0IHRoZSByZW1haW5pbmcgYnl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVy
LnBvc2l0aW9uKCkgPCBlbmQpCiAgICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJv
dz4oJmdlbmVyYXRvcik7CiB9CiAKLXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6
ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRv
ciogY29kZUJsb2NrLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvcklu
Q29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zm
c2V0KQogewotICAgIEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0
ZWNvZGVFbmRPZmZzZXQpOwotICAgIGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGlu
dmFsaWRhdGluZyBGb3JJbkNvbnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9u
bHkgb2NjdXJzIGlmCisgICAgLy8gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBp
cyB0cnVlOgorICAgIC8vCisgICAgLy8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBp
cyByZS1hc3NpZ25lZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRo
ZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29w
ZSBvZiB0aGUgZnVuY3Rpb24uCisgICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBv
Y2N1ciBzdWZmaWNpZW50bHkgcmFyZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxl
IG9mCisgICAgLy8gImFuYWx5c2lzIiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRp
ZG4ndCB3YW50IHRvIGRvIHRoaXMsIHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVy
Zm9ybSBzb21lIGZsb3ctc2Vuc2l0aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29w
IGl0ZXJhdGlvbiB2YXJpYWJsZSB3YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUg
dG8gcmVzb3J0IHRvIHJ1bnRpbWUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJl
ZW4KKyAgICAvLyByZWFzc2lnbmVkIGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9v
bCBlc2NhcGVkID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNv
ZGVTdGFydE9mZnNldCgpOyAhZXNjYXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZz
ZXQ7KSB7CisgICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25z
KCkuYXQob2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4o
KSk7CisgICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51
bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0
ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNr
cG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBp
ZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAg
ICAgICAgZXNjYXBlZCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg
ICBvZmZzZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2Fw
ZWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVy
YXRvci5tX2xhc3RPcGNvZGVJRDsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBs
YXN0SW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGluc3RUdXBsZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxP
cEdldERpcmVjdFBuYW1lPihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVP
cDxPcEVudW1lcmF0b3JHZXRCeVZhbCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUp
OwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAg
IHJld3JpdGVPcDxPcEluU3RydWN0dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsK
KyAgICAgICAgcmV3cml0ZU9wPE9wRW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJh
dG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1
cGxlIDogbV9oYXNPd25Qcm9wZXJ0eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0
KHNpemVvZihPcEptcCkgPD0gc2l6ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2
IEBAIHZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJ
bkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9m
ZnNldCkKLXsKLSAgICBCYXNlOjpmaW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5
dGVjb2RlRW5kT2Zmc2V0KTsKLSAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1
bnNpZ25lZCBpbnN0SW5kZXggPSBpbnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5
UmVnSW5kZXggPSBpbnN0UGFpci5zZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5y
ZWYoaW5zdEluZGV4KS0+Y2FzdDxPcEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVn
aXN0ZXIocHJvcGVydHlSZWdJbmRleCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAg
IH0pOwotICAgIH0KLX0KLQogdm9pZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQog
ewogICAgIGF1dG8qIGluc3RydWN0aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1
MjgsMTcgKzU0MzAsMTQgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAg
ICAgT3BUb1RoaXM6OmVtaXQodGhpcywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgp
KTsKIH0KIAotU3RydWN0dXJlRm9ySW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0
cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkp
CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07
ICkgewogICAgICAgICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNr
W2ldLmdldCgpOwogICAgICAgICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9y
SW5Db250ZXh0KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRl
eHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0Owog
ICAgIH0KIAogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0
MjZiMTJlNGEwM2NjYzdjZmRiNjg0ZGFlNTk5MTQuLjgyZTJlNTI4NjJjYWYyNWM2M2MwN2U0OWM3
OWJiMTdlNDQ4YTNkZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICBjbGFzcyBKU0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVu
dGlmaWVyOwotICAgIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0
dXJlRm9ySW5Db250ZXh0OworICAgIGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhw
ZWN0ZWRGdW5jdGlvbiB7CiAgICAgICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiAr
MjU0LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZvckluQ29udGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAg
ICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAg
dm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0g
Y2xhc3MgVHlwZSA6IHVpbnQ4X3QgewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAg
ICAgICAgU3RydWN0dXJlRm9ySW4KLSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAg
ICAgIGJvb2wgaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUg
PT0gVHlwZTo6U3RydWN0dXJlRm9ySW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0
JiBhc0luZGV4ZWRGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQo
aXNJbmRleGVkRm9ySW5Db250ZXh0KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PEluZGV4ZWRGb3JJbkNvbnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFN0cnVjdHVyZUZvckluQ29udGV4dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4o
dGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxSZWdpc3Rlci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAg
ICBGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNp
Z25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lz
dGVyKGxvY2FsUmVnaXN0ZXIpCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAg
ICAgLCBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQot
ICAgICAgICB7IH0KLQotICAgICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2
b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0
b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBt
X2lzVmFsaWQgeyB0cnVlIH07Ci0gICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25l
ZCBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFz
ZSA9IEZvckluQ29udGV4dDsKICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBz
dGQ6OnR1cGxlPHVuc2lnbmVkLCBpbnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0
OwogICAgICAgICB1c2luZyBIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNp
Z25lZCwgdW5zaWduZWQ+OwogCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3Rl
cklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6
b3B0aW9uYWw8VmFyaWFibGU+IGJhc2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQpCi0gICAgICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBl
OjpTdHJ1Y3R1cmVGb3JJbiwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAs
IG1faW5kZXhSZWdpc3RlcihpbmRleFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5
UmVnaXN0ZXIocHJvcGVydHlSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVn
aXN0ZXIoZW51bWVyYXRvclJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShi
YXNlVmFyaWFibGUpCi0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkg
eyBtX2lzVmFsaWQgPSBmYWxzZTsgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQq
IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0
b3JSZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxSZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAg
ICBSZWdpc3RlcklEKiBwcm9wZXJ0eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlP
ZmZzZXQuZ2V0KCk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsg
cmV0dXJuIG1fZW51bWVyYXRvci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9tb2RlLmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9u
YWw8VmFyaWFibGU+JiBiYXNlVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJs
ZTsgfQogCiAgICAgICAgIHZvaWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBw
cm9wZXJ0eVJlZ0luZGV4KQpAQCAtMzM4LDM3ICsyODQsMzUgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBtX2hhc093blByb3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0
eUp1bXBJbnN0IHsgYnJhbmNoSW5zdEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAg
ICAgfQogCisgICAgICAgIEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBS
ZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlh
YmxlPiBiYXNlVmFyaWFibGUsIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAg
ICAgICAgICAgOiBtX2xvY2FsUmVnaXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwg
bV9wcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zm
c2V0KHByb3BlcnR5T2Zmc2V0KQorICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRv
cikKKyAgICAgICAgICAgICwgbV9tb2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlh
YmxlKGJhc2VWYXJpYWJsZSkKKyAgICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dChib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWdu
ZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29k
ZVN0YXJ0T2Zmc2V0OyB9CisKICAgICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRv
ciYsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5k
T2Zmc2V0KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2lu
ZGV4UmVnaXN0ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0
ZXI7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAg
ICAgICAgLy8gVE9ETzogIERvZXMgdGhpcyByZWFsbHkgbmVlZCB0byBiZSBhIFJlZlB0cj8KKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IG1fcHJvcGVydHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
bV9wcm9wZXJ0eU9mZnNldDsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRv
cjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRp
b25hbDxWYXJpYWJsZT4gbV9iYXNlVmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBt
X2dldEluc3RzOworICAgICAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5z
aWduZWQgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4g
bV9pbkluc3RzOworICAgICAgICBWZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAg
VmVjdG9yPEhhc093blByb3BlcnR5SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7
CiAgICAgfTsKIAotICAgIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5D
b250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6
Ci0gICAgICAgIEluZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZz
ZXQpCi0gICAgICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRl
eGVkRm9ySW4sIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4
UmVnaXN0ZXIoaW5kZXhSZWdpc3RlcikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
UmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7
IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRD
b2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAg
ICAgICB2b2lkIGFkZEdldEluc3QodW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRl
eCkgeyBtX2dldEluc3RzLmFwcGVuZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQot
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3Rl
cjsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsK
LSAgICB9OwotCiAgICAgc3RydWN0IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdl
dDsKICAgICAgICAgSGFuZGxlclR5cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MywxMCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVH
ZW5lcmF0b3IpOwogCiAgICAgICAgIGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAg
ICAgZnJpZW5kIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFz
cyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRl
eHQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIE9sZE9wVHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1l
IFR1cGxlVHlwZT4KICAgICAgICAgZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJh
dG9yJiwgVHVwbGVUeXBlJik7CiAKICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjI0LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVj
ZXNzYXJ5KGNvbnN0IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0
dXJlRm9ySW5Db250ZXh0KiBmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHBy
b3BlcnR5KTsKKyAgICAgICAgRm9ySW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVy
SUQqIHByb3BlcnR5KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9m
aWxlckV4cHJlc3Npb25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25z
dCBKU1RleHRQb3NpdGlvbiYgZW5kRGl2b3QpOwpAQCAtOTE3LDcgKzg2MCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJ
RCogY29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0
aW9uQXBwbHkoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2ln
bmVkIGVtaXRXaWRlSnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBj
b25kLCBMYWJlbCYgdGFyZ2V0KTsKLSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eUluRm9ySW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5j
aE9mZnNldCwgTGFiZWwmIGdlbmVyaWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Q
cm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwg
TGFiZWwmIGdlbmVyaWNQYXRoKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwg
dHlwZW5hbWUgSm1wT3A+CiAgICAgICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVy
SUQqIGNvbmQsIExhYmVsJiB0YXJnZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAt
OTI4LDE3ICs4NzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIo
KTsKICAgICAgICAgdm9pZCBlbWl0Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51
bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUs
IFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJv
cGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQ
cm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdp
c3RlcklEKiBsZW5ndGgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3Bl
cnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVy
SUQqIGxlbmd0aCwgUmVnaXN0ZXJJRCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJl
Z2lzdGVySUQqIGVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0RW51bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogaW5kZXgpOworICAgICAgICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdp
c3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVy
SUQqIGJhc2UsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVn
aXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRJc0NlbGxXaXRoVHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
YywgSlNUeXBlKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0
LCBzcmMsIEpTR2VuZXJhdG9yVHlwZSk7IH0KQEAgLTk1Nyw3ICs4OTIsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzQ2FsbGFibGUoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNDb25zdHJ1Y3Rv
cihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc051bWJlcihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7Ci0gICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMp
IHsgcmV0dXJuIGVtaXRFcXVhbGl0eU9wPE9wU3RyaWN0ZXE+KGRzdCwgc3JjLCBlbWl0TG9hZChu
dWxscHRyLCBqc051bGwoKSkpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc051bGwoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wPE9wRXFO
dWxsPihkc3QsIHNyYyk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0RXF1YWxpdHlPcDxP
cFN0cmljdGVxPihkc3QsIHNyYywgZW1pdExvYWQobnVsbHB0ciwganNVbmRlZmluZWQoKSkpOyB9
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc1VuZGVmaW5lZE9yTnVsbChSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKQEAgLTEwNTcsMTAgKzk5Miw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0
ZXJJRCogZHN0LCBib29sIGlzRGVsZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVj
ayhSZWdpc3RlcklEKiBzcmMpOwogCi0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3Bl
KFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9w
SW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hT
dHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwg
UmVnaXN0ZXJJRCogcHJvcGVydHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9u
YWw8VmFyaWFibGU+IGJhc2UpOwotICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUo
UmVnaXN0ZXJJRCogbG9jYWwpOworICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVy
SUQqIGxvY2FsLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5
T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9w
dGlvbmFsPFZhcmlhYmxlPiBiYXNlKTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsKTsKIAogICAgICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJ
ZGVudGlmaWVyJik7CiAgICAgICAgIExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElk
ZW50aWZpZXImKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAppbmRleCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2
MWM0ZmY3Li5jMjZjNTQ5MWE3YmQ2Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CkBAIC0yMTMxLDI0ICsyMTMxLDI0IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rp
b25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVM
RUFTRV9BU1NFUlQobV9hcmdzLT5tX2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9l
eHByICYmICFtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9k
ZSogYXJndW1lbnQgPSBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FT
U0VSVChhcmd1bWVudC0+aXNSZXNvbHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQqIHN0cnVjdHVyZUNvbnRleHQgPSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4
dCA9IG51bGxwdHI7CiAgICAgVmFyaWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52
YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigp
KTsKICAgICBpZiAoYXJndW1lbnRWYXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0
ZXJJRCogcHJvcGVydHkgPSBhcmd1bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVj
dHVyZUNvbnRleHQgPSBnZW5lcmF0b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0
eSk7CisgICAgICAgIGNvbnRleHQgPSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0
eSk7CiAgICAgfQogCiAgICAgYXV0byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewot
ICAgICAgICBpZiAoIXN0cnVjdHVyZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5i
YXNlVmFyaWFibGUoKSkKKyAgICAgICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9k
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxS
ZXNvbHZlTm9kZSo+KG1fYmFzZSktPmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+
YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFy
aWFibGUoc3RhdGljX2Nhc3Q8UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09
IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlz
VGhpc05vZGUoKSkgewogICAgICAgICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMg
KHdoaWNoIG11c3QgYmUgaW52b2tlZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBj
YW4gZW5zdXJlIHRoYXQgfHRoaXN8IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAg
ICAgICBBU1NFUlQoYmFzZSk7Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxl
KGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1l
KCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VW
YXJpYWJsZSgpLnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxl
KGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1l
KCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgp
LnZhbHVlKCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0y
MTYwLDcgKzIxNjAsNyBAQCBSZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFi
ZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5j
aEluc25PZmZzZXQgPSBnZW5lcmF0b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blBy
b3BlcnR5KGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0
KCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1l
cmF0b3IoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5
KHJldHVyblZhbHVlLmdldCgpLCBiYXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRv
ci5lbWl0Tm9kZShhcmd1bWVudCksIGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQt
PmVudW1lcmF0b3IoKSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwog
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3
ICsyMTcyLDcgQEAgUmVnaXN0ZXJJRCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0
cnVjdHVyZVByb3BlcnR5SW5Gb3JJbkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25P
ZmZzZXQsIHJlYWxDYWxsKTsKKyAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5
SW5Gb3JJbkxvb3AoKmNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9
IGVsc2UgewogICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBt
X2FyZ3MpOwogICAgICAgICBnZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBiYXNlLmdldCgpKTsKQEAgLTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjpl
bWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogICAgIGlmIChnZW5lcmF0b3Iuc2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVl
KCkgJiYgbV9zdGF0ZW1lbnQtPmhhc0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdl
bmVyYXRvci5lbWl0TG9hZChkc3QsIGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBl
bmQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1i
b2xUYWJsZSA9IG51bGxwdHI7CiAgICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywg
Qnl0ZWNvZGVHZW5lcmF0b3I6OlNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5l
cmF0b3I6OlREWkNoZWNrT3B0aW1pemF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6
Ok5lc3RlZFNjb3BlVHlwZTo6SXNOZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00
MTkzLDEyICs0MTkxLDEwIEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3Iu
ZW1pdE5vZGUoZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gbGVuZ3RoOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9y
OwogCiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IGxvY2FsID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3Ip
OwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6
b3B0aW9uYWw8VmFyaWFibGU+IGJhc2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29s
dmVOb2RlKCkpCkBAIC00MjA5LDEzNyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAg
ICAgICAgYmFzZVZhcmlhYmxlID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9u
VHlwZTo6TG9jYWwpOwogICAgIH0KIAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4
cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXRE
ZWJ1Z0hvb2sobV9sZXhwcik7Ci0KICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3Rh
dGVtZW50LT5zdGFydE9mZnNldCgpOwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3Rh
dGVtZW50LT5lbmRPZmZzZXQoKSArIChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwog
Ci0gICAgZW51bWVyYXRvciA9IGdlbmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVy
YXRvcjo6UHJlc2VydmVkVERaU3RhY2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9y
LnByZXNlcnZlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBw
cm9wZXJ0eSBsb29wLgogICAgIHsKLSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJl
bD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4g
bG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVy
YXRvci5lbWl0R2V0RW51bWVyYWJsZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVu
dW1lcmF0b3IuZ2V0KCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRv
ci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAg
ICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2Fk
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBpbmRleCA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9y
YXJ5KCksIGpzTnVtYmVyKDApKTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5
TmFtZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1p
dExhYmVsKGxvb3BTdGFydC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQo
KTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRC
aW5hcnlPcDxPcExlc3M+KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3Ro
LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCks
IGxvb3BFbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHkocmVzdWx0LmdldCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVU
YXJnZXQoKSk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5
TmFtZS5nZXQoKSwgaS5nZXQoKSk7Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVy
YXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2Zp
bGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3Iu
cHVzaEluZGV4ZWRGb3JJblNjb3BlKGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXROb2RlKGRzdCwgbV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9w
SW5kZXhlZEZvckluU2NvcGUobG9jYWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0
UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKCpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5wcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9v
cFN5bWJvbFRhYmxlKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNz
aWdubWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3Iu
ZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQo
KSk7Ci0gICAgfQotICAgIGdlbmVyYXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3Rh
Y2spOwotCi0gICAgLy8gU3RydWN0dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBS
ZWY8TGFiZWxTY29wZT4gc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3Bl
OjpMb29wKTsKLSAgICAgICAgUmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLSAgICAgICAgUmVmPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7
CiAKLSAgICAgICAgZW51bWVyYXRvckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRv
ci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5l
cmF0b3IuZW1pdEVudW1lcmF0b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdl
dCgpLCBlbnVtZXJhdG9yLmdldCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAg
IGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRMb29wSGludCgpOwotCi0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBn
ZW5lcmF0b3IuZW1pdElzTnVsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFt
ZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCks
IGxvb3BFbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1
Y3R1cmVQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQo
KSwgZW51bWVyYXRvci5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2Uo
cmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMt
PmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsK
LQotICAgICAgICBnZW5lcmF0b3IucHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCks
IGVudW1lcmF0b3JJbmRleC5nZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpLCBiYXNlVmFyaWFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0
YXRlbWVudCk7Ci0gICAgICAgIGdlbmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2Fs
LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9m
aWxlckVuZE9mZnNldCk7CisgICAgICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFBy
b3BlcnR5RW51bWVyYXRvcihnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOwor
ICAgICAgICBnZW5lcmF0b3IubW92ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgp
LCBMaW5rVGltZUNvbnN0YW50OjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAg
ICBnZW5lcmF0b3IuZW1pdEVxdWFsaXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgp
LCBlbnVtZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXBJZlRydWUocHJvcGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQo
KSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRv
ci5wcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9v
cFN5bWJvbFRhYmxlKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4
LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVy
dHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvcklu
ZGV4LmdldCgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8v
IFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVy
YXRpb24uCi0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAg
ICAgICAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKGxvb3BFbmQuZ2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9y
ZVREWlN0YWNrKHByZXNlcnZlZFREWlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkg
bG9vcC4KLSAgICB7Ci0gICAgICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5u
ZXdMYWJlbFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BT
dGFydCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQg
PSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJv
cGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRv
ci5lbWl0RW51bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBl
bnVtZXJhdG9yLmdldCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVy
YXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
b29wSGludCgpOwotCi0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0
b3IuZW1pdElzTnVsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BF
bmQuZ2V0KCkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2Vl
IGlmIGFueW9uZSBpcyBhY3R1YWxseSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhp
bmcgb3RoZXIgdGhhbiBhIGdldF9ieV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRo
ZSB0b1N0cmluZyBpbiB0aGlzIG9wY29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJh
dG9yTmV4dChwcm9wZXJ0eU5hbWUuZ2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNl
LmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0Vu
dW1lcmFibGVQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5n
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAq
c2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRl
ZmluZWQgb3IgbnVsbCBoZWxwcyBwbGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMg
aXQgZG9lc24ndCBkaXN0aW5ndWlzaCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBT
cGVjT3RoZXIpLgorICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVt
aXRJc1VuZGVmaW5lZE9yTnVsbChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFt
ZS5nZXQoKSksIHNjb3BlLT5icmVha1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9v
cEhlYWRlcihnZW5lcmF0b3IsIHByb3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAg
ICAgZ2VuZXJhdG9yLnB1c2hGb3JJblNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0
KCksIGluZGV4LmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFi
bGUpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAg
ICAgIGdlbmVyYXRvci5wb3BGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5l
cmF0b3IuZW1pdExhYmVsKCpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5wcmVwYXJlTGV4aWNhbFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9y
TG9vcFN5bWJvbFRhYmxlKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvcklu
ZGV4LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3Bl
cnR5TmFtZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJ
bmRleC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAv
LyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRl
cmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQp
OworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
IAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJl
bChlbmQuZ2V0KCkpOwogICAgIGdlbmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCmluZGV4IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRh
ZTQ2NzUuLmRhMTAxZjk1OGVlZjNiMDUzMmVkMmMxYTRiZjVlNzRhYzE4YTZjZjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKQEAgLTIxNTEsNyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgIGNhc2UgU3RyaW5nQ2hhckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0u
c3RyaW5nU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKwor
ICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBiZSBhYmxlIHRvIHVzZSB0aGUgY29kZSBiZWxvdyB0byBkZXRlcm1pbmUgdGhlIGVmZmVj
dHMgb2YgdGhlIG5vZGUgd2hlbiBwcm9wZXJ0eU5hbWUgPT0gaW5kZXguCisgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOworICAgICAgICBtYWtlSGVhcFRvcEZvck5vZGUobm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKwogICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgog
ICAgIGNhc2UgQXRvbWljc0FuZDoKQEAgLTIxNjIsMTIgKzIxNjksOSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBj
bG9iYmVyTGltaQogICAgIGNhc2UgQXRvbWljc1N0b3JlOgogICAgIGNhc2UgQXRvbWljc1N1YjoK
ICAgICBjYXNlIEF0b21pY3NYb3I6IHsKKyAgICAgICAgLy8gV2UgY291bGQgZG8gdGhpcyBmb3Ig
RW51bWVyYXRvckdldEJ5VmFsIGJ1dCBpdCdzIHVubGlrZWx5IHRvIGJlIHVzZWZ1bCBpbiBwcmFj
dGljZS4KICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0QnlWYWwpIHsKICAgICAgICAgICAg
IGF1dG8gZm9sZEdldEJ5VmFsT25Db25zdGFudFByb3BlcnR5ID0gWyZdIChFZGdlJiBhcnJheUVk
Z2UsIEVkZ2UmIGluZGV4RWRnZSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4g
ZXhwYW5kIHRoaXMgZm9yIG5vbiB4ODYgZW52aXJvbm1lbnRzLgotICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2NDEKLSAgICAgICAg
ICAgICAgICBpZiAoIWlzWDg2KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIGFycmF5VmFsdWUgPSBmb3JOb2RlKGFy
cmF5RWRnZSk7CiAKQEAgLTQyNDQsMjUgKzQyNDgsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNlIEdldEVudW1lcmFibGVM
ZW5ndGg6IHsKLSAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9u
bHkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVy
dHk6IHsKLSAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsK
LSAgICAgICAgY2xvYmJlcldvcmxkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToK
LSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBzZXRO
b25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29y
bGQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5
OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogeworCisgICAgY2FzZSBI
YXNJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJh
eU1vZGUoKTsKICAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFy
cmF5OjpJbnQzMjoKQEAgLTQyODEsMjYgKzQyNjgsNTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxp
bWkKICAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNCb29sZWFuKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAg
Y2xvYmJlcldvcmxkKCk7Ci0gICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgfQorCiAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAg
ICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY0NlbGwpOwogICAgICAgICBjbG9iYmVyV29y
bGQoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVj
dHVyZVBuYW1lOiB7Ci0gICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBT
cGVjT3RoZXIpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTog
eworICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CisgICAg
ICAgIGlmIChhcnJheU1vZGUuaXNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlIHx8IG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkudXNlS2luZCgpICE9IENlbGxVc2UpCisgICAgICAgICAgICBjbG9i
YmVyV29ybGQoKTsKKworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0J5
dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dEV4dHJhY3RNb2RlOiB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+ZW51bWVy
YXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkg
eworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVt
ZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVy
ZU1vZGUgJiYgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLT5jaGlsZDEoKS5ub2RlKCksIDApLnVz
ZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051
bWJlcihzdGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0
cnVjdHVyZU1vZGUpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IEZBTExUSFJPVUdIOworICAgIH0KKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4
OiB7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZTogeworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZTogewogICAg
ICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBzZXRU
eXBlRm9yTm9kZShub2RlLCBTcGVjU3RyaW5nKTsKKworICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgLy8gRklY
TUU6IFdlIGNhbiBkZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVmaW5pdGVseSBleGlzdHMg
YmFzZWQgb24gYWJzdHJhY3QKKyAgICAgICAgLy8gdmFsdWUgaW5mb3JtYXRpb24uCisgICAgICAg
IGNsb2JiZXJXb3JsZCgpOworICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FycmF5TW9kZS5oCmluZGV4IDExMTFmODlmOWQ3YjViOTc3NzhjMTZjOGQ1NDY0MGJl
YTM3NDQyYjIuLmEwMjZhYWQxODkzYmYyM2M1NzE5NmZjYzZjOTFmYzIwMDAzYzQ1NjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaApAQCAtMjg5LDYgKzI4OSwxMSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJv
dW5kc1NhbmVDaGFpbjsKICAgICB9CiAKKyAgICBib29sIGlzU2FuZUNoYWluKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0luQm91bmRzU2FuZUNoYWluKCkgfHwgaXNPdXRPZkJvdW5k
c1NhbmVDaGFpbigpOworICAgIH0KKwogICAgIGJvb2wgaXNPdXRPZkJvdW5kcygpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMg
fHwgc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlv
blBoYXNlLmNwcAppbmRleCBkYjM3ZjRkZGRiZjgwY2Q2NmViNTc4N2Q3YmFhMmJmNTNhZjg5MDc2
Li45ZGJkMGI0N2Q5ZGZmNGNmNjAzOGFmNTAwMTc5MzQ4YmUwYWVhMjk0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25Q
aGFzZS5jcHAKQEAgLTM5MCw3ICszOTAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbm9kZS0+
Y2hpbGQyKCktPm1lcmdlRmxhZ3MoZmxhZ3MgJiB+Tm9kZUJ5dGVjb2RlTmVlZHNOZWdaZXJvKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAgICAgICBj
YXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAg
ICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+bWVyZ2VGbGFncyhOb2RlQnl0ZWNv
ZGVVc2VzQXNWYWx1ZSk7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LT5tZXJnZUZsYWdzKE5vZGVCeXRlY29kZVVzZXNBc051bWJlciB8IE5vZGVCeXRlY29kZVVzZXNB
c090aGVyIHwgTm9kZUJ5dGVjb2RlVXNlc0FzSW50IHwgTm9kZUJ5dGVjb2RlVXNlc0FzQXJyYXlJ
bmRleCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCmluZGV4IGEyOTZjNGI4N2M4NTg4NjRmYmRlZGQ3NGVmNzI3ZTU0ZDk1ZmQ2OTQuLmY3Njg4
ZWQxNDI4N2RlNTQ0YjBjODg3ZmZjODJlMTZlNjkzNGZlY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC04Mzg3LDEwMyArODM4Nywx
MzYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19wcml2YXRlX2JyYW5kKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7Ci0gICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEVudW1lcmFibGVMZW5n
dGg+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0RW51
bWVyYWJsZUxlbmd0aCwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBj
YXNlIG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eTogewotICAgICAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlU3Ry
dWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRv
R3JhcGgoSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LAotICAgICAgICAgICAgICAgIGdl
dChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX3Byb3Bl
cnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkpOwotICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5
KTsKKyAgICAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjogeworICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm9wZXJ0eUVu
dW1lcmF0b3I+KCk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgo
R2V0UHJvcGVydHlFbnVtZXJhdG9yLCBnZXQoYnl0ZWNvZGUubV9iYXNlKSkpOworICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpOwogICAgICAgICB9CiAK
LSAgICAgICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eTogewotICAgICAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlUHJv
cGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFz
RW51bWVyYWJsZVByb3BlcnR5LCBnZXQoYnl0ZWNvZGUubV9iYXNlKSwgZ2V0KGJ5dGVjb2RlLm1f
cHJvcGVydHkpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51bWVyYWJsZV9w
cm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6IHsK
KyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvck5leHQ+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0
QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CisgICAgICAg
ICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVjb2RlLm1fYmFzZSk7CisgICAgICAgICAgICBOb2Rl
KiBpbmRleCA9IGdldChieXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIGVudW1l
cmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKTsKKyAgICAgICAgICAgIE5vZGUqIG1v
ZGUgPSBnZXQoYnl0ZWNvZGUubV9tb2RlKTsKIAotICAgICAgICBjYXNlIG9wX2hhc19vd25fc3Ry
dWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEhhc093blN0cnVjdHVyZVByb3BlcnR5LAot
ICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdl
dChieXRlY29kZS5tX3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9l
bnVtZXJhdG9yKSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX293bl9zdHJ1Y3R1
cmVfcHJvcGVydHkpOwotICAgICAgICB9CisgICAgICAgICAgICBhdXRvIHNlZW5Nb2RlcyA9IG1l
dGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhOwogCi0gICAgICAgIGNhc2Ugb3BfaW5fc3RydWN0
dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0
ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5TdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAgICAgICAgICAg
ICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUu
bV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikp
KTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxl
X2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICAg
ICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKLSAgICAgICAgICAgIEFy
cmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAgICAgICAgTm9kZSogcHJv
cGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChiYXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKLSAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOwotICAgICAgICAgICAgTm9kZSogaGFzSXRl
cmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBIYXNFbnVtZXJhYmxlSW5k
ZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSk7Ci0gICAgICAgICAgICBt
X2V4aXRPSyA9IGZhbHNlOyAvLyBIYXNJbmRleGVkUHJvcGVydHkgbXVzdCBiZSB0cmVhdGVkIGFz
IGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIHNpbmNlIEZpeHVwUGhhc2UgbWF5IG1ha2UgaXQg
Z2VuZXJpYy4KLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgaGFzSXRlcmFibGVQcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVk
X3Byb3BlcnR5KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZW51
bWVyYXRvcik7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8gc3RvcmFn
ZSBmb3IgSW5kZXhlZE1vZGUgb25seS4KKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRJbmRleEFu
ZE1vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGUsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc2Vlbk1vZGVzKSk7
CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRNb2RlID0gYWRkVG9HcmFwaChFbnVtZXJhdG9y
TmV4dEV4dHJhY3RNb2RlLCB1cGRhdGVkSW5kZXhBbmRNb2RlKTsKKyAgICAgICAgICAgIHNldChi
eXRlY29kZS5tX21vZGUsIHVwZGF0ZWRNb2RlKTsKKworICAgICAgICAgICAgTm9kZSogdXBkYXRl
ZEluZGV4ID0gYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCwgdXBkYXRlZElu
ZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9pbmRleCwgdXBkYXRlZElu
ZGV4KTsKKworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lLCBhZGRUb0dy
YXBoKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBPcEluZm8oKSwgT3BJbmZvKHNl
ZW5Nb2RlcyksIHVwZGF0ZWRJbmRleCwgdXBkYXRlZE1vZGUsIGVudW1lcmF0b3IpKTsKKworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9uZXh0KTsKICAgICAgICAgfQogCi0g
ICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogewotICAgICAgICAgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9T
UkV4aXQoKTsKLSAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbDogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJy
YXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVh
ZCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IGdldFByZWRpY3Rp
b25XaXRob3V0T1NSRXhpdCgpOworCiAgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KGJ5dGVj
b2RlLm1fYmFzZSk7Ci0gICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChieXRlY29kZS5t
X3Byb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5TmFtZSA9IGdldChieXRlY29k
ZS5tX3Byb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdldChieXRlY29k
ZS5tX2luZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNvZGUubV9tb2Rl
KTsKICAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUubV9lbnVtZXJh
dG9yKTsKIAorICAgICAgICAgICAgYXV0byBzZWVuTW9kZXMgPSBPcHRpb25TZXQ8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjo6ZnJvbVJhdyhtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRh
ZGF0YSk7CisgICAgICAgICAgICBpZiAoIXNlZW5Nb2RlcykKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKEZvcmNlT1NSRXhpdCk7CisKKyAgICAgICAgICAgIGlmIChzZWVuTW9kZXMgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIGJhZE1vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQml0QW5kLCBtb2RlLCBqc0NvbnN0YW50KGpz
TnVtYmVyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CisKKyAgICAgICAgICAgICAgICAv
LyBXZSBrbm93IHRoZSBBcml0aEJpdEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNvIGl0J3Mgb2sg
dG8gZXhpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KENoZWNrSXNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpzTnVtYmVyKDAp
KSksIGJhZE1vZGUpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7Cisg
ICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5kZXggc28gd2Un
bGwgdXNlIHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFnZSB0byBtYXRj
aCBHZXRCeVZhbC4KKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3Jh
cGgoTm9kZTo6VmFyQXJnLCBHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9w
SW5mbyhzcGVjdWxhdGlvbikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGVu
dW1lcmF0b3IpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVja2lu
ZyBmb3IgYSBCYWRDb25zdGFudFZhbHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNlIHRoZSBHZW5l
cmljIHZhcmlhbnQgaWYgd2Ugc3dpdGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJbmRleGVkTW9k
ZSArIE93blN0cnVjdHVyZU1vZGUgZXZlbiB0aG91Z2ggdGhhdCBtaWdodCBiZSBmaW5lLgorICAg
ICAgICAgICAgaWYgKCFzZWVuTW9kZXMuY29udGFpbnNBbnkoeyBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25T
dHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2ggfSkKKyAgICAgICAgICAgICAgICAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkQ29uc3RhbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBtb2RlVGVzdCA9IGFk
ZFRvR3JhcGgoU2FtZVZhbHVlLCBtb2RlLCBqc0NvbnN0YW50KGpzTnVtYmVyKHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKSkpOworICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5m
cmVlemVTdHJvbmcoanNCb29sZWFuKGZhbHNlKSkpLCBtb2RlVGVzdCk7CisKKyAgICAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChpbmRleCk7IC8vIFVzZSBpbmRleCBzbyB3ZSdsbCB1c2UgdGhlIG5vcm1hbCBpbmRleGVkIG9w
dGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8v
IEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNoIEdldEJ5VmFsLgorICAgICAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCht
b2RlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9yKTsKKyAgICAg
ICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBF
bnVtZXJhdG9yR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3Bl
Y3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFz
ZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CisgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
bnVsbHB0cik7IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNoIEdldEJ5VmFsLgogICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQobW9kZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9yKTsKLSAgICAg
ICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEdldERp
cmVjdFBuYW1lLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOworICAgICAgICAgICAg
c2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckdl
dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1bGF0aW9uKSkp
OwogCi0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfZGlyZWN0X3BuYW1lKTsKKyAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CiAgICAgICAgIH0K
IAotICAgICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7Ci0gICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51
bWVyYXRvcj4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChH
ZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7Ci0gICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7Ci0gICAgICAgIH0KKyAg
ICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbDogeworICAgICAgICAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKTsK
KyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRh
dGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKIAotICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3BuYW1lOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICAg
ICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChHZXRFbnVtZXJhdG9yU3RydWN0
dXJlUG5hbWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvciksCi0g
ICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAgICAgICBORVhU
X09QQ09ERShvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk7Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2Jhc2UpKTsKKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKTsKKyAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX21vZGUpKTsKKyAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKTsKKyAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JJbkJ5VmFsLCBP
cEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51bWVyYXRvck1l
dGFkYXRhKSkpOwogCi0gICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lOiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSwKLSAgICAgICAgICAgICAgICBn
ZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUu
bV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2VuZXJp
Y19wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2luX2J5X3Zh
bCk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX3RvX2luZGV4X3N0
cmluZzogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BUb0luZGV4U3RyaW5nPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBh
ZGRUb0dyYXBoKFRvSW5kZXhTdHJpbmcsIGdldChieXRlY29kZS5tX2luZGV4KSkpOwotICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfdG9faW5kZXhfc3RyaW5nKTsKKworICAgICAgICBjYXNlIG9w
X2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eTogeworICAgICAgICAgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCk7
CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9j
ayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFk
YXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CisKKyAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGdldChieXRlY29kZS5tX2Jhc2UpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KGdldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdl
dChieXRlY29kZS5tX21vZGUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRl
Y29kZS5tX2VudW1lcmF0b3IpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRk
VG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgT3BJbmZvKGFy
cmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSkp
KTsKKworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3Bl
cnR5KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFsX2ZpZWxkOiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4IGNjMGQwMTRk
YTI5MzFmZjNlY2RjZTk0MjljYzI2MjU2MWUyZjdmNzYuLjA2ZDE5ZDE3Mzk3MzAzZjc0MWJlNmIw
MmJmMDEwNTdmNzIyNTY0ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhh
c2UuY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGRhdGFMb2co
IiAgIEZvdW5kIG11c3QtaGFuZGxlIGJsb2NrOiAiLCAqYmxvY2ssICJcbiIpOwogICAgICAgICAK
ICAgICAgICAgLy8gVGhpcyBtZXJnZXMgc25hcHNob3Qgb2Ygc3RhY2sgdmFsdWVzIHdoaWxlIENG
QSBwaGFzZSB3YW50IHRvIGhhdmUgcHJvdmVuIHR5cGVzIGFuZCB2YWx1ZXMuIFRoaXMgaXMgc29t
ZXdoYXQgdHJpY2t5LgotICAgICAgICAvLyBCdXQgdGhpcyBpcyBPSyBhcyBsb25nIGFzIERGRyBP
U1IgZW50cnkgdmFsaWRhdGVzIHRoZSBpbnB1dHMgd2l0aCAqcHJvdmVuKiBBYnN0cmFjVmFsdWUg
dmFsdWVzLiBBbmQgaXQgdHVybnMgb3V0IHRoYXQgdGhpcworICAgICAgICAvLyBCdXQgdGhpcyBp
cyBPSyBhcyBsb25nIGFzIERGRyBPU1IgZW50cnkgdmFsaWRhdGVzIHRoZSBpbnB1dHMgd2l0aCAq
cHJvdmVuKiBBYnN0cmFjdFZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0aGF0IHRoaXMK
ICAgICAgICAgLy8gdHlwZSB3aWRlbmluZyBpcyBjcml0aWNhbCB0byBuYXZpZXItc3Rva2VzLiBX
aXRob3V0IGl0LCBuYXZpZXItc3Rva2VzIGhhcyBtb3JlIHN0cmljdCBjb25zdHJhaW50IG9uIE9T
UiBlbnRyeSBhbmQKICAgICAgICAgLy8gZmFpbHMgT1NSIGVudHJ5IHJlcGVhdGVkbHkuCiAgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGM3MTY0YjMwZjQ2NGViMGQ0MzgyZTJjY2E0MmQ1Njk5
NjRkMWJmNjcuLmFjNzgyZDk5YjQ1M2M1MDgyNjFhN2YzYTg3OTU1ODgwMGQwMDVmNzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKQEAgLTI1NCwx
NyArMjU0LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNv
ZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX2hhc19wcml2
YXRlX2JyYW5kOgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgIGNhc2Ugb3BfZ2V0X2Zyb21f
c2NvcGU6Ci0gICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6Ci0gICAgY2FzZSBvcF9o
YXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFi
bGVfc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfcHJvcGVy
dHk6Ci0gICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNlIG9w
X2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CiAg
ICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKLSAgICBjYXNlIG9wX2VudW1lcmF0
b3Jfc3RydWN0dXJlX3BuYW1lOgotICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1l
OgotICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CiAg
ICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CiAgICAgY2FzZSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmM6
CkBAIC0yOTksNiArMjg5LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAgICAgY2FzZSBv
cF9zZXRfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX2NoZWNrX3ByaXZhdGVfYnJhbmQ6CiAg
ICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9uZXh0Ogor
ICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9pbl9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHk6CiAg
ICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogCiAgICAgY2FzZSBvcF9jYWxsX2V2
YWw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IDlkMTAw
NGZlNTNmM2Q0NDdkZjEwM2ZhY2EwZDJlMTBlYzRmZjVmNDYuLjA5NTU3NjZlZmUxMzZmMWEyNWVi
MjgxYjJhNmZiM2YxMWZhOThmNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCkBAIC0xNDcsNiArMTQ3LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAg
ICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgY2FzZSBDaGVja0FycmF5T3JFbXB0eToK
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5k
ZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2Fz
ZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHk6CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICAgICAgY2Fz
ZSBHZXRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBHZXRWZWN0b3JMZW5ndGg6CkBAIC0xNjQs
NyArMTY4LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgY2FzZSBBcnJheVBv
cDoKICAgICAgICAgY2FzZSBBcnJheUluZGV4T2Y6CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFBy
b3BlcnR5OgotICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6CiAgICAg
ICAgIGNhc2UgQXRvbWljc0FkZDoKICAgICAgICAgY2FzZSBBdG9taWNzQW5kOgogICAgICAgICBj
YXNlIEF0b21pY3NDb21wYXJlRXhjaGFuZ2U6CkBAIC0zMzcsMjEgKzM0MCw4MCBAQCB2b2lkIGNs
b2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3RvciYgcmVh
ZCwgY29uc3QgV3JpdGVGdQogICAgICAgICB3cml0ZShNYXRoRG90UmFuZG9tU3RhdGUpOwogICAg
ICAgICByZXR1cm47CiAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAg
cmVhZChIZWFwKTsKLSAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OiB7CisgICAgICAgIGRl
ZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBU
b0luZGV4U3RyaW5nOgotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAg
IGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZTogewotICAgICAgICBkZWYoUHVyZVZhbHVl
KG5vZGUpKTsKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7Cisg
ICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAgICAgICAgaWYgKG5vZGUtPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSAmJiBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkg
eworICAgICAgICAgICAgcmVhZChOYW1lZFByb3BlcnRpZXMpOworICAgICAgICAgICAgcmVhZChK
U0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpICE9IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpIHsKKyAgICAgICAgICAgIGNsb2JiZXJUb3AoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9k
ZS0+YXJyYXlNb2RlKCk7CisgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CisgICAgICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKElu
ZGV4ZWRJbnQzMlByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24o
SGFzSW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkSW50MzJQcm9wZXJ0aWVzLCBncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShu
b2RlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAg
ICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAgICByZWFk
KEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZERv
dWJsZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFzSW5k
ZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkRG91YmxlUHJvcGVydGllcywgZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUobm9kZSkp
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogeworICAg
ICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQ29u
dGlndW91c1Byb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSGFz
SW5kZXhlZFByb3BlcnR5TG9jLCBJbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsIGdyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSksIExhenlOb2Rl
KG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZTogeworICAgICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICAg
ICAgcmVhZChCdXR0ZXJmbHlfdmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKElu
ZGV4ZWRBcnJheVN0b3JhZ2VQcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNsb2JiZXJU
b3AoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGNhc2UgSGFzSW5kZXhlZFByb3Bl
cnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogeworICAgIGNhc2Ug
SGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgIHJlYWQoSlNPYmplY3RfYnV0dGVyZmx5KTsK
ICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICAgICAgc3dp
dGNoIChtb2RlLnR5cGUoKSkgewpAQCAtNzA1LDYgKzc2Nyw4IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBX
cml0ZUZ1CiAgICAgY2FzZSBUb1ByaW1pdGl2ZToKICAgICBjYXNlIFRvUHJvcGVydHlLZXk6CiAg
ICAgY2FzZSBJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBF
bnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBIYXNQ
cml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKQEAgLTcxNiwxMiArNzgwLDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1
bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIFJlc29sdmVTY29wZUZvckhvaXN0
aW5nRnVuY0RlY2xJbkV2YWw6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6CiAgICAgY2FzZSBUb09i
amVjdDoKLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNl
IEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5
OgotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNlIEdldFByb3BlcnR5RW51
bWVyYXRvcjoKLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1
c3RvbToKICAgICBjYXNlIFRvTnVtYmVyOgogICAgIGNhc2UgVG9OdW1lcmljOgpAQCAtOTA2LDYg
Kzk2NSwxMiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICAgICAgd3JpdGUoQWJz
dHJhY3RIZWFwKFN0YWNrLCBkYXRhLT5zdGFydCArIHN0YXRpY19jYXN0PGludD4oaSkpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGZhciB0b28gY29u
c2VydmF0aXZlIGZvciB0aGUgY2hpbGQxKCkudXNlS2luZCgpID09IEludDMyVXNlIGNhc2UuCisg
ICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY2xvYmJlclRvcCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAg
ICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZlYTkxZGYyMjRiZDQ4MjU1MGRiZTU3ODJk
NTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZkNTUxNTBjNjY1M2MzN2UxOGYxZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcApAQCAtMjA1LDcgKzIwNSw2IEBA
IGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dFN0cnVj
dHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgogICAgIGNhc2UgRmlhdEludDUy
OgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgQ2hlY2tCYWRWYWx1ZToKQEAg
LTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNlIEdldEJ5SWRXaXRoVGhpczoKICAgICBj
YXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICBjYXNl
IEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CiAgICAgY2FzZSBIYXNJbmRl
eGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAg
IGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVy
YWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6CiAgICAgY2Fz
ZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CkBA
IC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2FzZSBUaHJvd1N0YXRpY0Vycm9yOgogICAg
IGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVj
dHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAgICBjYXNl
IFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJv
cGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CiAg
ICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3SW50
ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoK
QEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEJ5
VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBpZiAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQdXRCeVZh
bDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJhZDkxYzc2ZjU5NzhkYTI4Y2ExYzQ5Nzcx
NTVhODE5Li5lODc1MGFiY2E3ZDQzZTk1MWQxM2MyOTBhZjExNjEwNzUyYzI5OTEwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTEwMjQsNiArMTAy
NCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAg
ICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICAgICAgZml4RWRnZTxLbm93bklu
dDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIGZpeEVk
Z2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CisgICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA1KSk7
CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgR2V0
QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+cHJlZGljdGlvbigpKSB7CiAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKQEAgLTEwNjIsNiArMTA2OSwxNSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUo
QXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5hcnJheU1vZGUoKS5hY3Rpb24oKSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNl
RXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0IGZvcmNlIE9TUiBiZWNhdXNlIHdlIGhh
dmUgb25seSBzZWVuIE93blN0cnVjdHVyZU1vZGUuCisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdFIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLi4uCisgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKQorICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUobm9kZS0+YXJyYXlNb2RlKCkud2l0aFR5cGUoQXJyYXk6
OkdlbmVyaWMpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBA
IC0xMDk2LDcgKzExMTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBzb21l
IGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwt
Ymxvd24KICAgICAgICAgICAgICAgICAgICAgLy8gb3V0LW9mLWJvdW5kcyBzbG93IHBhdGguIFdl
IGNhbiBmaXggdGhhdCB3aXRoOgogICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4Ci0gICAgICAgICAgICAgICAgICAgIAor
CiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9m
Qm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVn
YXRpdmVJbmRleCkpCkBAIC0xMTExLDcgKzExMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Oklu
Qm91bmRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9u
ID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBjYXNl
IEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFn
cygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigp
ID09IEFycmF5OjpJbkJvdW5kcykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhv
bGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwgc28gaWYgdGhlIHVzZXIgZG9lc24ndCBjYXJlCkBA
IC0xMTIxLDcgKzExMzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91
dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
TmVnYXRpdmVJbmRleCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3Bl
Y3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQpAQCAtMTE3OCw3ICsxMTk0LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKworICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHNldCBhIG5vbi1KU1ZhbHVlIHJlc3VsdCBmb3Ig
RW51bWVyYXRvckdldEJ5VmFsIHNpbmNlIHdlIGNvdWxkIHN0aWxsIGRvIGEgT3duU3RydWN0dXJl
TW9kZSBwcm9wZXJ0eSBhY2Nlc3MuIFdlIGFsc28gZG9uJ3QgaGF2ZSBhIGdvb2Qgd2F5IHRvCisg
ICAgICAgICAgICAvLyBwcm92ZSB0aGVyZSdzIG5vIHN0cnVjdHVyZSBwcm9wZXJ0aWVzIGF0IHRo
aXMgcG9pbnQuCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0QnlW
YWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5TW9k
ZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAg
ICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkKQEAgLTIyNzUsMjggKzIyOTUsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBjYXNl
IEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4o
bm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZpeEVk
Z2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtub3du
Q2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBJblN0
cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25TdHJpbmdVc2U+KG5vZGUtPmNoaWxk
MigpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDMoKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7Cisg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAgICBub2RlLT5zZXRB
cnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAogICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLApAQCAtMjMxNSwzNiArMjMxNCw2NCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwgQXJy
YXk6OkluQm91bmRzU2FuZUNoYWluKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgICAgIEVkZ2UmIGJhc2UgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSYgcHJvcGVydHkg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSYgaW5kZXgg
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgRWRnZSYgZW51bWVy
YXRvciA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMyk7Ci0gICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KGJhc2UpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KHByb3Bl
cnR5KTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KGluZGV4KTsKLSAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihlbnVtZXJhdG9yKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQogICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5h
bWU6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7
Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisKKyAgICAg
ICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAgICAg
RWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBF
ZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAgICBF
ZGdlJiBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFn
ZUNoaWxkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRh
dGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2RlLT5h
cnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS0+
cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKS0+cHJlZGljdGlvbigpKSk7CisKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENl
bGxVc2U+KGJhc2UpOworICAgICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oYmFzZSwg
aW5kZXgsIHN0b3JhZ2VFZGdlKTsKKworICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmJl
bmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2FuZUNo
YWluSWZQb3NzaWJsZShub2RlLCBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5C
b3VuZHMgPyBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVyYXRv
ck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2Rl
ICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2FjaGUp
KQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxLbm93
bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZp
eEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKwor
ICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNlIEVu
dW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJbnQz
MlVzZT4obm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRh
dGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogewor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNwZWN1
bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPiht
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25J
bnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBmaXhF
ZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAg
ICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRoZSBp
bnN0cnVjdGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxUeXBl
U2V0LgogICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlzIGNv
bnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBmb3IK
QEAgLTM2OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAorICAg
IHZvaWQgc2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7Cisg
ICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAg
c3RkOjpvcHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9uOwor
ICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgpKSB7
CisgICAgICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsgb24g
YSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
IC8vIDEpIFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJuIHVu
ZGVmaW5lZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNoYW5n
ZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAgICAg
Ly8gdGhpbmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBhY3R1
YWxseSBoYWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBmcm9t
IGEgaG9sZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2VseSB0
aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQgb2YK
KyAgICAgICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5v
dyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5hTiBh
cmUgaW5kaXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlvbiwg
YW5kIGp1c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0IGNh
c2UuIFRoaXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRvIGhh
dmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0byBV
bmRlZmluZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3YW50
IHRvCisgICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMy
LiBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAvLyBi
YXNlZD8KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGlj
YXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAgICAg
ICAgICAgIC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoZSBo
b2xlIGNoZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0
IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAgICAg
IC8vIG91dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2NjgK
KworICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5
TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNF
eGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAgICAg
ICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVD
aGFpbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGly
ZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHJl
dHVybmVkIGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdlIHN0
aWxsIGRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJlcXVp
cmUgdGFraW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAoaXM2
NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAm
JiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5k
ZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpP
dXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1vZGUu
c3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAgIHNh
bmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAgICAg
ICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAm
JiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUgdXNl
ciBkb2Vzbid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZlcmVu
Y2UgYmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAgICAg
ICAgICAvLyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlv
biA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3Vu
ZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2
ZUluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJh
eTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAgICAg
ICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7Cisg
ICAgfQorCiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFycmF5
OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5ZmU2
MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQxOTJk
MTc1MmQ0NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwg
Y29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhhc1B1
dEJ5SWRTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJZFN0
YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0b3JN
ZXRhZGF0YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0JyYW5j
aCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyUmFu
Z2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
dGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQwZWY0
MDMzMGMyMzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4OTIy
MTUxZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJS
YW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAg
ICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4ZWN1
dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRyYWN0
SW5kZXguCiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0UmVs
YXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2RlKCks
IG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAgICAg
ICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGls
ZDEoKS5ub2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4NmQz
OTNmZDg3YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0ZjBk
NmY0NjQ2NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcApA
QCAtMTExLDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0YXR1
czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2UgRmls
dGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBicmVh
azsKIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAgY2Fz
ZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2ZDBh
NDM4ZTVlZDgxLi4yOTg1ZGZkMWIyNDY0ODNkNzc1YzM1NjhhNzczNjkzNDI0ZjkxZjUxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUg
IkRlbGV0ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1ZGUg
IkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNp
bmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNp
bmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAgICAg
ICBjYXNlIEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAg
IGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNhc2Ug
R2V0QnlJZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAgICBj
YXNlIEdldEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoKICAg
ICAgICAgY2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
ICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgog
ICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAgIGJv
b2wgaGFzU3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkg
eworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29k
ZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1l
cmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0Fu
ZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0
b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBB
dG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21p
Y3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1c2g6
CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Cisg
ICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2lnbmVk
IHN0b3JhZ2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdlQ2hp
bGQoKSk7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJB
dDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0Nv
ZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2Fz
ZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5VmFs
RGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFsQWxp
YXM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgorICAg
ICAgICBjYXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNoYW5n
ZToKKyAgICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWljc0xv
YWQ6CisgICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9yZToK
KyAgICAgICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6CisgICAg
ICAgICAgICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAgIGNh
c2UgQXJyYXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBBcnJh
eVBvcDoKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVybiAy
OworCisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0dXJu
IDI7CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAg
ICAgICAgICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBG
SVhNRTogQWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3MgdG8g
ZGV0ZXJtaW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQoKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiArMjI4
MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlW
YWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVy
YXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAgICAg
Y2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgpA
QCAtMjIxNiw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAg
ICAgICBjYXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgY2Fz
ZSBBdG9taWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2UgQXRv
bWljc0NvbXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyNCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAgIH0K
IAorICAgIGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhB
bmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgor
ICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgRW51
bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICByZXR1
cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2b2lk
IGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFjaGls
ZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRiMTdm
YjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJlNTY1
NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
RmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8qIEZv
ci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVMZW5n
dGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdlbmVy
YXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAgICBt
YWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9v
bGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhhc1Zh
ckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5vZGVS
ZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2RlUmVz
dWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2RlUmVz
dWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVyZVBy
b3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBtYWNy
byhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwgTm9k
ZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAgICAg
bWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3Vs
dEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRvSW5k
ZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1hY3Jv
KEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3Jv
KEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNy
byhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisgICAg
bWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncyB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9kZVJl
c3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFwIGFu
ZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAg
bWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3ZjYz
ZjQ0ODYxNzllOWI4ZTg0NGQuLjViOTk5MGNjZjI3NTVlYjcxOGIxOTk4YmYyYzMxNDVkMTM1MzNm
MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAt
MjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnN1
cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFi
bGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkKLXsK
LSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJh
bWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNl
KSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmpl
Y3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNlKTsK
LSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgp
KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVudGlm
aWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
LSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
YmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJlUHJv
cGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
ZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFN
RSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZt
LCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29t
bW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkpKTsK
LX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVyZVBy
b3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpT
Q2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xvYmFs
T2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNjb3Bl
LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3RQ
cm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFtZSkp
KTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9w
ZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNl
Q2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxPCiAg
ICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGdsb2Jh
bE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9u
VG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGlu
dDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0
b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5kZXgs
IGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
KSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9k
ZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAgICBB
U1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1vZGUg
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3Ry
aW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9iamVj
dCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZT4o
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpOdW1i
ZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5kZXgp
OworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUsIChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2Rl
TnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAgIFZN
JiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERF
Q0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5kZXgg
PCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3RyaW5n
KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bGwoKSk7CisgICAgfQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3ItPnBy
b3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1F
KHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgo
aW5kZXgpOworICAgIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRp
ZmllcihnbG9iYWxPYmplY3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAg
SlNPYmplY3QqIG9iamVjdCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihz
Y29wZSwgSlNWYWx1ZTo6ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlO
YW1lKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRv
ckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
RW5jb2RlZEpTVmFsdWUgYmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1
ZSwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9D
QUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7
CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJl
ciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRP
YmplY3QoKS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3Ry
aW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6
ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3Bl
LCBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGds
b2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFs
dWUsIEVuY29kZWRKU1ZhbHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50
MzJfdCBtb2RlTnVtYmVyKSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAg
ICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJ
VE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsK
LSAgICByZXR1cm4ganNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJp
bmcoKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
SlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFzT3du
UHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0
eU5hbWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3Bl
cnR5TmFtZVZhbHVlKSk7CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50b0lk
ZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIGlk
ZW50aWZpZXIpKSkpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3
UmVnZXhwV2l0aExhc3RJbmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQ2VsbCogcmVnZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4KSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFmZWRl
NTk1ZDBmYjhmYTgzNWVmNzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQxM2Jm
MTg4MGNlNzYzNGVlMzEzZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5zdGFu
Y2U7CiBjbGFzcyBKU0JpZ0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsKK2Ns
YXNzIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTEw
NCwxMiArMTA1LDE0IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJv
dG90eXBlT2YsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwg
KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqLCBK
U0NlbGwqLCBpbnQzMl90KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhh
c0VudW1lcmFibGVJbmRleGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiwgSlND
ZWxsKiwgaW50MzJfdCkpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNF
bnVtZXJhYmxlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNv
ZGVkSlNWYWx1ZSwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRp
b25IYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCosIEpTQ2VsbCosIEpTU3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25JblN0cnVjdHVyZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiwgSlNDZWxsKiwgSlNTdHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5j
b2RlZEpTVmFsdWUpKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJv
cGVydHlFbnVtZXJhdG9yQ2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikp
OwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0Nl
bGwqLCAoSlNHbG9iYWxPYmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFU
SU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNW
YWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9O
KG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRv
ckluQnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFs
dWUsIChKU0dsb2JhbE9iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdWlu
dDMyX3QsIGludDMyX3QpKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51
bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxP
YmplY3QqLCBKU0NlbGwqLCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOwor
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5k
ZXgsIEpTQ2VsbCosIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKSk7
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwgKEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3RydWN0
dXJlKikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3ZTMw
NmJhYjg1MzdjMGU4OWUyZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1ZTM3
NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAg
ICAgICAgICAgIGlmICghY2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGgu
Y2hpbGQobm9kZSwgMSk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+
YXJyYXlNb2RlKCkucmVmaW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAgICAg
ICAgICAgICAgICAgY2hpbGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hpbGQy
LT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAg
Y2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091dE9m
Qm91bmRzKCkpCkBAIC01MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAg
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRIZWFw
UHJlZGljdGlvbigpKSAmJiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAgICAg
IGlmIChpc0ludDMyU3BlY3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVkaWN0
aW9uKCkpICYmIChub2RlLT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51bWVy
YXRvckdldEJ5VmFsKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRp
Y3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxlSW50
NTIoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3Bl
Y0ludDUyQW55KTsKQEAgLTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAg
ICAgY2FzZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2Ug
UmVnRXhwRXhlYzoKQEAgLTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdl
dFByaXZhdGVOYW1lOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAgICAg
Y2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAg
ICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2FzZSBU
YWlsQ2FsbElubGluZWRDYWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAgICBi
cmVhazsKIAotICAgICAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0
RXh0cmFjdEluZGV4OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0
b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBJbkJ5VmFsOgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBIYXNQ
cml2YXRlTmFtZToKICAgICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNhc2Ug
SGFzT3duUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0g
ICAgICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAg
ICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5
OiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAg
ICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZTogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CisK
KyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAg
ICAgICAgLy8gVGhpcyBjYW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJhbmNo
IG9mIHRoYXQgY2FzZSBpbiB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50IHRv
IG1lc3Mgd2l0aAorICAgICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24oU3BlY0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNTdHJpbmcpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZhbHVl
IHByb2ZpbGUgd2hldGhlciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3RyaW5n
LgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDogewog
ICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHByb2R1
Y2UgYW4gaW50MzIuIEhvd2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0IHBy
b2R1Y2VzIE5hTiBvciBpbnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBjOTYz
N2ExZDEzZmFhZjllYzA0NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJiZWFi
MDJhZDBjNTEzZGRiNDljYTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91bmRz
Q2hlY2sobV9ncmFwaC5jaGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSks
IG1fZ3JhcGguY2hpbGQobV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAg
ICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAg
ICAgICAgICAgbG93ZXJCb3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCks
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJkMGI5
YjQ2MGUyYzUwLi4xZTA0NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2LDEw
ICsyOTYsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRvTnVt
YmVyOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5Ogot
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6
Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlh
dGU6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50
QnlWYWxPdXRPZkJvdW5kczoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wg
aWdubwogICAgICAgICAvLyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBpbiBj
b250cm9sIGZsb3cgaGVyZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoKICAg
ICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxlbmd0
aDoKQEAgLTQ5Niw2ICs0OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAg
cmV0dXJuIGlzU2FmZTsKICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5k
ZXhBbmRNb2RlOgorICAgIC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0cyBi
dXQgdGhleSdsbCBvbmx5IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGUgc28gd2UgbWlnaHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNlIFRv
VGhpczoKICAgICBjYXNlIENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpAQCAt
NTk1LDYgKzU5Nyw4IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3Rh
dGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdTdHJp
bmdPYmplY3Q6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNhc2Ug
RW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAg
ICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAgICBj
YXNlIEhhc093blByb3BlcnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4ZWN1
dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJv
b2wgaWdubwogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0
OgogICAgIGNhc2UgTXVsdGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFibGVM
ZW5ndGg6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0
eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFt
ZToKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21OZXdP
YmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1MThh
NjA4NzEzNDJkNjQ0ZWQ5NzhiMWU1YjguLjFmNjU5YWJjNmJiMWVhOGUwNTRiOGY0NTc1NTY0MDA4
YTFhOTI0OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCkBAIC0xNjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpK
U1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1ZhbHVl
UmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwg
R1BSUmVnIHNwZWNpZmljUGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVj
dWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCi0g
ICAgOiBtX2dwcihqaXQsIFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0LCBz
cGVjaWZpY1BheWxvYWQpCiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdz
VGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVz
ZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1fcGF5
bG9hZEdQUihqaXQsIHNwZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNlbmRp
ZgogewotICAgIGlmIChyZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1fcGF5
bG9hZEdQUiA9IEdQUlRlbXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAgbV90
YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BheWxv
YWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jh
cnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0UoSlNW
QUxVRTY0KQogSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1
bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAgLTI1
OTUsNyArMjU4NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0
KE5vZGUqIG5vZGUpCiAgICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50
Tm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5n
KE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmlu
ZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAwKSk7
CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
Y2hpbGQobm9kZSwgMSkpOwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJlZyBz
Y3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFsaWRH
UFJSZWc7Ci0gICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0VGFn
LmFkb3B0KHJlYWxSZXN1bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcu
Z3ByKCk7Ci0gICAgfQotI2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBE
YXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJl
Zml4KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6IERh
dGFGb3JtYXRDZWxsKTsKKyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91
dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9m
ZnNldE9mVmFsdWUoKSksIHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgIGJpZ0NoYXJhY3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
LCBzY3JhdGNoUmVnLCAmdm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJheU1v
ZGUoKS5pc091dE9mQm91bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9y
bWF0SlMpOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2ppdC5t
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7
CiAjZW5kaWYKIAogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsyNjUz
LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUq
IG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1
cmVUcmFuc2l0aW9uKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2pp
dC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3Rv
dHlwZVN0cnVjdHVyZSk7CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgYWRkU2xv
d1BhdGhHZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVy
YXRvcj4oCi0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHNj
cmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmpl
Y3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKG1ha2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0
b3I+KAotICAgICAgICAgICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhyZXN1
bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBo
LCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAg
ICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7
CiAgICAgICAgIH0gZWxzZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAg
ICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50
LAotICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vs
c2UKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhy
ZXN1bHRUYWdSZWcsIHNjcmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChzY3Jh
dGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0VGFnUmVnLCBzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0gZWxz
ZQotICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9kZSk7
CisgICAgfQogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlKE5v
ZGUqIG5vZGUpCkBAIC0zMzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6Omxv
YWRGcm9tSW50VHlwZWRBcnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5UmVn
CiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJl
c3VsdChOb2RlKiBub2RlLCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBi
b29sIGNhblNwZWN1bGF0ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlM
b2FkUmVzdWx0KE5vZGUqIG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlU
eXBlIHR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBpZiAo
ZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBpc1VJ
bnQzMiA9IGVsZW1lbnRTaXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAgIEdQ
UlJlZyByZXN1bHRSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChzaG91
bGRCb3gpIHsKKyAgICAgICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1wb3Jh
cnkgZnJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91Ymxl
KHJlc3VsdFJlZywgZnJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBwb3NpdGl2ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9y
RXF1YWwsIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0LmFk
ZERvdWJsZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6OnR3
b1RvVGhlMzIpLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzVUlu
dDMyKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQo
dHlwZSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9
PSA0ICYmICFpc1NpZ25lZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRl
SW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCByZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBzdHJp
Y3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwg
R1BSUmVnIHJlc3VsdFJlZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9k
ZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRB
cnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlU
eXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRh
Rm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgQVNT
RVJUKGlzSW50KHR5cGUpKTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5
cGVkQXJyYXlUeXBlIHQKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBz
dGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7Cisg
ICAgYm9vbCBzaG91bGRCb3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1pdFR5
cGVkQXJyYXlCb3VuZHNDaGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAgbG9h
ZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcsIHR5
cGUpOworICAgIGxvYWRGcm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNhblNw
ZWN1bGF0ZSA9IHRydWU7Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVz
dWx0UmVnLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVz
dWx0KG5vZGUsIHJlc3VsdFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKIH0K
IAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKQEAg
LTM2MzYsNyArMzYyNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZv
ckludFR5cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1bHQo
bm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRU
eXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBl
ZEFycmF5VHlwZSB0eXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVn
cywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewog
ICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2Rl
KiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3RkOjp0
aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwogICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3Vs
dC5mcHIoKTsKICAgICBlbWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHBy
b3BlcnR5UmVnKTsKQEAgLTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlw
ZQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAg
ICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERhdGFG
b3JtYXRKUykgeworICAgICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdz
KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICBk
b3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BS
UmVnIHByb3BlcnR5LCBOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcwMyw3
ICszNzA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRU
eXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2RlKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0
cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9y
T2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYg
cHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhO
b2RlKiBub2RlKQogICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcg
YXJnMkdQUiA9IGFyZzIuZ3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAg
IHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMp
OworCiAgICAgc3BlY3VsYXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGFy
ZzFHUFIpOwogICAgIHNwZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LCBhcmcyR1BSKTsKIAogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NGbHVz
aGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IHJlc3VsdC5yZWdzKCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVj
dFN0cmluZywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIs
IGFyZzJHUFIpOwogICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpA
QCAtMzczMSwxMiArMzczMywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBh
cmcxLmdwcigpOwogICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUp
ID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKIApAQCAtODAzOCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0VHlwZWRBcnJheUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJl
c3VsdCh2ZWN0b3JHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdw
cigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVn
ID0gc2NyYXRjaC5ncHIoKTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3Rk
Ojp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAKICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgwODIs
MjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVu
dHMoTm9kZSogbm9kZSkKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhO
b2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRB
cmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1
ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkK
IHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAg
R1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0g
YmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBHUFJSZWcgc2Ny
YXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRj
aDIuZ3ByKCk7CiAgICAgCiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47
CisKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOwogICAgIAogICAgIG1faml0Lmxv
YWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CkBA
IC0xMzQ0Miw0NCArMTM0NDYsMzU4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUaHJv
d1N0YXRpY0Vycm9yKE5vZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqIG5vZGUpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1v
ZGUoTm9kZSogbm9kZSkKIHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNl
LCBlbnVtZXJhdG9yKTsKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVy
YW5kIG1vZGUodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDMpKTsKKworICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQUlJlZyBt
b2RlR1BSID0gbW9kZS5ncHIoKTsKICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0
b3IuZ3ByKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0g
ICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLX0KKyAgICBpZiAobm9kZS0+
ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVk
TW9kZSkgeworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMsIFJldXNlLCBpbmRleCk7CisgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogCi12b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVy
YXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRl
eE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKDApKSk7CiAKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVn
cyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGluY3JlbWVudExvb3A7Cisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmU7CisgICAgICAgIGNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwg
c2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7CisKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIG1vZGVHUFIpOworCisgICAgICAgICAgICBpbmNyZW1lbnRMb29wID0g
bV9qaXQubGFiZWwoKTsKKyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
c2NyYXRjaC5ncHIoKSk7CisKKyAgICAgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIGRvbmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBzY3JhdGNoLmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSkpOworICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgfSkpOworICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKS5saW5rVG8oaW5j
cmVtZW50TG9vcCwgJm1faml0KTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
Ok51bWJlclRhZyB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OkluZGV4ZWRNb2RlKSA8PCAzMiksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAg
ICAgbV9qaXQub3I2NChzY3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Cisj
ZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0g
Q2VsbFVzZSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VF
ZGdlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSByZXN1bHQucmVncygpOworCisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1
cmUgYXMgdGhlIGVudW1lcmF0b3IuCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRS
ZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpT
VmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQo
KSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRDYWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAgIG1f
aml0Lm1vdmUoaW5kZXhHUFIsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIG1vZGVHUFIpOworCisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAg
ICBpbml0TW9kZS5saW5rKCZtX2ppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9q
aXQub3I2NChUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWlu
dDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgPDwgMzIp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCBy
ZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0UmVncywgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3Bl
cmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJh
c2UucmVncygpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQ
cm9wZXJ0eSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdz
LCBwcm9wZXJ0eUdQUik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50
ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSksIGJhc2VSZWdzLCBpbmRleEdQUiwgbW9kZUdQUiwgZW51bWVyYXRvckdQUik7CiAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSwgbm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSog
bm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJ
bmRleChOb2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Cisg
ICAgSlNWYWx1ZU9wZXJhbmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
IEpTVmFsdWVSZWdzIHBhaXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBH
UFJSZWcgcGF5bG9hZEdQUiA9IHBhaXJSZWdzLnBheWxvYWRHUFIoKTsKIAotICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHJlc3VsdEdQ
UiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKLSAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwotICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKworICAgIG1f
aml0LmFuZDMyKFRydXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4
KCkpLCBwYXlsb2FkR1BSLCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRh
dGVkUGFpcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3Mg
PSB1cGRhdGVkUGFpci5qc1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBwYWlyR1BSID0gaXM2NEJp
dCgpID8gcGFpclJlZ3MucGF5bG9hZEdQUigpIDogcGFpclJlZ3MudGFnR1BSKCk7CisKKyAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG1faml0LnJzaGlmdDY0KHBhaXJHUFIs
IFRydXN0ZWRJbW0zMigzMiksIHJlc3VsdEdQUik7CisjZWxzZQorICAgIG1faml0Lm1vdmUocGFp
ckdQUiwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spLCByZXN1bHRHUFIp
OworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5v
ZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4T3BlcmFu
ZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IG1vZGVPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yT3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0VGVtcCh0aGlzKTsKKworICAgIEdQUlJlZyBpbmRleCA9IGlu
ZGV4T3BlcmFuZC5ncHIoKTsKKyAgICBHUFJSZWcgbW9kZSA9IG1vZGVPcGVyYW5kLmdwcigpOwor
ICAgIEdQUlJlZyBlbnVtZXJhdG9yID0gZW51bWVyYXRvck9wZXJhbmQuZ3ByKCk7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdFRlbXAucmVncygpOworCisgICAgYXV0byBzZWVu
TW9kZXMgPSBPcHRpb25TZXQ8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjo6ZnJvbVJh
dyhub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgZG9uZUNhc2VzOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wZXJhdGlvbkNhbGw7
CisKKyAgICBib29sIG5lZWRzT3BlcmF0aW9uID0gc2Vlbk1vZGVzLmNvbnRhaW5zKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGZs
dXNoIG9uIGFsbCBjb2RlIHBhdGhzIGlmIHdlIGNvdWxkIGNhbGwgdGhlIG9wZXJhdGlvbi4KKyAg
ICBpZiAobmVlZHNPcGVyYXRpb24pCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBp
ZiAoc2Vlbk1vZGVzLmNvbnRhaW5zQW55KHsgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIH0pKSB7
CisKKyAgICAgICAgaWYgKG5lZWRzT3BlcmF0aW9uKQorICAgICAgICAgICAgb3BlcmF0aW9uQ2Fs
bCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbW9kZSwgVHJ1
c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKworICAg
ICAgICBhdXRvIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkp
OworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVy
YXRvciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9y
T2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgaW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
KyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAg
ZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG91dE9mQm91bmRzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZVRydXN0ZWRWYWx1ZShqc051bGwoKSwgcmVz
dWx0UmVncyk7CisgICAgfQorCisgICBpZiAobmVlZHNPcGVyYXRpb24pIHsKKyAgICAgICAgaWYg
KG9wZXJhdGlvbkNhbGwuaXNTZXQoKSkgeworICAgICAgICAgICAgZG9uZUNhc2VzLmFwcGVuZCht
X2ppdC5qdW1wKCkpOworICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbC5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVw
ZGF0ZVByb3BlcnR5TmFtZSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2so
KTsKKyAgICB9CisKKyAgICBkb25lQ2FzZXMubGluaygmbV9qaXQpOworICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVF
bnVtZXJhdG9yR2V0QnlWYWwoTm9kZSogbm9kZSkKK3sKKyAgICBFZGdlIGJhc2VFZGdlID0gbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICBhdXRvIGdlbmVyYXRlID0gWyZdIChHUFJS
ZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmVD
YXNlczsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBKU1Zh
bHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBHUFJSZWcgaW5kZXhHUFI7CisgICAgICAgIEdQ
UlJlZyBlbnVtZXJhdG9yR1BSOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBiYWRTdHJ1
Y3R1cmVTbG93UGF0aDsKKworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFt
YmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQpPihbJl0g
KERhdGFGb3JtYXQpIHsKKyAgICAgICAgICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZTsK
KyAgICAgICAgICAgIGlmIChzdG9yYWdlRWRnZSkKKyAgICAgICAgICAgICAgICBzdG9yYWdlLmVt
cGxhY2UodGhpcywgc3RvcmFnZUVkZ2UpOworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAg
ICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGUodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCA0KSk7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBl
bnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNSkpOworCisgICAgICAg
ICAgICBHUFJSZWcgbW9kZUdQUiA9IG1vZGUuZ3ByKCk7CisgICAgICAgICAgICBpbmRleEdQUiA9
IGluZGV4LmdwcigpOworICAgICAgICAgICAgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3By
KCk7CisKKyAgICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOwor
ICAgICAgICAgICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisgICAgICAgICAgICBHUFJS
ZWcgc2NyYXRjaEdQUiA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOworCisgICAgICAgICAgICBi
b29sIGhhdmVTdG9yYWdlID0gISFzdG9yYWdlRWRnZTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSBzdG9yYWdlVGVtcG9yYXJ5OworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFI7CisgICAg
ICAgICAgICBpZiAoIWhhdmVTdG9yYWdlKSB7CisgICAgICAgICAgICAgICAgc3RvcmFnZVRlbXBv
cmFyeSA9IEdQUlRlbXBvcmFyeSh0aGlzLCBSZXVzZSwgZW51bWVyYXRvcik7CisgICAgICAgICAg
ICAgICAgc3RvcmFnZUdQUiA9IHN0b3JhZ2VUZW1wb3JhcnkuZ3ByKCk7CisgICAgICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICAgICBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKKworICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG5vdEZhc3ROYW1lZENhc2VzOworCisg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGdlbmVyYXRlIHRoaXMgY29kZSBpZiB3
ZSBrbm93IGJhc2UgaXMgbm90IGFuIG9iamVjdC4KKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG1v
ZGVHUFIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
IHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKTsKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIHRvIGNoZWNrIHRoYXQgdGhlIGJh
c2UgaXMgYSBjZWxsIGhlcmUgc2luY2Ugd2Ugd29uJ3QgZ2VuZXJhdGUgT3duU3RydWN0dXJlTW9k
ZSBwcm9wZXJ0aWVzIGZvciBub24tb2JqZWN0cy4KKyNpZiBBU1NFUlRfRU5BQkxFRCAmJiBVU0Uo
SlNWQUxVRTY0KQorICAgICAgICAgICAgICAgIGF1dG8gaXNDZWxsID0gbV9qaXQuYnJhbmNoSWZD
ZWxsKGJhc2VDZWxsR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7Cisg
ICAgICAgICAgICAgICAgaXNDZWxsLmxpbmsoJm1faml0KTsKKyNlbmRpZgorCisgICAgICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJ
ZiB3ZSBrbm93IHRoZXJlJ3Mgb25seSBvbmUgc3RydWN0dXJlIGZvciBiYXNlIHdlIGNhbiBqdXN0
IGVtYmVkIGl0IGhlcmUuCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBz
Y3JhdGNoR1BSKTsKKworICAgICAgICAgICAgICAgIGF1dG8gYmFkU3RydWN0dXJlID0gbV9qaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoR1BSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1
Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5YmUgd2Ug
c2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHJlcHJlc2VudCBJbmRleGVkK05hbWVkPworICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLm5vZGUoKSA9PSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpLm5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAg
YmFkU3RydWN0dXJlU2xvd1BhdGggPSBiYWRTdHJ1Y3R1cmU7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQoYmFkU3RydWN0
dXJlKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgICAgICAg
ICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBp
bmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAgICAgICAg
ICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNlQ2VsbEdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKworICAgICAgICAgICAgICAgIGRvbmVD
YXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgICAgICAgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5uZWczMihz
Y3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0cihzY3Jh
dGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhdmVTdG9yYWdlKQor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VDZWxsR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsK
KyAgICAgICAgICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRWYWx1ZShN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRSZWdzKTsK
KyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBEYXRhRm9ybWF0SlMp
OworICAgICAgICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVseSBvbiBjb21waWxlR2V0QnlWYWwg
dG8gY2FsbCBqc1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMg
a2luZGEgaGFja3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZvKG5vZGUpLmpzVmFs
dWVSZWdzKCkgPT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9uSW5mbyhub2RlKS5yZWdpc3RlckZv
cm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgaWYgKGJhZFN0cnVjdHVyZVNsb3dQ
YXRoLmlzU2V0KCkpCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENh
bGwoYmFkU3RydWN0dXJlU2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVy
TmFtZUFuZEdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZUNlbGxHUFIsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BSKSk7CisKKyAgICAgICAgZG9uZUNh
c2VzLmxpbmsoJm1faml0KTsKKyAgICB9OworCisgICAgaWYgKGlzQ2VsbChiYXNlRWRnZS51c2VL
aW5kKCkpKSB7CisgICAgICAgIC8vIFVzZSBtYW51YWwgb3BlcmFuZCBzcGVjdWxhdGlvbiBzaW5j
ZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQgYSBVc2VLaW5kIG1vcmUgcmVzdHJpY3RpdmUgdGhhbiBD
ZWxsVXNlLgorICAgICAgICBzcGVjdWxhdGUobm9kZSwgYmFzZUVkZ2UpOworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRnZSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2VPcGVyYW5kKHRoaXMsIGJhc2VF
ZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAgIH0KK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5vZGUqIG5vZGUsIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoYXV0byBi
YXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVy
dHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworCisg
ICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5TmFtZVJlZ3MgPSBwcm9wZXJ0eU5hbWUucmVncygp
OworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVu
dW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3BlcmF0aW9uQ2FzZXM7CisKKyAgICAg
ICAgaWYgKG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZSkubV90eXBlICYgflNwZWNDZWxsKQorICAg
ICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNl
KSk7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSB0aGlzIGNvZGUg
aWYgd2Uga25vdyBiYXNlIGlzIG5vdCBhIGNlbGwuCisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1vZGVHUFIsIFRy
dXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7
CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VDZWxs
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CisKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMubGluaygmbV9qaXQpOworCisgICAg
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFJlZ3MudGFnR1BS
KCkpOworICAgICAgICBhdXRvIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MoYmFzZUNlbGxHUFIsIHJl
c3VsdFJlZ3MudGFnR1BSKCkpOworI2Vsc2UKKyAgICAgICAgYXV0byBiYXNlUmVncyA9IGJhc2U7
CisjZW5kaWYKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzbG93UGF0aEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5TmFtZVJl
Z3MsIGluZGV4R1BSLCBtb2RlR1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
KworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBibGVzc2VkQm9vbGVhblJl
c3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7CisgICAgfTsKKworICAgIGlmIChp
c0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZS5ncHIoKSwgYmFz
ZS5ncHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UucmVncygpLCBiYXNlLnJlZ3MoKS5w
YXlsb2FkR1BSKCkpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVu
dW1lcmF0b3JJbkJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQ
cm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJhdG9ySW5CeVZhbCk7Cit9CisKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoTm9kZSogbm9kZSkK
K3sKKyAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeUlkRmx1c2goTm9kZSogbm9kZSkKQEAgLTEzNjIyLDY3ICsxMzk0MCw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHVyZShOb2RlKiBub2RlKQogICAgIGJsZXNz
ZWRCb29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0g
ICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwotICAgIEpT
VmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgIEpTVmFsdWVSZWdzIGJhc2VS
ZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3Bl
cnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwot
Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB3cm9uZ1N0cnVjdHVyZTsKLQotICAgIHdyb25n
U3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MpKTsKLQotICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVncy5wYXlsb2FkR1BS
KCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKLSAgICB3cm9uZ1N0cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLAotICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgbW92ZVRydWVU
byhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihz
bG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQ
cm9wZXJ0eSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdz
LCBwcm9wZXJ0eUdQUikpOwotICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJlZ3MucGF5
bG9hZEdQUigpLCBub2RlKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9uPgotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1wbChOb2Rl
KiBub2RlLCBGdW5jdGlvbiBzbG93UGF0aCkKLXsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51
bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQ
UlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB3cm9u
Z1N0cnVjdHVyZTsKLQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCksCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIG1vdmVU
cnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBzbG93UGF0aCwgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKSk7Ci0g
ICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5vZGUpOwot
fQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHko
Tm9kZSogbm9kZSkKLXsKLSAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKG5v
ZGUsIG9wZXJhdGlvbkhhc093blN0cnVjdHVyZVByb3BlcnR5KTsKLX0KLQotdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKLXsKLSAgICBj
b21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKG5vZGUsIG9wZXJhdGlvbkluU3RydWN0
dXJlUHJvcGVydHkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVy
dHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBDZWxsVXNlKSB7CkBAIC0xMzcwOSwzOSArMTM5NjYsNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCiAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlR2V0RW51bWVyYXRvclBuYW1lKE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIHx8IG5vZGUtPm9wKCkgPT0gR2V0RW51
bWVyYXRvckdlbmVyaWNQbmFtZSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRv
cih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7Ci0gICAgR1BSUmVnIGluZGV4R1BS
ID0gaW5kZXguZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIGluZGV4R1BSLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCAobm9kZS0+b3AoKSA9PSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUpCi0gICAg
ICAgICAgICA/IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleE9mZnNldCgpCi0gICAgICAgICAgICA6IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5k
R2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbV9qaXQubW92ZVZhbHVlKGpz
TnVsbCgpLCByZXN1bHRSZWdzKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBt
X2ppdC5qdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOwotCi0gICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzY3JhdGNo
R1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdzLnRhZ0dQ
UigpKTsKLSNlbmRpZgotCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLCBub2RlKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEV4ZWN1dGFibGUoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5j
dGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xNDkzNCwyOCArMTUxNTgsMjggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAgc2l6ZUdQUiwgc3RvcmFnZUdQUikpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqIG5v
ZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbikKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRp
b25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxH
UFJSZWcsIEdQUlJlZz4oKT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIGluZGV4R1BSID0gSW52
YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsKIAogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgQXJyYXlNb2RlIG1vZGUg
PSBub2RlLT5hcnJheU1vZGUoKTsKICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CiAgICAgY2Fz
ZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICBB
U1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAg
ICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJ
bmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0g
c3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7
CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQpAQCAtMTQ5ODMsMTIgKzE1MjA3LDE0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSog
bm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBj
YXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3Rv
cmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
ICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNoLmZwcigpOwogICAgICAgICBHUFJS
ZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUoaW5kZXhH
UFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAgICAgICBpZiAobW9kZS5pc0luQm91
bmRzKCkpCkBAIC0xNTAxMiwxMyArMTUyMzgsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewot
ICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAg
U3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAg
ICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBzdG9y
YWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3Jh
dGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1bHRHUFIpID0gcHJl
Zml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpOwogICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBvdXRP
ZkJvdW5kcyk7CkBAIC0xNTA0Nyw3MyArMTUyNzUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9HQ1og
c2wKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBUeXBlZEFycmF5
cyBpbiBIYXNJbmRleGVkUHJvcGVydHkgSUMKICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICBzdGQ6OnRpZShpbmRleEdQUiwg
cmVzdWx0R1BSKSA9IHByZWZpeCgpOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CiAKICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBzbG93UGF0aE9wZXJhdGlvbiwg
cmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaW5kZXhHUFIp
KTsKLQotICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLX0KLQot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBuYW1lKE5vZGUqIG5vZGUpCi17
Ci0gICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDAp
OwotICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9k
ZSwgMSk7Ci0gICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChu
b2RlLCAyKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2Up
OwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5RWRnZSk7
Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQ
UiA9IHByb3BlcnR5LmdwcigpOwotCi0gICAgRWRnZSYgZW51bWVyYXRvckVkZ2UgPSBtX2ppdC5n
cmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3Bl
cmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2UpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVu
dW1lcmF0b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0g
ZW51bWVyYXRvci5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0KLSAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIHNsb3dQYXRoLmFw
cGVuZCgKLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAg
Ly8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBl
bnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFj
Y2VzcwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGluZUFjY2VzcyA9IG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsCi0gICAgICAgIGluZGV4R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLQotICAgIG1faml0LmxvYWRW
YWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VHUFIsIGluZGV4R1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwg
cmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVB
Y2Nlc3MubGluaygmbV9qaXQpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOwotICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIpOwotICAg
IG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOwotICAgIG1faml0LnNpZ25FeHRl
bmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmly
c3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbV9qaXQu
bG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0UmVncy5wYXlsb2FkR1BS
KCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0
UHJvcGVydHkpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwotCi0gICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1f
Z3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBi
YXNlR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQUikpKTsKLQotICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDk4Yzc2MTZiOGZkMmZiZjVjNGRk
OGE1NzcxNTA4YWQyNjc5Zjk5ZDEuLmQxMjBiN2I0ZmI4NDQzNjlkNzJjZDYwMTgxYmMwOGMwYjZj
OTE3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
Y2xhc3MgR1BSVGVtcG9yYXJ5OworY2xhc3MgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk7CiBjbGFzcyBK
U1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJhdG9yOwogY2xhc3MgU3BlY3VsYXRp
dmVKSVQ7CkBAIC0yNDYsNiArMjQ3LDggQEAgcHVibGljOgogICAgIH0KICAgICBHUFJSZWcgYWxs
b2NhdGUoR1BSUmVnIHNwZWNpZmljKQogICAgIHsKKyAgICAgICAgaWYgKHNwZWNpZmljID09IElu
dmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0ZSgpOwogI2lmIEVOQUJMRShERkdfUkVH
SVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQogICAgICAgICBtX2ppdC5hZGRSZWdpc3RlckFs
bG9jYXRpb25BdE9mZnNldChtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRpZgpAQCAtMTM0NSwx
MiArMTM0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0ZW1wb3JhcnlSZWdpc3RlckZv
clB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS0+YXJyYXlNb2RlKCkpOwogICAgIH0KICAgICAKKyAg
ICAvLyBXZSB1c2UgYSBzY29wZWRMYW1iZGEgdG8gcGxhY2F0ZSByZWdpc3RlciBhbGxvY2F0aW9u
IHZhbGlkYXRpb24uCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoTm9kZSosIGNvbnN0IFNjb3Bl
ZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHBy
ZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVB
dChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKik7CisgICAg
dm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9y
bWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqKTsgCiAK
LSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsKLSAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2b2lkIGNv
bXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8
c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRG
b3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1l
bnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0
YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKIAogICAgIHZv
aWQgY29tcGlsZUdldFByaXZhdGVOYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRQcml2
YXRlTmFtZUJ5SWQoTm9kZSopOwpAQCAtMTQyNCwxMiArMTQzMCwxMiBAQCBwdWJsaWM6CiAgICAg
SklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlJc0RldGFjaGVkSWZPdXRPZkJvdW5k
cyhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzKTsK
ICAgICB2b2lkIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2soTm9kZSosIEdQUlJlZyBiYXNlR1BS
LCBHUFJSZWcgaW5kZXhHUFIpOwogICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlCeXRlT2Zm
c2V0KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2Rl
KiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8
SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHBy
ZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KEdQUlJlZyBi
YXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAgdm9pZCBj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwor
ICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5cGVkQXJy
YXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZv
cm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKICAgICB2b2lkIGNv
bXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3Bl
cnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9y
T2JqZWN0V2l0aFN0cmluZyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxGb3JPYmpl
Y3RXaXRoU3ltYm9sKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdp
dGhTdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdz
LCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworICAg
IHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKiwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JD
ZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNo
aWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChOb2RlKiwg
RWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21w
aWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CkBAIC0xNDU4LDcgKzE0NjQsNyBAQCBwdWJsaWM6
CiAjZW5kaWYKICAgICAgICAgRWRnZSB2YWx1ZVVzZSk7CiAgICAgdm9pZCBsb2FkRnJvbUludFR5
cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BSUmVnIHJl
c3VsdFJlZywgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgc2V0SW50VHlwZWRBcnJheUxvYWRS
ZXN1bHQoTm9kZSosIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlUeXBlLCBib29sIGNhblNw
ZWN1bGF0ZSk7CisgICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiwgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5cGUsIGJvb2wgY2FuU3BlY3VsYXRlLCBi
b29sIHNob3VsZEJveCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZT4gdm9pZCBj
b21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVnLCBSZWdpc3RlcmVkU3RydWN0dXJlLCBHUFJS
ZWcsIEdQUlJlZywgR1BSUmVnLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmLCBzaXplX3QsIEZ1
bmN0aW9uRXhlY3V0YWJsZSopOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uKE5vZGUqKTsK
ICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwpAQCAtMTUyNCwyMSArMTUz
MCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVG9Mb3dlckNhc2UoTm9kZSopOwogICAg
IHZvaWQgY29tcGlsZVRocm93KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUaHJvd1N0YXRpY0Vy
cm9yKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqKTsK
LSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoTm9kZSopOwot
ICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShOb2RlKik7Ci0gICAgdm9pZCBj
b21waWxlVG9JbmRleFN0cmluZyhOb2RlKik7CisKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9y
TmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRv
ck5leHRFeHRyYWN0TW9kZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXgoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRl
UHJvcGVydHlOYW1lKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwo
Tm9kZSopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgorICAg
IHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShOb2RlKiwgU2xvd1BhdGhGdW5jdGlv
blR5cGUpOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoTm9kZSopOworCiAgICAgdm9pZCBj
b21waWxlUHV0QnlJZEZsdXNoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkKE5vZGUq
KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRGlyZWN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVQdXRCeUlkV2l0aFRoaXMoTm9kZSopOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdGlv
bj4KLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoTm9kZSosIEZ1
bmN0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKik7
Ci0gICAgdm9pZCBjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKik7Ci0gICAgdm9pZCBj
b21waWxlR2V0RGlyZWN0UG5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldFByb3BlcnR5
RW51bWVyYXRvcihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYXRvclBuYW1lKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxlKE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVHZXRHZXR0ZXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldFNldHRlcihOb2RlKik7
CkBAIC0xNTY4LDcgKzE1NzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQ2FsbE51bWJl
ckNvbnN0cnVjdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlja2VuUHJv
bG9ndWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5UYWlsKE5vZGUq
KTsKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSosIFNfSklUT3BlcmF0
aW9uX0dDWik7CisgICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUqLCBTX0pJ
VE9wZXJhdGlvbl9HQ1osIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BS
UmVnPigpPiYgcHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2Rl
Kik7CiAgICAgdm9pZCBjb21waWxlQ2xlYXJDYXRjaExvY2FscyhOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlUHJvZmlsZVR5cGUoTm9kZSopOwpAQCAtMTkyNiw2ICsxOTMzLDggQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKKyAgICBKU1ZhbHVlUmVncyBy
ZWdzKCkgeyByZXR1cm4ganNWYWx1ZVJlZ3MoKTsgfQorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICBHUFJSZWcgZ3ByKCkKICAgICB7CkBAIC0xOTY1LDcgKzE5NzQsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5bG9hZEdQUigpKTsKICAgICB9CiAK
LSAgICBHUFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoKQorICAgIEdQUlJlZyBncHIoV2hp
Y2hWYWx1ZVdvcmQgd2hpY2ggPSBQYXlsb2FkV29yZCkKICAgICB7CiAgICAgICAgIHJldHVybiBq
c1ZhbHVlUmVncygpLmdwcih3aGljaCk7CiAgICAgfQpAQCAtMjAwMywyMSArMjAxMiwyMCBAQCBw
cml2YXRlOgogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgorICAgIFN0b3JhZ2VPcGVyYW5kKCkgPSBkZWZhdWx0OworCiAgICAgZXhw
bGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQogICAg
ICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAgLCBtX2dw
ck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0KTsK
LSAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VL
aW5kKCkgPT0gS25vd25DZWxsVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgp
KSkKLSAgICAgICAgICAgIGdwcigpOworICAgICAgICBlbXBsYWNlKGppdCwgZWRnZSk7CiAgICAg
fQogICAgIAogICAgIH5TdG9yYWdlT3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NFUlQobV9n
cHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIG1faml0LT51bmxvY2sobV9n
cHJPckludmFsaWQpOworICAgICAgICBpZiAobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAgIH0KICAg
ICAKICAgICBFZGdlIGVkZ2UoKSBjb25zdApAQCAtMjAzNiw2ICsyMDQ0LDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVkZ2UoKSk7
CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CisKKyAgICB2b2lkIGVtcGxh
Y2UoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgbV9qaXQg
PSBqaXQ7CisgICAgICAgIG1fZWRnZSA9IGVkZ2U7CisgICAgICAgIEFTU0VSVChtX2dwck9ySW52
YWxpZCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgQVNTRVJUKG1faml0KTsKKyAgICAgICAg
QVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0g
S25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKKyAgICAg
ICAgICAgIGdwcigpOworICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewpAQCAtMjA0
Myw5ICsyMDYyLDkgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAgU3BlY3Vs
YXRpdmVKSVQqIG1faml0OworICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdCB7IG51bGxwdHIgfTsK
ICAgICBFZGdlIG1fZWRnZTsKLSAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CisgICAgR1BSUmVn
IG1fZ3ByT3JJbnZhbGlkIHsgSW52YWxpZEdQUlJlZyB9OwogfTsKIAogCkBAIC0yMTM0LDExICsy
MTUzLDE5IEBAIGNsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHsKIHB1YmxpYzoKICAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZl
SklUKik7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBHUFJSZWcg
c3BlY2lmaWNQYXlsb2FkKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEpTVmFsdWVSZWdz
VGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCwgR1BSUmVn
IHNwZWNpZmljVGFnKTsKKyNlbmRpZgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgSlNW
YWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgVCYgb3BlcmFuZCwg
V2hpY2hWYWx1ZVdvcmQgcmVzdWx0UmVnV29yZCA9IFBheWxvYWRXb3JkKTsKICAgICBKU1ZhbHVl
UmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYp
OwogICAgIH5KU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIAorICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSB7IHJldHVybiAhIXJlZ3MoKTsgfQorCisgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkmIG9wZXJhdG9yPShKU1ZhbHVlUmVnc1RlbXBvcmFyeSYmKSA9IGRlZmF1bHQ7CisKICAgICBK
U1ZhbHVlUmVncyByZWdzKCk7CiAKIHByaXZhdGU6CkBAIC0yMTUwLDYgKzIxNzcsMjYgQEAgcHJp
dmF0ZToKICNlbmRpZgogfTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0
aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCkKKyAgICA6
IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCit7Cit9CisjZWxzZQordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxh
dGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0
V29yZCkKK3sKKyAgICBpZiAocmVzdWx0V29yZCA9PSBQYXlsb2FkV29yZCkgeworICAgICAgICBt
X3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7CisgICAgICAg
IG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9w
YXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAgICAgIG1fdGFnR1BSID0gR1BSVGVt
cG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgIH0KK30KKyNlbmRpZgorCiBjbGFzcyBG
UFJUZW1wb3JhcnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKaW5kZXggOWQ0MDM2OTYxMGQ4OWU0MWU1MTZmNmM0YTQyNWU1ZmQ3MTAyYTFiZS4uYWJjOGQx
OGFhMzk3NjRhMmY5YzBjMDc0MWNmZDFlOWE1OGRkYzQyNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0xODEyLDYg
KzE4MTIsMzM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3VzUHV0QnlW
YWwoTm9kZSogbm9kZSwgQmFzZU9wZXJhbmRUeXBlJiBiYXNlCiAgICAgbm9SZXN1bHQobm9kZSwg
VXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsgICAgCiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Cisg
ICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICBjYXNlIEFycmF5OjpG
b3JjZUV4aXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjaWYgQ09N
UElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCisgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwg
MCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7
CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRl
eC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6
OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKwor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBub2Rl
LAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworCisgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dl
dEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7CisgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkg
eworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5n
KG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
LnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdl
dEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVmaXgpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xsIHByb2Jh
Ymx5IGJlIHJpZ2h0LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJlZ3MgPSBw
cm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRS
ZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJl
Zml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncyk7CisgICAg
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Cisg
ICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBiYXNlLmpz
VmFsdWVSZWdzKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5
LmpzVmFsdWVSZWdzKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAg
ICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRK
Uyk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFu
dGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNp
dGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4s
IG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0g
dGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOworCisgICAgICAg
IEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1faml0LmNvZGVCbG9jaygp
LCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRC
eVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3Ms
IHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5v
ZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAg
ICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAg
ICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSku
aXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAg
ICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5l
cmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc2xvd0Nhc2VzLCB0
aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAgICAgcmVzdWx0UmVncywg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3MsIHByb3Bl
cnR5UmVncyk7CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQo
KSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgpKTsKKwor
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29udGlndW91
czogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChub2RlLT5hcnJheU1vZGUoKS50
eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEludDMyIDogRGF0YUZvcm1hdEpTKTsK
KworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zm
c2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgaWYgKGZvcm1hdCA9PSBEYXRh
Rm9ybWF0SW50MzIpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7CisKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwK
KyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgUGF5
bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKKyAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIG1f
aml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAor
ICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncy50
YWdHUFIoKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwK
KyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHko
cmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
ICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAorICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9k
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAg
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdw
cigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6
aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xl
bmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCksIHJlc3VsdFJlZ3MpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
RW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSkpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJh
dG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNl
cywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICBpZiAobm9k
ZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQg
Zm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZp
eChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5mcHIoKSk7
CisgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4o
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1
ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0LmZwcigpKSk7CisgICAgICAgICAg
ICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIGJveERvdWJs
ZShyZXN1bHQuZnByKCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVncyk7Cisg
ICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFz
ZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAu
ZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0
aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJm
bHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZERvdWJs
ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAgICAgICAgYm94RG91YmxlKHRlbXBS
ZWcsIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpTbG93UHV0
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRz
KCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAg
ICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAg
IEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0
ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZT
RVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigp
KTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwor
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHBy
ZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKKworICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVj
dG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJl
c3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0gbV9q
aXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgbV9qaXQubG9h
ZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGhvbGUpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAg
ICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJh
dGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5
OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1l
bnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IHsKKyAgICAg
ICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBl
KCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVm
aXgpOworICAgIH0gfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMjIzMyw3ICsyNTYyLDEy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAgIGNhc2Ug
U3RyaW5nQ2hhckF0OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJpbmdDaGFyQXQgbm9kZSBo
YXZpbmcgc2FtZSBiYXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25TdHJpbmcobm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsK
KyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6
dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0
KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgcmVzdWx0
ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBBU1NFUlQocHJlZmVy
cmVkRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjI2NSwzMjYgKzI1OTksMjcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0QnlWYWw6
IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAgICAgICAg
Y2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICAgICAgY2FzZSBBcnJheTo6
Rm9yY2VFeGl0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNp
ZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFCTEVfQ09ERSkKLSAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1
ZVJlZ3MoKSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFy
cmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIGluZGV4KTsKLSAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0gICAgICAgICAgICBHUFJSZWcg
aW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIg
PSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9
IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0
T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1c2UobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2UoKTsKLQotICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRh
ZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dH
ZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0
cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsgLy8gU2F2ZSBhIHJlZ2lzdGVy
LCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCi0gICAgICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAg
ICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVS
ZWdzKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJl
Z3MoKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQ2Vs
bCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3Bl
cnR5UmVncyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBqc1ZhbHVlUmVzdWx0OworICAgICAg
ICBHUFJUZW1wb3Jhcnkgb25lUmVnUmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9k
ZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkg
eworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN3aXRj
aCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6
CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNw
ZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLQotICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhp
cywgUmV1c2UsIHByb3BlcnR5LCBUYWdXb3JkKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwgUGF5bG9hZFdvcmQpOwotCi0gICAg
ICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsKLSAgICAg
ICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlc3VsdFRhZy5ncHIoKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAgICAgICAgICBS
ZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwotCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgaWYg
KCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNUeXBlKFNw
ZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElm
Tm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOwotCi0gICAgICAgICAgICBKSVRHZXRCeVZhbEdl
bmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6
OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2Vk
UmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3Vs
dFJlZ3MsIEludmFsaWRHUFJSZWcpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkKLSAgICAg
ICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5m
bygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAobV9zdGF0
ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3ltYm9s
KSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRy
dWU7Ci0KLSAgICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1wKCkpOwot
Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRo
ID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2Rl
T3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlUmVncywgcHJvcGVydHlSZWdz
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93
UGF0aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNs
b3dQYXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpJbnQz
MjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50MzIpIHsK
LSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRz
U2FuZUNoYWluKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxvYWRPZmZz
ZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3ByKCksIG5v
ZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlz
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCks
Ci0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwKLSAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRU
YWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIoKSkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Zy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVj
dWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBH
UFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IHJlc3Vs
dFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0gcmVzdWx0
UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVzdWx0VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aElmRW1wdHkocmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAg
ICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwK
LSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXls
b2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVn
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVn
LCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BS
UmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmZwcigpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkK
LSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFs
dWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOwotICAgICAgICAg
ICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAgICAgY2Fz
ZSBEYXRhRm9ybWF0SW50MzI6CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgorICAg
ICAgICAgICAgICAgIG9uZVJlZ1Jlc3VsdCA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KG9uZVJlZ1Jlc3Vs
dC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJv
cGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsK
LSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0VGFn
UmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRS
ZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0
ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNl
dE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lmxv
YWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOwotICAgICAgICAgICAg
Ym94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyk7Ci0KLSAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFn
UmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VS
ZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAg
ICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdl
UmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKLQotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhp
cyk7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0K
LSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmRW1wdHko
cmVzdWx0VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIo
KSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICBkZWZhdWx0OiB7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOwor
ICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlz
KTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0ganNWYWx1ZVJlc3VsdC5yZWdzKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWco
dGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
QXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZ1Jl
Zyk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoSWZF
bXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0g
ICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAgICAgICAgICAgIHNs
b3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigK
LSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBwcm9wZXJ0
eVJlZykpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywgcmVzdWx0
UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmlu
Zyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RB
cmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBU
eXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsK
LSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgICAgICBjb21waWxlR2V0
QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7
Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxMTIsNTEgKzQxNDcsNTUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAK
LSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldEVudW1l
cmFibGVMZW5ndGgobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0Vu
dW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzRW51bWVyYWJs
ZVN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVQ
cm9wZXJ0eShub2RlKTsKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGlu
ZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJS
ZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc093blN0cnVjdHVyZVBy
b3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsK
KworICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgIGNvbXBpbGVHZXRQ
cm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNl
IEluU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUluU3RydWN0dXJlUHJvcGVy
dHkobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7Ci0g
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZTogeworICAg
ICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFi
bGVJbmRleGVkUHJvcGVydHkpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRl
eDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAg
IGNvbXBpbGVHZXREaXJlY3RQbmFtZShub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRl
UHJvcGVydHlOYW1lKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRQ
cm9wZXJ0eUVudW1lcmF0b3I6IHsKLSAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRv
cihub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOiB7CisgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9yR2V0QnlWYWwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JH
ZW5lcmljUG5hbWU6IHsKLSAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShub2RlKTsK
KworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0
b3JJbkJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBUb0luZGV4
U3RyaW5nOiB7Ci0gICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAgY2FzZSBQ
cm9maWxlVHlwZTogewogICAgICAgICBjb21waWxlUHJvZmlsZVR5cGUobm9kZSk7CiAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKaW5kZXggYjVlMWNjM2U0MmQyZmI0YzlkNGYxMzEwN2U5OGVmZTBiMjA1ZTVjNy4u
MTA3NzEzMTcxNGRhOGE0NTUzYmJjYjVkOGU0NmJkMzM4YjZmNGEyNiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0yMjQ2LDYg
KzIyNDYsMzcwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSogbm9kZSkK
ICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBu
b2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1h
dD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQoreworICAgIHN3aXRjaCAo
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6QW55VHlwZWRBcnJh
eToKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNp
bmdBcmd1bWVudHM6CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAg
ICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BS
UmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4
KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCkpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRSZWdzLmdwcigpKTsKKworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKKyAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRB
cnJheToKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAgIGlmIChtX2dyYXBoLm1f
c2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmlu
Z1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJvcGVydHku
Z3ByKCk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAg
ICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpT
KTsKKworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5k
U3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eUdQUiA9IHByb3BlcnR5LmdwcigpOworCisgICAgICAgIEdQUlRlbXBvcmFyeSBzdHViSW5mbzsK
KyAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAgICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICBzdHVi
SW5mbyA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHN0dWJJbmZvR1BSID0gc3R1
YkluZm8uZ3ByKCk7CisgICAgICAgIH0KKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
OworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0
YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFJlZ3MuZ3ByKCk7
CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGlj
OworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVB
bmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmlnaW4sIG1f
c3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhp
cy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CisKKyAgICAgICAgSklUR2V0QnlWYWxH
ZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5cGU6OkRG
R0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVn
aXN0ZXJzLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVSZWdzKHBy
b3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOworCisgICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYg
KG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3Bl
Y1N5bWJvbCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAg
IGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpCisgICAgICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICAgICAgaWYgKEpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNs
b3dQYXRoSUNDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJ
bmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0
cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAg
ICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxs
cHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KKworICAgICAgICBtX2ppdC5h
ZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKKyAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkludDMy
OgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFycmF5
TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAg
ICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisK
KyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAgICBEYXRh
Rm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkg
PSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFG
b3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQg
PSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9m
Qm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAg
ICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQpOworICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6
OkNvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUg
PSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAg
ICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAorICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQsIG5vZGUsIGZvcm1hdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0
cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBH
UFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZp
eChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVncy5n
cHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICBtX2pp
dC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOworCisgICAgICAgIGlm
IChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsKKyAgICAg
ICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7Cisg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKKyAg
ICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAgfQorCisK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmFy
cmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50
MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwor
ICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgICAg
ICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOworCisgICAgICAgICAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAg
ICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXREb3Vi
bGUpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5s
b2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAg
IGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKQorICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIGlmIChmb3Jt
YXQgPT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICAgICAgYm94RG91YmxlKHJlc3VsdFJl
ZywgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKGZv
cm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlICYmICFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBu
b2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkgJiYgIShub2RlLT5mbGFn
cygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOworCisgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5Lmdwcigp
OworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZQUlRl
bXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7
CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgRGF0YUZvcm1hdCBm
b3JtYXQ7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgocmVz
dWx0SXNVbmJveGVkID8gRGF0YUZvcm1hdERvdWJsZSA6IERhdGFGb3JtYXRKUyk7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZERvdWJsZShN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAgICAgICBpZiAobm9kZS0+YXJyYXlN
b2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICBpZiAoZm9ybWF0
ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCks
IG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVy
dHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQTmFOOworICAgICAgICAgICAgICAgIG1faml0Lmxv
YWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7CisgICAgICAgICAgICAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHRSZWdzKTsK
KyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9kZSk7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCByZXN1
bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQo
KSkpLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MuZ3ByKCksIG5vZGUp
OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgICAgICBib3hEb3Vi
bGUodGVtcFJlZywgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdFJlZ3MuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLmdwcigpLCBub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpTbG93UHV0
QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRz
KCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisKKyAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
c3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CisKKworICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2pp
dC5icmFuY2hJZkVtcHR5KHJlc3VsdEdQUikpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJh
bmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAg
ICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJl
c3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBH
UFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOworCisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
CisgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Zywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpTdHJpbmc6
CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlW
YWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKKyAgICBj
YXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDE2QXJy
YXk6CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6RmxvYXQz
MkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheTogeworICAgICAgICBUeXBlZEFy
cmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAg
ICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBl
ZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAg
fSB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIHsKICAg
ICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CkBAIC0yNzEzLDcgKzMwNzcsMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBTdHJpbmdDaGFy
QXQ6IHsKICAgICAgICAgLy8gUmVsaWVzIG9uIFN0cmluZ0NoYXJBdCBub2RlIGhhdmluZyBzYW1l
IGJhc2ljIGxheW91dCBhcyBHZXRCeVZhbAotICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmlu
Zyhub2RlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBj
b21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1Zh
bHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPihbJl0gKERh
dGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBKU1ZhbHVl
UmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRGb3JtYXQg
PT0gRGF0YUZvcm1hdEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCk7Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0LnJlZ3MoKSwgcHJlZmVycmVk
Rm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTI3NDYs
MzQ1ICszMTE1LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFueVR5cGVkQXJyYXk6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0
VXNpbmdBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlv
bnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6Ci0gICAgICAgICAgICBERkdfQ1JB
U0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1
c2UsIGluZGV4KTsKLSAgICAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLQotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKLSAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIGlu
ZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7Ci0KLSAgICAgICAgICAg
IHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIGluZGV4LnVz
ZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpCaWdJ
bnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKLSAgICAgICAg
Y2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zbG93R2V0
QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTdHJp
bmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVj
dFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAg
ICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgICAg
IEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAgR1BSRmx1
c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHN0dWJJ
bmZvOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgUmV1c2UsIHByb3BlcnR5KTsKLQotICAgICAgICAgICAgR1BSUmVnIHN0dWJJ
bmZvR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmVtcGxhY2Uo
dGhpcyk7Ci0gICAgICAgICAgICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby0+Z3ByKCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1
bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLQotICAgICAgICAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAg
ICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRlQW5kR2Vu
ZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBtX3N0cmVh
bS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB0aGlz
LT51c2VkUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQotICAgICAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKLQotICAgICAgICAg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhi
YXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIp
LCBzdHViSW5mb0dQUik7Ci0KLSAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQotICAgICAgICAgICAg
ICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5p
c1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnBy
b3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5v
ZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wpKQotICAg
ICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1ZTsKLQot
ICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKQotICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLQotICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKLSAg
ICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCi0gICAgICAgICAgICAgICAg
ICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhl
bHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNs
b3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAgICAgICAg
ICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBzdHViSW5mb0dQUiwgbnVsbHB0ciwg
YmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAgICAgICAg
ICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxwdHIsIGJh
c2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7Ci0KLSAgICAgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICBjYXNlIEFycmF5OjpD
b250aWd1b3VzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5k
cygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAy
KSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIo
KTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5v
ZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyk7Ci0gICAgICAgICAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVt
cHR5KHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdC5ncHIoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0gICAgICAg
ICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdC5ncHIoKSkp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dC5ncHIoKSwgbm9kZSwgbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/
IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NU
ZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFt
YmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVy
cmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN3aXRjaCAocHJlZmVycmVk
Rm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKLQotICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkg
ewotICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVz
dWx0UmVnKTsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3MoKSwg
bnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9wZXJ0
eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKLSAgICAgICAgICAgICAgICBhZGRT
bG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAg
ICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9i
amVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZElt
bVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUo
KS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAg
ICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFn
ZS5ncHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigp
OwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOwotICAgICAg
ICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKQot
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1
ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0UmVnKSk7Ci0gICAgICAg
ICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgICAgICBkZWZh
dWx0OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9y
bWF0SlMgfHwgcHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3JtYXRKU0ludDMyKTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAg
ICAgICByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94ZWQgPSBub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkgJiYgIShub2RlLT5mbGFncygp
ICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOwotCi0gICAgICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIHN0ZDo6b3B0aW9uYWw8R1BSVGVtcG9yYXJ5PiByZXN1bHQ7Ci0gICAgICAgICAgICBz
dGQ6Om9wdGlvbmFsPEdQUlJlZz4gcmVzdWx0UmVnOwotICAgICAgICAgICAgaWYgKCFyZXN1bHRJ
c1VuYm94ZWQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuZW1wbGFjZSh0aGlzKTsKLSAgICAg
ICAgICAgICAgICByZXN1bHRSZWcgPSByZXN1bHQtPmdwcigpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgICAgICBGUFJSZWcgdGVt
cFJlZyA9IHRlbXAuZnByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOwotICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHRJc1VuYm94ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBkb25l
ID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgs
IEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgTmFOID0gUE5hTjsKLSAgICAg
ICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4pLCB0ZW1w
UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGRvdWJsZVJlc3VsdCh0ZW1wUmVnLCBub2RlKTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aElmTmFOKHRlbXBSZWcpKTsKLSAgICAgICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcs
ICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1w
KCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJlZ3Mo
KSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBwcm9w
ZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSkpLCAqcmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoKnJlc3Vs
dFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcp
KTsKLSAgICAgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgKnJlc3VsdFJlZyk7Ci0gICAg
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3Bl
cmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAqcmVzdWx0
UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsK
LSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2Ug
QXJyYXk6OkFycmF5U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3Rv
cmFnZTogewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkg
ewotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0Lmdwcigp
KTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwgSlNWYWx1
ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHQuZ3ByKCkpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBu
b2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIFN0b3Jh
Z2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAg
IAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
c3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLSAgICAK
LSAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVnKSk7Ci0gICAgCi0gICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0g
ICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmpl
Y3RJbnQsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKLSAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZh
bE9uRGlyZWN0QXJndW1lbnRzKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
U2NvcGVkQXJndW1lbnRzKG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OkludDhBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToKLSAgICAg
ICAgY2FzZSBBcnJheTo6SW50MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhBcnJh
eToKLSAgICAgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OlVpbnQxNkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpGbG9h
dDY0QXJyYXk6IHsKLSAgICAgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBub2RlLT5hcnJh
eU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOwotICAgICAgICAgICAgaWYgKGlzSW50KHR5cGUpKQot
ICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBl
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZs
b2F0VHlwZWRBcnJheShub2RlLCB0eXBlKTsKLSAgICAgICAgfSB9CisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlc3VsdFJlZ3MsIHByZWZlcnJlZEZv
cm1hdCk7CisgICAgICAgIH0pKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0zNTgxLDcg
KzM2MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVj
dWxhdGUgPSBmYWxzZTsKLSAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwg
cmVzdWx0R1BSLCB0eXBlLCBjYW5TcGVjdWxhdGUpOworICAgICAgICBjb25zdGV4cHIgYm9vbCBz
aG91bGRCb3ggPSBmYWxzZTsKKyAgICAgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9k
ZSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgdHlwZSwgY2FuU3BlY3VsYXRlLCBzaG91bGRCb3gp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtNTI2OSw1MiArNTMxNSw1NiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGNvbXBp
bGVTdG9yZUJhcnJpZXIobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgCi0g
ICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRFbnVtZXJh
YmxlTGVuZ3RoKG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVt
ZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJv
cGVydHkobm9kZSk7CisKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGlu
ZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlv
bkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVnLCBHUFJS
ZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc093blN0cnVjdHVyZVBy
b3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShub2RlKTsK
KworICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgIGNvbXBpbGVHZXRQ
cm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNl
IEluU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUluU3RydWN0dXJlUHJvcGVy
dHkobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7Ci0g
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzSW5kZXhl
ZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZTogeworICAg
ICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTogewotICAg
ICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0VudW1lcmFi
bGVJbmRleGVkUHJvcGVydHkpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRl
eDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0gICAgICAg
IGNvbXBpbGVHZXREaXJlY3RQbmFtZShub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRl
UHJvcGVydHlOYW1lKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRQ
cm9wZXJ0eUVudW1lcmF0b3I6IHsKLSAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRv
cihub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOiB7CisgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9yR2V0QnlWYWwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JH
ZW5lcmljUG5hbWU6IHsKLSAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShub2RlKTsK
KworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0
b3JJbkJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBUb0luZGV4
U3RyaW5nOiB7Ci0gICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAgY2FzZSBQ
cm9maWxlVHlwZTogewogICAgICAgICBjb21waWxlUHJvZmlsZVR5cGUobm9kZSk7CiAgICAgICAg
IGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHAKaW5kZXggMTE3NmQzZTdhZjI4MzMyYjAzMDc0MWI0ZDljNDBm
MGJlZjFkMDM4Yi4uNWY1MWYyMjUxMDRmOWJhNTIyNjk4ZGQwMzY3NWJkZDViZTI3NWZhYSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCkBAIC0yNzMsNiArMjczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgY2FzZSBO
dWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnV0
dGVyZmx5OgorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAg
ICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZhbERp
cmVjdDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpAQCAtMzUyLDYgKzM1Myw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAg
ICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNh
c2UgR2V0QnV0dGVyZmx5OgorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApp
bmRleCAyZTJmMDdkZmM3ZThjMTNkZGIwZWRkNWEyZDA3YTVkODcyZTE3OTA4Li45ZWQ4NzEzM2Y3
NzIzMGUwZTFiZDQ0NWYzMDYyMzQzN2ZjZDYzNDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaApAQCAtMTE0LDYgKzEx
NCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkgXAogICAgIG1hY3Jv
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4LCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkg
XAogICAgIG1hY3JvKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjppbmRleGVkTGVuZ3RoT2Zmc2V0KCkpIFwKKyAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfbW9kZVNldCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Ojptb2RlU2V0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmxhZ3MsIEpTUm9w
ZVN0cmluZzo6b2Zmc2V0T2ZGbGFncygpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2xlbmd0
aCwgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSBcCiAgICAgbWFjcm8oSlNSb3BlU3Ry
aW5nX2ZpYmVyMCwgSlNSb3BlU3RyaW5nOjpvZmZzZXRPZkZpYmVyMCgpKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggYTFhNWZkMjQ0Y2Yy
MTEwMzI2NDE5N2E3NmFlMzBjN2Y2MGY3OWU2NC4uMDNmODY1MmM2Y2I4MmM2MjAyMGQxZTY2YmI1
OWY0NjU5MWQ4M2U0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJp
bGl0aWVzLmNwcApAQCAtMjg2LDE4ICsyODYsMTUgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgIGNhc2Ug
Qm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1
Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICBjYXNl
IEhhc093blN0cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToK
LSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoK
ICAgICBjYXNlIEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRQcm9wZXJ0
eUVudW1lcmF0b3I6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAg
Y2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgotICAgIGNhc2UgVG9JbmRleFN0cmluZzoK
KyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgIGNhc2UgRW51
bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdElu
ZGV4OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgY2Fz
ZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBj
YXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAg
IGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAppbmRleCA2ZmUy
OWQ5OWZhNDQxNDljMTQ2YjIxYWI0MTA0YzQwODAzNjlmMzcxLi45NDUwZDMzZTlmODdhNjczNjJj
ZTc5OThlNjFlMWVhY2ZhYjQ1YWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCkBAIC0xMDIsNiArMTAyLDggQEAKICNpbmNsdWRlIDx3dGYvUmVj
dXJzYWJsZUxhbWJkYS5oPgogI2luY2x1ZGUgPHd0Zi9TdGRVbm9yZGVyZWRTZXQuaD4KIAorI2lu
Y2x1ZGUgIlByb2JlQ29udGV4dC5oIgorCiAjdW5kZWYgUkVMRUFTRV9BU1NFUlQKICNkZWZpbmUg
UkVMRUFTRV9BU1NFUlQoYXNzZXJ0aW9uKSBkbyB7IFwKICAgICBpZiAoIShhc3NlcnRpb24pKSB7
IFwKQEAgLTE1MjMsNDAgKzE1MjUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNvbXBpbGVT
dG9yZUJhcnJpZXIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkob3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSgp
OworICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpOwogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgotICAgICAgICAgICAg
Y29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFz
T3duU3RydWN0dXJlUHJvcGVydHkoKTsKKyAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0
b3I6CisgICAgICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5OgotICAgICAgICAg
ICAgY29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0RGlyZWN0UG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5hbWUoKTsKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICAgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRFbnVt
ZXJhYmxlTGVuZ3RoKCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToK
KyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKCk7CiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCk7CisgICAgICAgIGNhc2UgRW51bWVy
YXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXRF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWUoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlW
YWw6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKCk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgotICAgICAg
ICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUoKTsKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbCgp
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzoKLSAgICAg
ICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhh
c093blByb3BlcnR5OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1l
ZGlhdGU6CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUoKTsKQEAg
LTUwMjAsNyArNTAxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIHdlIGRvbWluYXRlIHRoZW0u
CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKCkKKyAgICBMVmFsdWUgY29t
cGlsZUdldEJ5VmFsSW1wbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwogICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CkBAIC01MDQ3LDggKzUw
NDAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNl
IGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAg
IGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cykKICAg
ICAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAg
ICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBM
QmFzaWNCbG9jayBmYXN0Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01MDgwLDggKzUwNzIs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUg
dG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICBpZiAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpCiAgICAgICAgICAgICAg
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1f
b3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xv
d1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpE
b3VibGU6IHsKQEAgLTUxMDAsOCArNTA5MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQocmVzdWx0LCByZXN1bHQp
KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIHJlc3VsdElzVW5ib3hlZCA9IG1f
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpICYmICEobV9ub2RlLT5m
bGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOwpAQCAtNTE0MSwxOCArNTEzMiwxNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIGlmIChyZXN1bHRJc1VuYm94ZWQpCi0g
ICAgICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShEb3VibGUsIGZhc3RSZXN1bHQsIHNs
b3dSZXN1bHQpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVl
KG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoRG91YmxlLCBmYXN0UmVz
dWx0LCBzbG93UmVzdWx0KTsKKworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwg
ZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEFycmF5
OjpVbmRlY2lkZWQ6IHsKICAgICAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CiAKICAgICAgICAgICAgIHNwZWN1bGF0ZShPdXRP
ZkJvdW5kcywgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lmxlc3NUaGFuKGluZGV4LCBtX291dC5p
bnQzMlplcm8pKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuY29uc3RJbnQ2NChKU1Zh
bHVlOjpWYWx1ZVVuZGVmaW5lZCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOiB7
CkBAIC01MTY5LDggKzUxNTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCBudWxscHRyLCBpc091dE9mQm91bmRzKTsKICAgICAg
ICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0LmJhc2VJbmRleCgKICAgICAg
ICAgICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgYmFzZSwgbV9v
dXQuemVyb0V4dFB0cihpbmRleCkpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
bG9hZDY0KGFkZHJlc3MpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LmxvYWQ2NChhZGRyZXNzKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwpAQCAtNTE5Miw4
ICs1MTgwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xv
d1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0
LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKQEAgLTUyNDYsOCAr
NTIzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIG5hbWVk
UmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93UmVzdWx0KTsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkJpZ0ludDY0QXJy
YXk6CkBAIC01MjU2LDI0ICs1MjQyLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV9n
cmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhtX25vZGUpKSB7CiAgICAgICAgICAgICAgICAg
aWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNl
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgc2V0
SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbE9iamVj
dFN0cmluZywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3Ry
aW5nKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3RyaW5nKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKS51c2VLaW5kKCkgPT0gU3lt
Ym9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3ltYm9sLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdCht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTeW1ib2wobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMCkpLCBsb3dTeW1ib2wobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICByZXR1cm4gdm1DYWxsKAogICAg
ICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWwsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDApKSwgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBs
b3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd0pTVmFsdWUobV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CkBAIC01MzczLDggKzUzNTYsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgIHNldEpT
VmFsdWUocGF0Y2hwb2ludCk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm4gcGF0Y2hwb2ludDsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3Rv
cmFnZToKQEAgLTUzOTAsOCArNTM3Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm82NChy
ZXN1bHQpKTsKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0
byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBlbnN1cmVT
dGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluQm91bmRzID0gbV9v
dXQubmV3QmxvY2soKTsKQEAgLTU0MTcsMTMgKzUzOTgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2Ug
YWxpdmUuCiAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAg
ICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0
LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICAgICAgY29tcGlsZVN0cmluZ0NoYXJB
dCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIGNvbXBpbGVTdHJp
bmdDaGFyQXRJbXBsKCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFy
cmF5OjpJbnQ4QXJyYXk6CkBAIC01NDQ4LDkgKzU0MjcsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG9hZEZyb21JbnRUeXBlZEFycmF5KHBvaW50ZXIs
IHR5cGUpOwogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2
ZSBzaW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgICAgIGVu
c3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIg
Ym9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBzZXRJbnRUeXBl
ZEFycmF5TG9hZFJlc3VsdChyZXN1bHQsIHR5cGUsIGNhblNwZWN1bGF0ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNG
bG9hdCh0eXBlKSk7CkBAIC01NDY5LDggKzU0NDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNpbmNl
IHRoYXQga2VlcHMgc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFs
aXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCkBAIC01NDgwLDggKzU0NTYsMjQgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKICAgICAgICAgY2FzZSBB
cnJheTo6VW5wcm9maWxlZDoKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgYXJyYXkgdHlwZSIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgpCisgICAgeworICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAgICAgICBUeXBlZEFycmF5
VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5VHlwZSgpOworICAgICAg
ICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1
bGF0ZSA9IHRydWU7CisgICAgICAgICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChyZXN1
bHQsIHR5cGUsIGNhblNwZWN1bGF0ZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KworICAgICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgc2V0
RG91YmxlKHJlc3VsdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUocmVz
dWx0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TXlBcmd1bWVudEJ5VmFsKCkK
QEAgLTg1NzEsNyArODU2Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKEludDY0LCBmYXN0UmVzdWx0LCBlbXB0eVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQXQoKQorICAgIExWYWx1ZSBjb21waWxl
U3RyaW5nQ2hhckF0SW1wbCgpCiAgICAgewogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd1N0cmlu
ZyhtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMCkpOwogICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJ
bnQzMihtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSkpOwpAQCAtODY3OSw3ICs4NjcxLDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwog
ICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0
b3JhZ2UgYWxpdmUuCiAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgcmVzdWx0cykpOworICAgICAgICByZXR1cm4g
bV9vdXQucGhpKEludDY0LCByZXN1bHRzKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVTdHJp
bmdDaGFyQXQoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShjb21waWxlU3RyaW5nQ2hhckF0
SW1wbCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlU3RyaW5nQ2hhckNvZGVBdCgp
CkBAIC0xMjkwNiwxNyArMTI5MDMsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgZW1pdFN0b3JlQmFy
cmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX25vZGUtPm9wKCkgPT0gRmVuY2VkU3Rv
cmVCYXJyaWVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5KFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbikKKyAgICBMVmFsdWUgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwoTFZhbHVlIGluZGV4LCBTX0pJVE9wZXJhdGlvbl9H
Q1ogc2xvd1BhdGhPcGVyYXRpb24pCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwog
ICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDApKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBtX25vZGUtPmFycmF5TW9k
ZSgpOwogCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKICAg
ICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6
IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9y
YWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUtPnN0b3JhZ2VDaGlsZEluZGV4
KCkpKTsKIAogICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVhcCYgaGVhcCA9IG1vZGUudHlw
ZSgpID09IEFycmF5OjpJbnQzMiA/CiAgICAgICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50
MzJQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXM7CkBAIC0x
Mjk1MSwxMSArMTI5NDcsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY2hlY2tI
b2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgTFZh
bHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7
CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbV9oZWFwcy5pbmRleGVk
RG91YmxlUHJvcGVydGllczsKICAgICAgICAgICAgIApAQCAtMTI5ODksMTIgKzEyOTg0LDExIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3Vs
dCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICAgICAgTFZh
bHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7
CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogCiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTMwMjYsMTk2
ICsxMzAyMCwzMjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVz
dWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJldHVy
biBtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAg
IH0KIAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0Lm5v
dFplcm82NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBiYXNlLCBpbmRleCkpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9u
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCkpOwogICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHko
KQorICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpCisgICAgeworICAgICAgICBM
VmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwor
ICAgICAgICBzZXRCb29sZWFuKGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKGluZGV4LCBv
cGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVH
ZXRQcm9wZXJ0eUVudW1lcmF0b3IoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsK
LSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQyKCkpOwotICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZVByb3BlcnR5
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBwcm9wZXJ0eSkpOworICAgICAgICBp
ZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxs
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVy
YXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgU2xvd1BhdGhDYWxsPgotICAgIHZvaWQgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5
SW1wbChMVmFsdWUgYmFzZSwgU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCkKKyAgICB2b2lkIGNv
bXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgpCiAgICAgewogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dTdHJpbmcobV9u
b2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMygpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMiht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRv
ciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKIAotICAgICAgICBM
QmFzaWNCbG9jayBpc0NlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2lj
QmxvY2sgY29ycmVjdFN0cnVjdHVyZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
Y29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgaWYgKG1fbm9kZS0+ZW51
bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9k
ZSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBub1ZhbHVlKCksIG1fbm9kZSwg
bV9vdXQubm90WmVybzMyKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcl9lbmRHZW5lcmljUHJvcGVydHlJbmRleCkpKTsKIAotICAgICAgICBt
X291dC5icmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLAot
ICAgICAgICAgICAgdXN1YWxseShpc0NlbGxDYXNlKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBpbmNyZW1lbnQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgY2hlY2tIYXNQcm9wZXJ0eSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwog
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2Fz
ZSwgY29ycmVjdFN0cnVjdHVyZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFs
SW5kZXggPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
aW5pdGlhbEluZGV4Rm9ySGFzUHJvcGVydHkgPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKG1vZGUpLCB1bnN1cmUoY2hlY2tIYXNQ
cm9wZXJ0eSksIHVuc3VyZShpbmNyZW1lbnQpKTsKIAotICAgICAgICBtX291dC5icmFuY2gobV9v
dXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0Nl
bGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSksCi0gICAg
ICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvcnJlY3RTdHJ1Y3R1cmUpKTsKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBMVmFsdWUg
aW5kZXhQaGkgPSBtX291dC5waGkoSW50MzIsIGluaXRpYWxJbmRleCk7CisgICAgICAgICAgICBM
VmFsdWUgaW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFkZChpbmRleFBoaSwgbV9vdXQuaW50MzJP
bmUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5jcmVtZW50ZWRJbmRleFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihpbmNyZW1lbnRlZEluZGV4KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZpbmFsSW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFuY2hvcihpbmNyZW1lbnRlZEluZGV4
KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5sZXNzVGhhbihpbmNyZW1lbnRlZElu
ZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfaW5kZXhMZW5ndGgpKSwgdW5zdXJlKGNoZWNrSGFzUHJvcGVydHkpLCB1bnN1cmUoY29u
dGludWF0aW9uKSk7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29ycmVjdFN0cnVjdHVyZSwg
c2xvd1BhdGgpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBjb3JyZWN0U3RydWN0dXJlUmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKLSAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tIYXNQcm9wZXJ0
eSk7CisgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHlJbmRleCA9IG1fb3V0LnBoaShJbnQzMiwg
aW5pdGlhbEluZGV4Rm9ySGFzUHJvcGVydHksIGluY3JlbWVudGVkSW5kZXhSZXN1bHQpOworICAg
ICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShpbmRleFBoaSwgbV9vdXQuYW5jaG9yKHBy
b3BlcnR5SW5kZXgpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZpbmFsUHJvcGVydHlJ
bmRleCA9IG1fb3V0LmFuY2hvcihwcm9wZXJ0eUluZGV4KTsKKyAgICAgICAgICAgIExWYWx1ZSBo
YXNQcm9wZXJ0eSA9IGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJbXBsKHByb3BlcnR5SW5kZXgs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOworICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKGhhc1Byb3BlcnR5LCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGluY3Jl
bWVudCkpOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24p
OwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcigK
LSAgICAgICAgICAgIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAKLSAgICAgICAgICAgICAgICB2
bUNhbGwoSW50NjQsIHNsb3dQYXRoQ2FsbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFz
ZSwgcHJvcGVydHkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBMVmFsdWUg
ZmluYWxJbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgZmluYWxJbmNyZW1lbnRlZEluZGV4LCBmaW5h
bFByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291
dC56ZXJvRXh0KGZpbmFsSW5kZXgsIEludDY0KSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpO
dW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpJbmRleGVkTW9kZSkgPDwgMzIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
IAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAg
ICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNvcnJlY3RTdHJ1Y3R1cmVSZXN1bHQsIHNs
b3dQYXRoUmVzdWx0KSk7CisgICAgICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDApOworICAgICAgICBpZiAobV9ub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEo
KSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgJiYgYmFzZUVk
Z2UudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93
Q2VsbChiYXNlRWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUo
KSwgbV9ub2RlLCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0Nl
bGxfc3RydWN0dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CisKKyAgICAgICAgICAgIHNw
ZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lm5vdEVxdWFsKG1fb3V0
LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9tb2Rl
U2V0KSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUpKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGluY3JlbWVudCA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291
dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5kZXgg
PSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lmlz
WmVybzMyKG1vZGUpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGluY3JlbWVudCkpOwor
CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQpOworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgaW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFuY2hvcihtX291dC5hZGQoaW5k
ZXgsIG1fb3V0LmludDMyT25lKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4LCBpbmNyZW1lbnRlZElu
ZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0T3IobV9vdXQuemVyb0V4dChp
bmRleCwgSW50NjQpLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpIDw8IDMyKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
TFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCB3
ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcikp
OwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eSgpCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoKQogICAgIHsK
LSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVydHkpOworICAgICAgICBM
VmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAg
ICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihib3hlZFBhaXIpKTsKICAgICB9CiAKLSAgICB2
b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSgpCisgICAgdm9pZCBjb21waWxlRW51
bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpCiAgICAgewotICAgICAgICBjb21waWxlSGFzU3RydWN0
dXJlUHJvcGVydHlJbXBsKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG9wZXJhdGlvbkhhc093
blN0cnVjdHVyZVByb3BlcnR5KTsKKyAgICAgICAgTFZhbHVlIGJveGVkUGFpciA9IGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgTFZhbHVlIGhpZ2hCaXRzID0gbV9vdXQu
Y2FzdFRvSW50MzIobV9vdXQubFNocihib3hlZFBhaXIsIG1fb3V0LmNvbnN0SW50MzIoMzIpKSk7
CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChoaWdoQml0cywgbV9vdXQuY29uc3RJbnQz
MihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spKSk7CiAgICAg
fQogCi0gICAgdm9pZCBjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0eSgpCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBwcm9iYWJseSBoYXZlIGEgbWV0aG9kIG9mIHZhbHVlIHJlY292ZXJ5IGZvciB0
aGlzIG5vZGUgc2luY2UgaXQncyAiZWZmZWN0IiBmcmVlIGJ1dCBhbHdheXMgbGl2ZSBpbiBieXRl
Y29kZS4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSgp
CiAgICAgewotICAgICAgICBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSksIG9wZXJhdGlvbkluU3RydWN0dXJlUHJvcGVydHkpOworICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hp
bGQzKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJhdGlvbkJsb2NrID0gbnVsbHB0cjsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbnVsbHB0cjsKKworICAgICAgICBW
YWx1ZUZyb21CbG9jayBvdXRPZkJvdW5kc1Jlc3VsdDsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
Y2FjaGVkTmFtZVJlc3VsdDsKKworICAgICAgICBhdXRvIHNlZW5Nb2RlcyA9IE9wdGlvblNldDxK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3KG1fbm9kZS0+ZW51bWVyYXRv
ck1ldGFkYXRhKCkpOworCisgICAgICAgIGlmIChzZWVuTW9kZXMuY29udGFpbnNBbnkoeyBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGUgfSkpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNr
SW5kZXggPSBudWxscHRyOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZCb3VuZHNCbG9j
ayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBsb2FkUHJvcGVy
dHlOYW1lQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgY29udGludWF0aW9u
ID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgaWYgKHNlZW5Nb2Rlcy5jb250YWlu
cyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSkgeworICAgICAgICAgICAg
ICAgIGNoZWNrSW5kZXggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIG9wZXJh
dGlvbkJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQudGVzdElzWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpLCB1bnN1cmUoY2hlY2tJbmRleCksIHVuc3VyZShv
cGVyYXRpb25CbG9jaykpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKGNoZWNrSW5kZXgpCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNoZWNrSW5kZXgpOworICAgICAgICAgICAgICAgIExWYWx1ZSBvdXRPZkJvdW5kcyA9IG1f
b3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSk7CisgICAg
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG91dE9mQm91bmRzLCB1bnN1cmUob3V0T2ZCb3VuZHNC
bG9jayksIHVuc3VyZShsb2FkUHJvcGVydHlOYW1lQmxvY2spKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRz
QmxvY2spOworICAgICAgICAgICAgICAgIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpOworICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvYWRQcm9wZXJ0eU5hbWVC
bG9jayk7CisgICAgICAgICAgICAgICAgTFZhbHVlIG5hbWVzVmVjdG9yID0gbV9vdXQubG9hZFB0
cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9w
ZXJ0eU5hbWVzVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBjYWNoZWROYW1lUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubG9hZFB0cihtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy5Xcml0ZUJhcnJpZXJCdWZmZXJfYnVmZmVyQ29udGVudHMuYXRBbnlJbmRleCgpLCBu
YW1lc1ZlY3RvciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBTY2FsZVB0cikpKSk7Cisg
ICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3BlcmF0aW9uUmVzdWx0OworCisg
ICAgICAgIGlmIChzZWVuTW9kZXMuY29udGFpbnMoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJ
bmRleGVkTW9kZSkpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYXRpb25CbG9jaykKKyAgICAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhvcGVyYXRpb25CbG9jayk7CisgICAgICAgICAgICBvcGVy
YXRpb25SZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgaW5k
ZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKKyAgICAgICAgICAgIGlmIChjb250aW51YXRpb24pCisg
ICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnBoaShJbnQ2NCk7Cisg
ICAgICAgIEFTU0VSVChvdXRPZkJvdW5kc1Jlc3VsdCB8fCBjYWNoZWROYW1lUmVzdWx0IHx8IG9w
ZXJhdGlvblJlc3VsdCk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGlJZlNldChyZXN1
bHQsIG91dE9mQm91bmRzUmVzdWx0LCBjYWNoZWROYW1lUmVzdWx0LCBvcGVyYXRpb25SZXN1bHQp
OworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxl
R2V0RGlyZWN0UG5hbWUoKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCgpCiAg
ICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgYmFzZSA9IGxv
d0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsKLSAgICAgICAgTFZhbHVlIHBy
b3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwotICAgICAg
ICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikp
OwotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDMpKTsKKyAgICAgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAwKTsKKyAgICAgICAgRWRnZSBwcm9wZXJ0eU5hbWVFZGdlID0gbV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDEpOworICAgICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDIpOworICAgICAgICBFZGdlIGluZGV4RWRnZSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBjaGVja09m
ZnNldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlubGluZUxvYWQg
PSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkID0g
bV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgYmFzZSA9IERGRzo6aXNDZWxsKGJhc2VFZGdlLnVz
ZUtpbmQoKSkgPyBsb3dDZWxsKGJhc2VFZGdlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pIDog
bG93SlNWYWx1ZShiYXNlRWRnZSk7CisKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBzdG9yYWdl
RWRnZSA/IGxvd1N0b3JhZ2Uoc3RvcmFnZUVkZ2UpIDogbnVsbHB0cjsKKyAgICAgICAgLy8gV2Ug
aGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgcHJvcGVydHlOYW1lIGhlcmUgaW4gY2FzZSBpdCByZXF1
aXJlcyBib3hpbmcgc2luY2UgdGhlIElDIHBhdGggd29uJ3QgZG9taW5hdGUgc3Vic2VxdWVudCB1
c2VzIGluIHN1YnNlcXVlbnQgbm9kZXMuCisgICAgICAgIC8vIElmIGl0J3MgYW4gSW50MzIgYW5k
IHdlIHVzZSBpdCBhcyBzdWNoIHRoaXMgYm94aW5nIHdpbGwgYmUgRENFJ2QgYnkgYjMgbGF0ZXIg
YW55d2F5LgorICAgICAgICBsb3dKU1ZhbHVlKHByb3BlcnR5TmFtZUVkZ2UsIE1hbnVhbE9wZXJh
bmRTcGVjdWxhdGlvbik7CisKKworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihpbmRl
eEVkZ2UpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCA0KSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNSkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNr
U3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBj
aGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBpbmxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBnZW5lcmljSUNCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJh
c2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQz
MihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1
Y3R1cmVJRCkpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09m
ZnNldCkpOworICAgICAgICBMVmFsdWUgaXNOb3ROYW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIo
bW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlIHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgICAgICBt
X291dC5icmFuY2goaXNOb3ROYW1lZCwgdW5zdXJlKGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNo
ZWNrU3RydWN0dXJlQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja1N0cnVj
dHVyZUJsb2NrKTsKKyAgICAgICAgLy8gVE9ETyBjaGVjayBjZWxsPworICAgICAgICBMVmFsdWUg
c3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8gc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGJh
c2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOworICAgICAgICBpZiAo
c3RydWN0dXJlKQorICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5jb25zdEludDMyKHN0
cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0g
bV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKworICAgICAg
ICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVjdHVyZSA9IG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlE
LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0LmFwcGVuZFRvKGNoZWNrT2Zmc2V0LCBpbmxpbmVMb2FkKTsKLSAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3Is
IG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSks
Ci0gICAgICAgICAgICB1bnN1cmUob3V0T2ZMaW5lTG9hZCksIHVuc3VyZShpbmxpbmVMb2FkKSk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0OworICAg
ICAgICBpZiAoaW5kZXhFZGdlLm5vZGUoKSA9PSBwcm9wZXJ0eU5hbWVFZGdlLm5vZGUoKSkgewor
ICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGJh
ZFN0cnVjdHVyZVNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIG1fb3V0
LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5lT3JPdXRP
ZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhiYWRTdHJ1Y3R1cmVTbG93UGF0aCk7CisgICAgICAgICAgICBiYWRTdHJ1Y3R1
cmVTbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVu
dW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3Qp
LCBiYXNlLCBpbmRleCwgZW51bWVyYXRvcikpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5saW5l
T3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOwogCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlubGluZUxvYWQsIG91dE9mTGluZUxvYWQpOworICAgICAgICBtX291dC5h
cHBlbmRUbyhjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spOworICAgICAgICBMVmFsdWUgaW5s
aW5lQ2FwYWNpdHkgPSBudWxscHRyOworICAgICAgICBib29sIGhhc05vT3V0T2ZMaW5lUHJvcGVy
dGllcyA9IGZhbHNlOworICAgICAgICBpZiAoc3RydWN0dXJlKSB7CisgICAgICAgICAgICBoYXNO
b091dE9mTGluZVByb3BlcnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwor
ICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpbmxpbmVDYXBhY2l0
eSkKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQubG9hZDMyKGVudW1lcmF0b3Is
IG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KTsK
KyAgICAgICAgTFZhbHVlIGlzSW5saW5lID0gaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID8gbV9v
dXQuaW50MzJPbmUgOiBtX291dC5iZWxvdyhpbmRleCwgaW5saW5lQ2FwYWNpdHkpOworICAgICAg
ICBtX291dC5icmFuY2goaXNJbmxpbmUsIHVuc3VyZShpbmxpbmVMb2FkQmxvY2spLCB1bnN1cmUo
b3V0T2ZMaW5lTG9hZEJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW5saW5lTG9h
ZEJsb2NrKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0gbV9vdXQuYW5j
aG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnBy
b3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQu
YmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLAogICAgICAgICAgICAg
ICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9hZCwgc2xvd0Nh
c2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFw
cy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRPZkxpbmVM
b2FkQmxvY2spOworICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICBzdG9yYWdlID0g
bV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisKICAgICAg
ICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0LnNpZ25FeHQzMlRvNjQoCi0gICAgICAgICAgICBt
X291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFw
cy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkpKSkpOworICAg
ICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgaW5saW5lQ2FwYWNpdHkpKSk7CiAg
ICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1f
b3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9o
ZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dDYXNlUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KAotICAgICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKLSAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhnZW5lcmljSUNCbG9jayk7Cisg
ICAgICAgIExWYWx1ZSBnZW5lcmljUmVzdWx0ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOworICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFycmF5
VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChlbGVt
ZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpCisgICAgICAgICAgICAgICAgZ2Vu
ZXJpY1Jlc3VsdCA9IGJveEludDMyKGdlbmVyaWNSZXN1bHQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBzdHJpY3RJbnQ1MlRvSlNWYWx1ZShnZW5l
cmljUmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmIChnZW5lcmljUmVzdWx0LT50eXBlKCkgPT0g
RG91YmxlKQorICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveERvdWJsZShnZW5lcmljUmVz
dWx0KTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGlubGluZVJlc3VsdCwgb3V0T2ZM
aW5lUmVzdWx0LCBzbG93Q2FzZVJlc3VsdCkpOwotICAgIH0KKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZ2VuZXJpY0lDUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdlbmVyaWNSZXN1bHQpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJh
YmxlTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKGVudW1lcmF0
b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoKSk7CisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJQ1Jlc3VsdCwgb3V0T2ZMaW5lUmVzdWx0LCBpbmxp
bmVSZXN1bHQpOworICAgICAgICBpZiAoYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQpCisgICAg
ICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHJlc3VsdCwgYmFkU3RydWN0dXJlU2xvd1Bh
dGhSZXN1bHQpOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgdm9p
ZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCkKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBT
bG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzUHJvcGVy
dHkoU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xvd1BhdGhGdW5jdGlvbikKICAgICB7CiAgICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvciht
X29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBDZWxsVXNlKQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJh
dGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCks
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvciwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSkp
OwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgp
Ci0gICAgewotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDAp
OworICAgICAgICBMVmFsdWUgYmFzZSA9IGJhc2VFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlID8g
bG93Q2VsbChiYXNlRWRnZSkgOiBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAgICAgICAgTFZhbHVl
IHByb3BlcnR5TmFtZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEp
KTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMykpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBp
bkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91
bmRzID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOYW1lZEJsb2Nr
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQmxvY2sgPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBtYXRjaGVzU3RydWN0dXJlQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvcGVyYXRpb25CbG9j
ayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGlu
ZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkpLAotICAgICAgICAgICAgdXN1YWxseShp
bkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOworICAgICAgICBtX291dC5icmFuY2gobV9v
dXQudGVzdE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpLCB1bnN1cmUoaXNOYW1lZEJsb2NrKSwgdW5zdXJl
KG9wZXJhdGlvbkJsb2NrKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzTmFtZWRCbG9jayk7
CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5k
cywgb3V0T2ZCb3VuZHMpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIo
ZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91bmRzUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rv
ckNvbnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKGJhc2VFZGdlKSksIHVuc3VyZShp
c0NlbGxCbG9jayksIHVuc3VyZShvcGVyYXRpb25CbG9jaykpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGlzQ2VsbEJsb2NrKTsKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlEID0gbV9vdXQu
bG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwg
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSwKKyAg
ICAgICAgICAgIHVzdWFsbHkobWF0Y2hlc1N0cnVjdHVyZUJsb2NrKSwgcmFyZWx5KG9wZXJhdGlv
bkJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obWF0Y2hlc1N0cnVjdHVyZUJsb2Nr
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmFtZWRSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuYm9vbGVhblRydWUpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHMsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVOdWxsKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG9w
ZXJhdGlvbkJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3BlcmF0aW9uUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbih2bUNhbGwoSW50NjQsIHNsb3dQYXRoRnVuY3Rpb24s
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5TmFtZSwgaW5kZXgsIG1v
ZGUpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91bmRzUmVzdWx0
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgc2V0
Qm9vbGVhbihtX291dC5waGkoSW50MzIsIG5hbWVkUmVzdWx0LCBvcGVyYXRpb25SZXN1bHQpKTsK
ICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lKCkKKyAg
ICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbCgpCiAgICAgewotICAgICAgICBMVmFsdWUg
ZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBp
bmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZC
b3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxv
dyhpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSksCi0gICAgICAgICAgICB1c3VhbGx5
KGluQm91bmRzKSwgcmFyZWx5KG91dE9mQm91bmRzKSk7Ci0KLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgb3V0T2ZCb3VuZHMpOwotICAgICAg
ICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIGluQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAg
ICAgbV9vdXQubG9hZFB0cihtX291dC5iYXNlSW5kZXgobV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9yYWdlLCBtX291
dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRzLCBjb250aW51YXRpb24pOwot
ICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlTnVsbCkpOwotICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGlu
Qm91bmRzUmVzdWx0LCBvdXRPZkJvdW5kc1Jlc3VsdCkpOworICAgICAgICBjb21waWxlRW51bWVy
YXRvckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsKTsKICAgICB9Ci0gICAg
Ci0gICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZygpCisKKyAgICB2b2lkIGNvbXBpbGVFbnVt
ZXJhdG9ySGFzT3duUHJvcGVydHkoKQogICAgIHsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsK
LSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLCBpbmRleCkpOworICAgICAgICBjb21waWxlRW51bWVyYXRv
ckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCkKQEAgLTE3MzQ0
LDcgKzE3NDY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldEludDMyKHJlc3VsdCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKG1f
bm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsKICAgICAgICAg
ICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgpLCBudWxs
cHRyLCBtX291dC5sZXNzVGhhbihyZXN1bHQsIG1fb3V0LmludDMyWmVybykpOwpAQCAtMjAyOTYs
NiArMjA0MjAsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAg
ICB9CiAKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGludHMgcmlnaHQgbm93LgorICAgIFBh
dGNocG9pbnRWYWx1ZSogZGF0YUxvZ0ZvckRlYnVnZ2luZyhjb25zdCBjaGFyKiBwcmVmaXgsIExW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcmVzdWx0ID0gbV9v
dXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgcmVzdWx0LT5lZmZlY3RzLndyaXRlc0xvY2Fs
U3RhdGUgPSB0cnVlOworICAgICAgICByZXN1bHQtPmFwcGVuZCh2YWx1ZSwgVmFsdWVSZXA6OnJl
ZyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBUeXBlIHZhbHVlVHlwZSA9IHZhbHVlLT50eXBl
KCk7CisgICAgICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAgIEFsbG93TWFj
cm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAgICAgICAgICAg
aml0LnByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgeworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gSW50MzIpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPGludDMyX3Q+KEdQUkluZm86OnJlZ1QwKSk7CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4ocHJlZml4LCBj
b250ZXh0LmdwcjxKU1ZhbHVlPihHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgQXZhaWxh
YmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJpbGl0eUNhbGN1
bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KICAgICAKICAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dy
YXBoLm1fdm07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IDJkZmRl
ODZmNzJiZWQ3M2Q3M2RjOGFlYjVkNGIyYjM2YzhiMjA1MGUuLmExOTE0ZDI3N2M4ZjllMTAzYTg5
Y2E4MWY4ZWFhNDFjYTc5ZDhlZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQu
aApAQCAtMTQ1LDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZEluY29taW5nVG9QaGko
TFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxvY2spOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFBh
cmFtcz4KICAgICB2b2lkIGFkZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxv
Y2ssIFBhcmFtcy4uLiB0aGVSZXN0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+
CisgICAgdm9pZCBhZGRJbmNvbWluZ1RvUGhpSWZTZXQoTFZhbHVlIHBoaSwgUGFyYW1zLi4uIHRo
ZVJlc3QpOwogICAgIAogICAgIExWYWx1ZSBvcGFxdWUoTFZhbHVlKTsKIApAQCAtNDkzLDYgKzQ5
NSwxNiBAQCBpbmxpbmUgdm9pZCBPdXRwdXQ6OmFkZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaSwg
VmFsdWVGcm9tQmxvY2sgdmFsdWUsIFBhcmFtcy4uLgogICAgIGFkZEluY29taW5nVG9QaGkocGhp
LCB0aGVSZXN0Li4uKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgoraW5saW5l
IHZvaWQgT3V0cHV0OjphZGRJbmNvbWluZ1RvUGhpSWZTZXQoTFZhbHVlIHBoaSwgUGFyYW1zLi4u
IHZhbHVlcykKK3sKKyAgICBhdXRvIGFkZFBoaSA9IFsmXSAoVmFsdWVGcm9tQmxvY2sgdmFsdWUp
IHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgYWRkSW5jb21pbmdUb1BoaShwaGks
IHZhbHVlKTsKKyAgICB9OworICAgIChhZGRQaGkodmFsdWVzKSwuLi4pOworfQorCiBBTExPV19V
TlVTRURfUEFSQU1FVEVSU19FTkQKIElHTk9SRV9XQVJOSU5HU19FTkQKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZ2VuZXJhdG9yL0RTTC5yYgppbmRleCA3MzE3MTAwOTZjZjNlMjQ5OGFlNDVkZGEyNmFh
ODJlNzljZDQ2YTRlLi42OTdkZThkOThmMTlkZTM5ZTQxYzQyNGFiNTg0MDlmNGY1MTliMDY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0RTTC5yYgpAQCAtMTM4LDYgKzEzOCw3IEBA
IG1vZHVsZSBEU0wKICNpbmNsdWRlICJHZXRCeVZhbEhpc3RvcnkuaCIKICNpbmNsdWRlICJJbnN0
cnVjdGlvbi5oIgogI2luY2x1ZGUgIkl0ZXJhdGlvbk1vZGVNZXRhZGF0YS5oIgorI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgogI2luY2x1
ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oCmluZGV4IDQ0NDYz
NWU5ODBkOTBhZjgzN2ViZDYzYjk2MmZhZWRlMmVjNTM1MDMuLmQ4NzljOTBiZTMxMTc4NjIzM2Y1
MjZiMTgzZWRmMWNiM2M3YmIzOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9SZWdpc3Rlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3Rlci5oCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ2FsbEZyYW1lKik7CiAgICAgICAg
IEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShDb2RlQmxvY2sqKTsKICAgICAgICAg
QUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTU2NvcGUqKTsKLSAgICAgICAgQUxX
QVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEpTT2JqZWN0Kik7CisgICAgICAgIEFMV0FZ
U19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU0NlbGwqKTsKICAgICAgICAgQUxXQVlTX0lO
TElORSBSZWdpc3RlciYgb3BlcmF0b3I9KEVuY29kZWRKU1ZhbHVlKTsKIAogICAgICAgICBpbnQz
Ml90IGkoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9SZWdpc3RlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9SZWdpc3RlcklubGluZXMuaAppbmRleCBjNTZlZjVlNDU1NGNiMTAzYWJlYmU3MmU2Mjk4Zjhj
NDhhYWQ5ODYwLi41OTNlZjY2NjhkZTJlMDNhNjU5YjM5ZjMxYWY2MGY4OGMyNzgzOTg4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5l
cy5oCkBAIC02Myw3ICs2Myw3IEBAIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJlZ2lzdGVyOjpv
cGVyYXRvcj0oQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1B
TFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTT2JqZWN0KiBvYmpl
Y3QpCitBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBSZWdpc3Rlcjo6b3BlcmF0b3I9KEpTQ2VsbCog
b2JqZWN0KQogewogICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShvYmplY3Qp
KTsKICAgICByZXR1cm4gKnRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAppbmRleCBhYzhiNTEzN2Q4NTM1NDUwNmFlZWRjZWRiZDFjNWJkNzcyNTc5YzAx
Li4wYjRjMmI5YmUwZjVmZmYxNTFhM2IwN2U5YWEyNGZjY2Y5MDUwMzk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKQEAgLTE4OCw3ICsxODgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHN0b3JlMzIocmVncy50YWdHUFIoKSwgYml0d2lzZV9jYXN0PHZvaWQq
PihiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSArIFRhZ09mZnNldCkpOwogI2VuZGlm
CiAgICAgfQotICAgIAorCiAgICAgdm9pZCBsb2FkVmFsdWUoQWRkcmVzcyBhZGRyZXNzLCBKU1Zh
bHVlUmVncyByZWdzKQogICAgIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtODg5LDcgKzg4OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJyYW5jaDgoCiAgICAgICAgICAgICBCZWxvdywg
QWRkcmVzcyhjZWxsR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKE9iamVjdFR5cGUpKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb3RlIHRoYXQgZmlyc3Qg
YW5kIGxhc3QgYXJlIGluY2x1c2l2ZS4KICAgICBKdW1wIGJyYW5jaElmVHlwZShHUFJSZWcgY2Vs
bEdQUiwgSlNUeXBlUmFuZ2UgcmFuZ2UpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CmluZGV4IDQyYjhjYWY1ZjVjYjhjNGI1ZjNhZGViM2VkYTQ3YWIyNjkwZDQ5MDQuLmM5YjAxYzBk
MDVhNWQ2ZjBjMTFkMGEzNzM4MWMyZDk4ZWZhNDcxMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKQEAgLTMwOCwxMCArMzA4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBh
c3MoKQogICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfd2l0aF9zcHJlYWQpCiAgICAg
ICAgIERFRklORV9TTE9XX09QKG5ld19hcnJheV9idWZmZXIpCiAgICAgICAgIERFRklORV9TTE9X
X09QKHNwcmVhZCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KQotICAgICAgICBERUZJTkVfU0xPV19PUChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKICAgICAg
ICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi0gICAgICAgIERFRklO
RV9TTE9XX09QKHRvX2luZGV4X3N0cmluZykKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHMpCiAgICAgICAgIERFRklORV9TTE9XX09QKGNyZWF0ZV9zY29wZWRf
YXJndW1lbnRzKQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfY2xvbmVkX2FyZ3VtZW50
cykKQEAgLTM2NSw2ICszNjIsMTAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVG
SU5FX09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlf
dmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9uZXh0KQorICAgICAgICBERUZJ
TkVfT1Aob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51
bWVyYXRvcl9pbl9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2hhc19v
d25fcHJvcGVydHkpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfcHJpdmF0ZV9uYW1lKQogICAg
ICAgICBERUZJTkVfT1Aob3Bfc2V0X3ByaXZhdGVfYnJhbmQpCiAgICAgICAgIERFRklORV9PUChv
cF9jaGVja19wcml2YXRlX2JyYW5kKQpAQCAtNDczLDE0ICs0NzQsNiBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfZnJvbV9hcmd1
bWVudHMpCiAgICAgICAgIERFRklORV9PUChvcF9wdXRfdG9fYXJndW1lbnRzKQogCi0gICAgICAg
IERFRklORV9PUChvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KQotICAgICAgICBE
RUZJTkVfT1Aob3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBE
RUZJTkVfT1Aob3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9P
UChvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9nZXRfZGly
ZWN0X3BuYW1lKQotICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUpCi0gICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCi0gICAg
ICAgICAgICAKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1
ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQogCkBAIC01
NzgsNiArNTcxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV9pZF93aXRoX3RoaXMpCiAgICAgICAgIERF
RklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9w
cml2YXRlX25hbWUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9zZXRfcHJpdmF0ZV9i
cmFuZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2NoZWNrX3ByaXZhdGVfYnJhbmQp
CkBAIC02MDksNyArNjAzLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV92YWwpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfaWQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChv
cF9zdWIpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5KQogI2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2dldF9mcm9tX3Njb3BlKQogI2VuZGlmCkBAIC02NDIsMTEgKzYz
NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5vdCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
c3RyaWN0ZXEpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5zdHJpY3RlcSkKLSAg
ICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ2V0X2RpcmVjdF9wbmFtZSkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ2V0X3Byb3RvdHlwZV9vZikKLSAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChoYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkK
LSAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaW5fc3RydWN0dXJlX3Byb3BlcnR5KQog
I2lmICFFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AocmVzb2x2ZV9zY29wZSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXgg
NDg3YTVhYzViOGU1ZDhhOWQ4MGIyYzZkMzA2ZTA4MTUyMWI4MjgxNC4uNGRhN2EyZmQ2NmYxNTBj
ZmNkMzU5MDJmZTkzZTU0ZmVkMmE1YWQyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC00
NTMsNiArNDUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBzcmMsIEpTVmFsdWVSZWdzIGRzdCk7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBKU1Zh
bHVlUmVncyBzcmMpOworICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNv
bnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVy
KTsKIAogICAgICAgICBpbnQzMl90IGdldE9wZXJhbmRDb25zdGFudEludChWaXJ0dWFsUmVnaXN0
ZXIgc3JjKTsKICAgICAgICAgZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShWaXJ0dWFs
UmVnaXN0ZXIgc3JjKTsKQEAgLTQ2OSw3ICs0NzAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBlbWl0TG9hZDIoVmlydHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzEsIFJlZ2lz
dGVySUQgcGF5bG9hZDEsIFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcyLCBSZWdpc3Rl
cklEIHBheWxvYWQyKTsKIAogICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJlZ2lzdGVy
LCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdp
c3Rlcik7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJlZ2lzdGVyLCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwogICAgICAgICB2b2lk
IGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdpc3RlciwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJv
b2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoVmly
dHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxz
ZSk7CkBAIC02NzAsMjEgKzY3MCwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBl
bWl0X29wX3VuZXhwZWN0ZWRfbG9hZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX3Vyc2hpZnQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9wQ29kZVR5cGU+Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3Bl
cnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX2Vu
dW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfaW5fc3RydWN0dXJl
X3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9nZXRf
ZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2
b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKik7
CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xv
Z3VlKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
dG9fcHJvcGVydHlfa2V5KGNvbnN0IEluc3RydWN0aW9uKik7CiAKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgT3Bjb2RlVHlwZT4KKyAgICAgICAgdm9pZCBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nh
c2UoY29uc3QgT3Bjb2RlVHlwZSYsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
KworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9u
Kik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7
CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1Bh
dGhGdW5jdGlvblR5cGU+CisgICAgICAgIHZvaWQgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0
eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBjb25zdCBPcGNvZGVUeXBlJiwgU2xvd1BhdGhGdW5j
dGlvblR5cGUpOworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaGFzX293
bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOworCiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfYWRkKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwpAQCAtNzM1LDcgKzczOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3B1dF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X3By
aXZhdGVfbmFtZShjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9zdWIoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7Ci0gICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbios
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKIAogICAgICAgICB2b2lkIGVtaXRf
b3BfcmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY2ZGIzZjU5YzRhYTRlMDI3YTE1NjExZWRiYmEy
NjFjYWQ4ZWZlZDYuLjliYTEwZWQ2NzcyZmFlYzNmMjBlNjM0YmFiZTE0YWRkOWExMDg5MDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcApAQCAtMTY5Miw0NiArMTY5
MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1
cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4o
KTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVu
dW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0
b3IsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OwotCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJv
cGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19v
d25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0
cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5T
dHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAg
ICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAor
CiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAg
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0
aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUsIG51bGxwdHIpOwpAQCAtMTczOSw3ICsxNzA1LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJv
ZmlsZTo6SW5saW5lQ2FjaGUpOwotICAgIAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBl
LCBieVZhbEluZm8tPnNsb3dQYXRoVGFyZ2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dD
YXNlcywgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAKQEAgLTE3NDgsNyArMTcxNCw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIoCiAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwg
SklUU3R1YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9w
ZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9j
aykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBp
ZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkgewogICAgICAgICBi
eVZhbEluZm8tPm1fYmFkVHlwZUp1bXBUYXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHVi
Um91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAg
ICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0aW9uSGFzSW5kZXhlZFBy
b3BlcnR5R2VuZXJpYzsKQEAgLTE3NTgsMTcxICsxNzI0LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHQKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4
ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyhtX2J5dGVjb2RlSW5kZXgpOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLQotICAgIC8v
IFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4g
aW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNo
ZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JM
ZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWdu
ZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNl
IHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRH
YikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4
dGVuZGluZyB0aGUgdmFsdWUKLSAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBp
dCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhl
ciB0aGFuIHNpZ24KLSAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRv
IHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dv
cmQocmVnVDEsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MCwgYmFzZSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdU
MiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwg
cmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmls
ZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5k
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVt
cExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9u
LCBtb2RlLCBiYWRUeXBlLCBieVZhbEluZm8pOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotCi0gICAgaWYgKCFK
SVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQotICAgICAgICBhZGRTbG93
Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExh
YmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLQotICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1f
Ynl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBuZXh0SG90UGF0aCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1l
cmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0g
Ynl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2Rl
Lm1fcHJvcGVydHk7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNl
LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwot
Ci0gICAgQ2FsbCBjYWxsOwotICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFz
ZWxpbmVKSVQpKSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+bV9zbG93T3BlcmF0aW9uID0gb3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdDsKLSAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRy
KGJ5VmFsSW5mbyksIEdQUkluZm86Om5vbkFyZ0dQUjApOwotICAgICAgICBjYWxsT3BlcmF0aW9u
PGRlY2x0eXBlKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQpPihBZGRyZXNzKEdQ
UkluZm86Om5vbkFyZ0dQUjAsIEJ5VmFsSW5mbzo6b2Zmc2V0T2ZTbG93T3BlcmF0aW9uKCkpLCBk
c3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJl
Z1QxLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwLCByZWdUMSwgYnlW
YWxJbmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAg
bV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Rp
cmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+
KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1
YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBp
bmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBj
ZWxsCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVz
cyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihpbmRleCwgcmVnVDEpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6
Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QxLCByZWdUMSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVz
RWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgLy8g
T3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlz
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQo
KSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbmVnMzIo
cmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgaW50MzJf
dCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1
dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsK
LSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgcmVn
VDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJh
dG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9
IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBy
ZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0g
ICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0
KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkp
LCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qx
LCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
LQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5h
bWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAs
IHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCks
IHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IDRkNzQxMjZiZTFlM2RlNDMw
ZDNhNmQ5Y2I3ZmRkYjZkYzg2ZjdlYjQuLmNhMzJkYzFjNTZlNjI3YWI2ZTBlNjI2OWU1Mzk4MTNj
ZWVlN2QwYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
czMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKQEAgLTExNDIsNDcgKzExNDIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlw
ZT4KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDb2RlVHlwZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVt
ZXJhdG9yLCByZWdUMSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVt
aXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5Pihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgCisKICAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7Ci0gICAgCisKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5
cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KICAgICBKdW1wTGlzdCBzbG93Q2FzZXMg
PSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFk
VHlwZSwgbnVsbHB0cik7CkBAIC0xMTkwLDcgKzExNTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7
Ci0gICAgCisKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1Bh
dGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNs
b3dQYXRoVGFyZ2V0KTsKIApAQCAtMTE5OSwxNzAgKzExNjQsMTEgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5B
ZGRyZXNzUHQKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1Jf
U1RVQigKICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0
clRhZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVz
LCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVy
bkFkZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAKKwogICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChieVZhbEluZm8tPm1fYmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJ
VFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgp
KSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8UmV0
dXJuQWRkcmVzc1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPFJldHVybkFkZHJlc3NQdHJU
YWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7Ci0gICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUu
bV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVy
dHk7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbyht
X2J5dGVjb2RlSW5kZXgpOwotICAgIAotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWQo
cHJvcGVydHksIHJlZ1QzLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQz
MihyZWdUMykpOwotCi0gICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdy
ZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBt
YXR0ZXIuCi0gICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBh
Z2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKLSAg
ICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVz
cyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KLSAgICAvLyBzaXplIGlz
IGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUg
YmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQotICAgIC8vIHRvIDY0LWJpdHMg
aXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4g
V2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgotICAgIC8vIGV4dGVuZGluZyBzaW5jZSBp
dCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgot
ICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwgcmVnVDEpOwotCi0gICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2Rl
IG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRU
eXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5
cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRG
b3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlLCBieVZhbEluZm8p
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShi
YWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci0KLSAg
ICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0
aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2Rl
SW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4
dEhvdFBhdGgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2lu
ZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3Bl
cnR5OwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1tt
X2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotCi0gICAgTGFiZWwgc2xvd1BhdGgg
PSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
ZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgYnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0g
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJu
QWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVj
b2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0KLSAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1Qw
KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICAvLyBDaGVj
ayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsK
LSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVz
cyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdExvYWRQYXlsb2Fk
KGluZGV4LCByZWdUMik7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJh
dG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2Vzcwot
ICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwg
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBh
Y2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwg
cmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVnVDEpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0g
ICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0
IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBz
dWIzMihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbmVnMzIocmVnVDIpOwotICAgIGludDMy
X3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5C
dXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7
Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
cmVnVDEpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBv
ZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4
LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBK
dW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkp
OwotCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgp
OwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2NhbGVQ
dHIpLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJl
Z1QyKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwg
cmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQo
aW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwot
ICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQo
KSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgU2Nh
bGVQdHIpLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyks
IHJlZ1QyKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDIsIHJlZ1QwKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggMTVlMWQzNDU3OWI2
ZDRjOGMxNzBkMjM1MGM2YzM2NDQzZmZlYTQxNS4uMzc5NzdhYmM3ZjdlYmQ0ODJmYWQ0MTI5YWM2
Mzg1NjRhNTNmMjQyZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJKU0xleGljYWxFbnZp
cm9ubWVudC5oIgogI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJQcml2YXRlRmll
bGRQdXRLaW5kLmgiCisjaW5jbHVkZSAiUHJvYmVDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2xvd1Bh
dGhDYWxsLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNsdWRlICJUaHVu
a0dlbmVyYXRvcnMuaCIKQEAgLTg2LDEwICs4NywxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3RlbXBs
YXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+Cit2b2lkIEpJVDo6Z2VuZXJhdGVHZXRCeVZhbFNsb3dD
YXNlKGNvbnN0IE9wY29kZVR5cGUmIGJ5dGVjb2RlLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIGlmIChoYXNBbnlTbG93Q2FzZXMoaXRlcikpIHsKLSAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsK
ICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwogICAgICAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICAgICAg
QXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxlOwpAQCAtMTM2
LDYgKzEzNywxMSBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8UwogICAgIH0KIH0KIAordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBn
ZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFs
PigpLCBpdGVyKTsKK30KKwogI2lmIEVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPEpJVFRodW5rUHRyVGFnPiBKSVQ6OnNsb3dfb3BfZ2V0X2J5X3ZhbF9wcmVw
YXJlQ2FsbEdlbmVyYXRvcihWTSYgdm0pCiB7CkBAIC0yOTc3LDYgKzI5ODMsMTk0IEBAIHZvaWQg
SklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9w
UHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7CiAKK3ZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvck5leHQ+
KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
aW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9wZXJ0eU5h
bWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVy
YXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKworICAgIEp1bXBMaXN0IGRvbmU7CisgICAg
SnVtcExpc3Qgb3BlcmF0aW9uQ2FzZXM7CisKKyAgICBHUFJSZWcgbW9kZUdQUiA9IHJlZ1QwOwor
ICAgIEdQUlJlZyBpbmRleEdQUiA9IHJlZ1QxOworICAgIEdQUlJlZyBiYXNlR1BSID0gcmVnVDI7
CisKKyAgICAvLyBUaGlzIGlzIHRoZSBtb3N0IGNvbW1vbiBtb2RlIHNldCB3ZSB0ZW5kIHRvIHNl
ZSwgc28gc3BlY2lhbCBjYXNlIGl0IGlmIHdlIHByb2ZpbGUgaXQgaW4gdGhlIExMSW50LgorICAg
IGlmIChtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSA9PSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpIHsKKyAgICAgICAgR1BSUmVnIGVudW1lcmF0b3JHUFIg
PSByZWdUMzsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCBlbnVt
ZXJhdG9yR1BSKTsKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihO
b25aZXJvLCBBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
bW9kZVNldE9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKH5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpKSk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgYmFzZUdQUik7CisgICAgICAgIGxvYWQzMihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSksIGluZGV4R1BS
KTsKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCBpbmRl
eEdQUiwgQWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBtb2RlR1BSKTsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBKdW1wIG5v
dEluaXQgPSBicmFuY2hUZXN0MzIoWmVybywgbW9kZUdQUik7CisgICAgICAgIC8vIE5lZWQgdG8g
dXNlIGFkZDY0IHNpbmNlIHRoaXMgaXMgYSBKU1ZhbHVlIGludDMyLgorICAgICAgICBhZGQ2NChU
cnVzdGVkSW1tMzIoMSksIGluZGV4R1BSKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgaW5kZXhHUFIpOworICAgICAgICBub3RJbml0LmxpbmsodGhpcyk7CisgICAgICAg
IHN0b3JlVHJ1c3RlZFZhbHVlKGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpLCBhZGRyZXNzRm9yKG1vZGUpKTsK
KworICAgICAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworICAgICAgICBsb2FkUHRyKEFkZHJl
c3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0
eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCBlbnVtZXJhdG9yR1BSKTsKKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBjbGVhciB0aGUgaGlnaCBiaXRzIGZyb20gdGhlIG51bWJlciBlbmNvZGluZy4KKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKC0xKSwgaW5kZXhHUFIpOworICAgICAgICBsb2FkUHRyKEJh
c2VJbmRleChlbnVtZXJhdG9yR1BSLCBpbmRleEdQUiwgU2NhbGVQdHIpLCBlbnVtZXJhdG9yR1BS
KTsKKworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgZW51bWVy
YXRvckdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAgICAgb3V0T2ZC
b3VuZHMubGluayh0aGlzKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNOdWxsKCksIGFk
ZHJlc3NGb3IocHJvcGVydHlOYW1lKSk7CisgICAgICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7Cisg
ICAgfQorCisgICAgb3BlcmF0aW9uQ2FzZXMubGluayh0aGlzKTsKKworICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51
bWVyYXRvcl9uZXh0KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworCisgICAgZG9uZS5saW5r
KHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1v
ZGUgPSBieXRlY29kZS5tX21vZGU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
KyAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWU7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
OworCisgICAgSnVtcExpc3QgZG9uZUNhc2VzOworCisgICAgYXV0byByZXN1bHRHUFIgPSByZWdU
MDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisKKyAgICBvcjgocmVnVDIsIEFic29sdXRlQWRkcmVz
cygmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKyAgICAvLyBUaGlzIGlzIGFsd2F5
cyBhbiBpbnQzMiBlbmNvZGVkIHZhbHVlLgorICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2Rl
ID0gYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2Vu
ZXJpY01vZGUpKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwor
CisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
ZW51bWVyYXRvciwgcmVnVDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMyk7CisgICAgSnVtcCBzdHJ1Y3R1cmVNaXNtYXRjaCA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQuCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOwor
ICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxp
bmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICBKdW1wIG91dE9mTGlu
ZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSwgcmVnVDApOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOworCisg
ICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0
IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBz
dWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgbmVnMzIocmVnVDEpOworICAgIHNpZ25F
eHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSwgcmVz
dWx0R1BSKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBzdHJ1Y3R1cmVN
aXNtYXRjaC5saW5rKHRoaXMpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKSwg
Jm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKTsKKworICAgIGlzTm90T3duU3RydWN0dXJl
TW9kZS5saW5rKHRoaXMpOworICAgIEp1bXAgaXNOb3RJbmRleGVkID0gYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVk
TW9kZSkpOworICAgIC8vIFJlcGxhY2UgdGhlIHN0cmluZyB3aXRoIHRoZSBpbmRleC4KKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisKKyAgICBpc05vdEluZGV4ZWQu
bGluayh0aGlzKTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJl
Z1QyLCBwcm9maWxlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwg
cmVnVDEpOworCisgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVC
bG9jaywgSklUVHlwZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwg
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVn
aXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVn
cyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVn
VDIpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBpZiAoIUpJVENvZGU6
OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXAoKSk7CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgpOworICAg
IG1fZ2V0QnlWYWxzLmFwcGVuZChnZW4pOworCisgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CisK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRH
UFIpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sK
KyAgICBnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVu
dW1lcmF0b3JHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcGNv
ZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2Vu
dW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUg
Z2VuZXJhbENhc2UpCit7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owor
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxS
ZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7CisgICAgb3I4KHJl
Z1QwLCBBYnNvbHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworCisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBz
bG93Q2FzZXMubGluayh0aGlzKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwo
dGhpcywgY3VycmVudEluc3RydWN0aW9uLCBnZW5lcmFsQ2FzZSk7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKKworICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKSwgc2xv
d19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVudElu
c3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3Bl
cnR5PigpLCBzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKK30KKwogI2Vs
c2UgLy8gVVNFKEpTVkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVh
bFJlZ2lzdGVyIG93bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUg
bW9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwCmluZGV4IDU4ZTVkNTJmZTViMDhhZTI5ZTNlNWRkZGUzZDc0Njc5NjdmMjMw
MTkuLjBlYjJkN2UzZDU0YzM2NDgwYWUwZDczNTE0NThhMmNjOGIzNDI3OTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApA
QCAtMTUwNSw2ICsxNTA1LDMwIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVs
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB0ZW1wbGF0ZSB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7
CiAKKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dl
dF9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZP
Uk0oKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0
b3JfaW5fYnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9w
ZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNh
MDAxYTU2NTVlYTFiYjFkYjU5NTczY2Y2MDguLmU3MTgzYTcyYTM2OGYxYTI4MDQ2ODRkMmIwNzY0
N2YyMjA2OGYxMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTE5OTIsMTkgKzE5OTIsMTQgQEAgc2xvd1BhdGhPcChj
cmVhdGVfZ2VuZXJhdG9yKQogc2xvd1BhdGhPcChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQogc2xv
d1BhdGhPcChkZWZpbmVfYWNjZXNzb3JfcHJvcGVydHkpCiBzbG93UGF0aE9wKGRlZmluZV9kYXRh
X3Byb3BlcnR5KQotc2xvd1BhdGhPcChlbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCi1zbG93UGF0
aE9wKGVudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKQogc2xvd1BhdGhPcChnZXRfYnlfdmFsX3dp
dGhfdGhpcykKLXNsb3dQYXRoT3AoZ2V0X2RpcmVjdF9wbmFtZSkKLXNsb3dQYXRoT3AoZ2V0X2Vu
dW1lcmFibGVfbGVuZ3RoKQogc2xvd1BhdGhPcChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLXNs
b3dQYXRoT3AoaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoaGFz
X2VudW1lcmFibGVfcHJvcGVydHkpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfbmV4dCkKK3Nsb3dQ
YXRoT3AoZW51bWVyYXRvcl9nZXRfYnlfdmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2luX2J5
X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogCiBpZiBub3Qg
SlNWQUxVRTY0Ci0gICAgc2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVy
dHkpCi0gICAgc2xvd1BhdGhPcChoYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICBzbG93
UGF0aE9wKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICBzbG93UGF0aE9wKGdldF9wcm90b3R5
cGVfb2YpCiBlbmQKIApAQCAtMjAyMSw3ICsyMDE2LDYgQEAgc2xvd1BhdGhPcChyZXNvbHZlX3Nj
b3BlX2Zvcl9ob2lzdGluZ19mdW5jX2RlY2xfaW5fZXZhbCkKIHNsb3dQYXRoT3Aoc3ByZWFkKQog
c2xvd1BhdGhPcChzdHJjYXQpCiBzbG93UGF0aE9wKHRocm93X3N0YXRpY19lcnJvcikKLXNsb3dQ
YXRoT3AodG9faW5kZXhfc3RyaW5nKQogc2xvd1BhdGhPcCh0eXBlb2YpCiBzbG93UGF0aE9wKHR5
cGVvZl9pc19vYmplY3QpCiBzbG93UGF0aE9wKHR5cGVvZl9pc19mdW5jdGlvbikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
aW5kZXggYmQ4ODU1ZWJmZDZmYzE5YjE1YzFiNTg4NmQ0ZmE1NTY0MzgyZDg3ZC4uOGE1ZjdkMjNl
NjQ3NjNiYTI1OWUxYjJjNWQ4N2Y4ZDE2YjgyOWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTMxNDEsMzQg
KzMxNDEsNiBAQCBsbGludE9wKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsLCBPcExvZ1NoYWRv
d0NoaWNrZW5UYWlsLCBtYWNybyAoc2l6ZSwgZ2V0LCBkaQogICAgIGRpc3BhdGNoKCkKIGVuZCkK
IAotbWFjcm8gaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJl
dHVybiwgc2xvd1BhdGhDYWxsKQotICAgIGdldChtX2Jhc2UsIHQwKQotICAgIGxvYWRDb25zdGFu
dE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQxKQotICAgIGJ0cW56IHQxLCBub3RDZWxsTWFzaywgLnNs
b3dQYXRoCi0KLSAgICBsb2FkVmFyaWFibGUoZ2V0LCBtX2VudW1lcmF0b3IsIHQwKQotICAgIGxv
YWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJRFt0MV0sIHQxCi0gICAgYmluZXEgdDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6bV9jYWNoZWRTdHJ1Y3R1cmVJRFt0MF0sIC5zbG93UGF0aAotCi0g
ICAgcmV0dXJuKFZhbHVlVHJ1ZSkKLQotLnNsb3dQYXRoOgotICAgIGNhbGxTbG93UGF0aChzbG93
UGF0aENhbGwpCi0gICAgZGlzcGF0Y2goKQotZW5kCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2hh
c19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJl
UHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3Ry
dWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3Bh
dGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9wV2l0
aFJldHVybihvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1
Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0
aF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4o
b3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5LCBPcEluU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChz
aXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBs
KHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaW5fc3RydWN0dXJlX3By
b3BlcnR5KQotZW5kKQotCiBvcChmdXp6ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50LCBt
YWNybyAoKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAogICAgIGxvYWRwIENvZGVCbG9j
azo6bV9nbG9iYWxPYmplY3RbdDBdLCB0MApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKaW5kZXggMTEyOTU0YmI5YjZlNTAxMzY4ODNiNzQ1
NmNiMWU4MzE4ZmI1YTUxMS4uYTdjMjNjMzQyNmZlNGUxYWEzZGVjMzk2MjgyNDUyYjJjN2IzMDQ5
YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCkBAIC05NjIsMTYxICs5NjIsMTM5IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG9fcHJvcGVydHlfa2V5KQogICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5t
X3NyYykuanNWYWx1ZSgpLnRvUHJvcGVydHlLZXlWYWx1ZShnbG9iYWxPYmplY3QpKTsKIH0KIAot
SlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5n
dGgpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9l
bnVtZXJhdG9yKQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEdldEVudW1lcmFibGVMZW5ndGg+KCk7Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdG9yVmFsdWUgPSBH
RVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBpZiAoZW51bWVyYXRvclZhbHVl
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisgICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAg
IGlmIChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKHZtLmVt
cHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpKTsKIAotICAgIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihlbnVt
ZXJhdG9yVmFsdWUuYXNDZWxsKCkpOworICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRv
T2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRV
Uk4oanNOdW1iZXIoZW51bWVyYXRvci0+aW5kZXhlZExlbmd0aCgpKSk7CisgICAgUkVUVVJOKHBy
b3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xvYmFsT2JqZWN0LCBiYXNlKSk7CiB9CiAKLUpTQ19ERUZJ
TkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9u
ZXh0KQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEVudW1lcmF0b3JOZXh0PigpOwogICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFz
ZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1Zh
bHVlKCk7Ci0gICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNl
LT5zdHJ1Y3R1cmUodm0pKTsKLSAgICBBU1NFUlQocHJvcGVydHkuaXNVSW50MzJBc0FueUludCgp
KTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIHByb3BlcnR5LmFzVUludDMyQXNBbnlJbnQoKSkpKTsKLX0KKyAgICBSZWdpc3Rl
ciYgbW9kZVJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1fbW9kZSk7CisgICAgUmVnaXN0ZXImIGlu
ZGV4UmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9pbmRleCk7CisgICAgUmVnaXN0ZXImIG5hbWVS
ZWdpc3RlciA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSk7CiAKLUpTQ19ERUZJTkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5
KQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1l
cmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5
dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hF
Q0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3By
b3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmco
KSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVj
b2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS0+c3Ry
dWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAg
ICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKLSNlbmRpZgotICAgIEpTU3RyaW5nKiBzdHJp
bmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmct
PnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAg
IFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVj
dCwgcHJvcGVydHlOYW1lKSkpOwotfQorICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQz
MigpKTsKKyAgICB1aW50MzJfdCBpbmRleCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUlu
dDMyKCk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9z
dHJ1Y3R1cmVfcHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0g
R0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0
KQotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVl
KCkuYXNDZWxsKCkpOwotICAgIGlmIChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0
cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAg
ICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKKyAgICBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
Kj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIGJh
c2VWYWx1ZSA9IEdFVChieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQoIWJh
c2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VW
YWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAg
IG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlLT5zdHJ1Y3R1
cmVJRCgpKTsKIAotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0
eSkuanNWYWx1ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwot
ICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9w
ZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIEpTU3Ry
aW5nKiBuYW1lID0gZW51bWVyYXRvci0+Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBp
bmRleCwgbW9kZSk7CiAgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNCb29s
ZWFuKG9iamVjdFByb3RvdHlwZUhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJv
cGVydHlOYW1lKSkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworICAgIG1vZGVSZWdpc3RlciA9IGpzTnVtYmVyKHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KG1vZGUpKTsKKyAgICBpbmRleFJlZ2lzdGVyID0ganNOdW1iZXIoaW5k
ZXgpOworICAgIG5hbWVSZWdpc3RlciA9IG5hbWUgPyBuYW1lIDoganNOdWxsKCk7CisgICAgRU5E
KCk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0
dXJlX3Byb3BlcnR5KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVt
ZXJhdG9yX2dldF9ieV92YWwpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU1ZhbHVlIGJhc2UgPSBHRVRf
QyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAg
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXND
ZWxsKCkpOwotICAgIGlmIChiYXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVy
ZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAg
UkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0g
R0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChw
cm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRo
czo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFzZSwgYXNTdHJpbmcocHJvcGVydHkpKSkpOwot
fQorICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7Cisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAg
YXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihH
RVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAg
ICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsK
KyAgICB1bnNpZ25lZCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNJ
bnQzMigpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgICAgICBjYXNlIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGU6IHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoYmFzZVZh
bHVlLmlzQ2VsbCgpKSkKKyAgICAgICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5v
YnNlcnZlU3RydWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAg
ICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGluZGV4KSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlOiB7CisgICAgICAgICAgICBB
U1NFUlQoYmFzZVZhbHVlLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgIGlmIChiYXNlVmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkg
eworICAgICAgICAgICAgICAgIC8vIFdlJ2xsIG9ubHkgbWF0Y2ggdGhlIHN0cnVjdHVyZSBJRCBp
ZiB0aGUgYmFzZSBpcyBhbiBvYmplY3QuCisgICAgICAgICAgICAgICAgQVNTRVJUKGluZGV4IDwg
ZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKTsKKyAgICAgICAgICAgICAg
ICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldE9iamVjdCgpLT5nZXREaXJlY3QoaW5kZXgg
PCBlbnVtZXJhdG9yLT5jYWNoZWRJbmxpbmVDYXBhY2l0eSgpID8gaW5kZXggOiBpbmRleCAtIGVu
dW1lcmF0b3ItPmNhY2hlZElubGluZUNhcGFjaXR5KCkgKyBmaXJzdE91dE9mTGluZU9mZnNldCkp
OworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKTsKKyAgICAgICAg
ICAgIEZBTExUSFJPVUdIOworICAgICAgICB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzRW51bWVyYWJsZVByb3BlcnR5PigpOwotICAg
IEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHBy
b3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQo
cHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHBy
b3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGds
b2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVh
bihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUp
KSk7Ci19CisgICAgICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9k
ZTogeworICAgICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwoKSAmJiBtb2RlICE9IEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkKKyAgICAgICAgICAgICAgICBt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0
cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgICAgICAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7
CisgICAgICAgICAgICAvLyBUT0RPIERvZXMgdGhpcyBhY3R1YWxseSBldmVyIHRocm93PyBJc24n
dCBzdHJpbmcgYmFja2VkIGJ5IGEgVVVJRD8KKyAgICAgICAgICAgIENIRUNLX0VYQ0VQVElPTigp
OworICAgICAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0
LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHBy
b3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQo
cHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHBy
b3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGds
b2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJOKGJhc2VWYWx1
ZS5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICB9OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3Ip
CitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlf
dmFsKQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldFBy
b3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVy
YXRvckluQnlWYWw+KCk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5t
X2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIFJFVFVSTih2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CisgICAg
YXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8g
bW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5
dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOwogCi0gICAgSlNP
YmplY3QqIGJhc2UgPSBiYXNlVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVD
S19FWENFUFRJT04oKTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3Ig
PSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVy
YXRvcikuanNWYWx1ZSgpKTsKKyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmpl
Y3QoKSkgeworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93
blN0cnVjdHVyZU1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNo
ZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAK
LSAgICBSRVRVUk4ocHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2UpKTsK
LX0KLQotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX3N0
cnVjdHVyZV9wbmFtZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+
YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdF
VChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgdWludDMy
X3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyQXNBbnlJ
bnQoKTsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRl
eGVkTW9kZSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHko
Z2xvYmFsT2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkp
KSk7CisgICAgfQogCi0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IG51bGxwdHI7Ci0gICAg
aWYgKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKQotICAg
ICAgICBwcm9wZXJ0eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4
KTsKLSAgICBSRVRVUk4ocHJvcGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkpOwor
ICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5h
bWUpLmpzVmFsdWUoKSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9w
SW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2VWYWx1ZSwgc3RyaW5nLCAmbWV0YWRhdGEubV9hcnJh
eVByb2ZpbGUpKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
ZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCiB7CiAgICAgQkVHSU4oKTsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAg
ICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFz
Q2VsbCgpKTsKLSAgICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1Zh
bHVlKCkuYXNVSW50MzJBc0FueUludCgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BF
bnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRf
QyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVl
KCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CiAKLSAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0g
bnVsbHB0cjsKLSAgICBpZiAoZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgp
IDw9IGluZGV4ICYmIGluZGV4IDwgZW51bWVyYXRvci0+ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgo
KSkKLSAgICAgICAgcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRl
eChpbmRleCk7Ci0gICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVs
bCgpKTsKLX0KKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nh
c3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvciku
anNWYWx1ZSgpKTsKKyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3QoKSkg
eworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1
Y3R1cmVJRCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAKLUpTQ19E
RUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQotewotICAg
IEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7
Ci0gICAgSlNWYWx1ZSBpbmRleFZhbHVlID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUo
KTsKLSAgICBBU1NFUlQoaW5kZXhWYWx1ZS5pc1VJbnQzMkFzQW55SW50KCkpOwotICAgIFJFVFVS
Tihqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXhWYWx1ZS5hc1VJbnQzMkFz
QW55SW50KCkpLnN0cmluZygpKSk7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJh
c2UtPmhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpz
VmFsdWUoKS5hc1VJbnQzMigpKSkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBh
c1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgYXV0
byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAg
IENIRUNLX0VYQ0VQVElPTigpOworICAgIFJFVFVSTihqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBl
SGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSkpKTsK
IH0KIAogSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVf
Y2xlYXJfbG9nKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuaAppbmRleCBkOGQxNTAxZmIzNWJhYzI3OTRjNmQ5NDEwMjcxYmI2OGY0Y2MwNTdlLi5h
NWUwMTVkNTNhNjllNjA1M2FmNGRiYjMxYjJjOGYyNTdjMGRiMWUyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaApAQCAtMjU0LDE3ICsyNTQs
MTEgQEAgSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaXNfY29uc3RydWN0
b3IpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfc3RyY2F0KTsKIEpT
Q19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CiBKU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0eV9rZXkpOwotSlND
X0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxl
X2luZGV4ZWRfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKLUpTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5
KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGly
ZWN0X3BuYW1lKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9w
cm9wZXJ0eV9lbnVtZXJhdG9yKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk7Ci1KU0NfREVDTEFSRV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOworSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKK0pTQ19ERUNMQVJF
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CitKU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7
CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19v
d25fcHJvcGVydHkpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfcHJv
ZmlsZV90eXBlX2NsZWFyX2xvZyk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3df
cGF0aF91bnJlYWNoYWJsZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKaW5kZXggZTJjYTE2MmUw
YjU0ZTI1Y2YwNjllZWE4Yzg3ZTFlZWEyZTRjZDViZS4uMWIwMzEzMGYwYTVjMDdjMzM1Y2M1ODU2
ODNiYjY0NWVlNTNlMDhiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcApAQCAtOTAsNyArOTAsNiBAQCBTcGVjdWxh
dGVkVHlwZSBGaWxlQmFzZWRGdXp6ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbkludGVybmFsKENvZGVC
bG9jayogY29kZUJsb2NrLAogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bF93aXRoX3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3Bf
Y29uc3RydWN0OgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9j
YWxsX3ZhcmFyZ3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
aWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcAppbmRleCBmMTM5ZDRhNDQ3YjI3MGY5ZWQz
M2Y3ZGZkMzVlMDJhZmZjMzFjNzAzLi5jMjZjMDAzNzQwMzkwYzdiMzgzNjA3NjBlM2MyMjljMWZk
MWI4OGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFz
ZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBPcGNvZGVJRCBGaWxl
QmFzZWRGdXp6ZXJBZ2VudEJhc2U6Om9wY29kZUFsaWFzRm9yTG9va3VwS2V5KGNvbnN0IE9wY29k
ZUlEJiBvcGNvZAogewogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bj
b2RlSWQgPT0gb3BfY2FsbF9ldmFsIHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2FsbCB8fCBvcGNv
ZGVJZCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykKICAgICAgICAgcmV0dXJuIG9wX2NhbGw7Ci0g
ICAgaWYgKG9wY29kZUlkID09IG9wX2dldF9kaXJlY3RfcG5hbWUgfHwgb3Bjb2RlSWQgPT0gb3Bf
Z2V0X2J5X3ZhbF93aXRoX3RoaXMpCisgICAgaWYgKG9wY29kZUlkID09IG9wX2VudW1lcmF0b3Jf
Z2V0X2J5X3ZhbCB8fG9wY29kZUlkID09IG9wX2dldF9ieV92YWxfd2l0aF90aGlzKQogICAgICAg
ICByZXR1cm4gb3BfZ2V0X2J5X3ZhbDsKICAgICBpZiAob3Bjb2RlSWQgPT0gb3BfY29uc3RydWN0
X3ZhcmFyZ3MpCiAgICAgICAgIHJldHVybiBvcF9jb25zdHJ1Y3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggMjRmY2YwODE1ZTI1
MDQ5NWUwMzE3OTRhMDZlNGIzMTA1Yzc4NGZiNC4uMTVmNWIwNjRlY2JmYzY1OGE5OTBkMmViNTk2
MzViZjJiZGJlODg4MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsT2JqZWN0LmNwcApAQCAtMTQ2MSw2ICsxNDYxLDEwIEBAIGNhcGl0YWxOYW1lICMjIENv
bnN0cnVjdG9yKiBsb3dlck5hbWUgIyMgQ29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0
YWxOYW1lCiAgICAgICAgIH0pOwogI2VuZGlmCiAKKyAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihMaW5rVGltZUNvbnN0YW50OjplbXB0eVByb3BlcnR5TmFtZUVu
dW1lcmF0b3IpXS5pbml0TGF0ZXIoW10gKGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQp
IHsKKyAgICAgICAgaW5pdC5zZXQoaW5pdC52bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3Io
KSk7CisgICAgfSk7CisKICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlUHJvZmlsZXJzT25HbG9iYWxP
YmplY3QoKSkgewogI2lmIEVOQUJMRShTQU1QTElOR19QUk9GSUxFUikKICAgICAgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJfX2Vu
YWJsZVNhbXBsaW5nUHJvZmlsZXIiKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBT
dHJpbmcoKSwgZW5hYmxlU2FtcGxpbmdQcm9maWxlciksIFByb3BlcnR5QXR0cmlidXRlOjpEb250
RW51bSB8IFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6
OlJlYWRPbmx5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCmluZGV4IDIxYzcwYTI3YjY5MWJlMDU2OTBh
MmZhZTc3YzY5OTEyYWVlYzExOWQuLjk4MmFhNDdjNjU2MzczMzY5NGIzMGYxOTZiODkxYjQ1OWZm
MjNlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcApAQCAtNDksMTMgKzQ5LDE5IEBAIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0CiAKIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluZGV4
ZWRMZW5ndGgsIHVpbnQzMl90IG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdyaXRlQmFycmll
cjxKU1N0cmluZz4qIHByb3BlcnR5TmFtZXNCdWZmZXIsIHVuc2lnbmVkIHByb3BlcnR5TmFtZXNT
aXplKQogICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJl
LmdldCgpKQotICAgICwgbV9wcm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5hbWVzQnVm
ZmVyKQogICAgICwgbV9jYWNoZWRTdHJ1Y3R1cmVJRChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlk
KCkgOiAwKQogICAgICwgbV9pbmRleGVkTGVuZ3RoKGluZGV4ZWRMZW5ndGgpCiAgICAgLCBtX2Vu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgobnVtYmVyU3RydWN0dXJlUHJvcGVydGllcykKICAgICAs
IG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgocHJvcGVydHlOYW1lc1NpemUpCiAgICAgLCBtX2Nh
Y2hlZElubGluZUNhcGFjaXR5KHN0cnVjdHVyZSA/IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSA6IDApCisgICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5TmFtZXNCdWZm
ZXIpCiB7CisgICAgaWYgKG1faW5kZXhlZExlbmd0aCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGU7CisgICAgaWYgKG1fZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZTsKKyAgICBpZiAobV9lbmRHZW5lcmljUHJvcGVydHlJ
bmRleCAtIG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU7CiB9CiAKIHZvaWQgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxQcm9wZXJ0
eU5hbWVBcnJheURhdGE+JiYgaWRlbnRpZmllcnMpCkBAIC0xNDgsNCArMTU0LDcwIEBAIHZvaWQg
Z2V0RW51bWVyYWJsZVByb3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNPYmplY3QqIGJhc2UsIFByCiAgICAgfQogfQogCitKU1N0cmluZyogSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjb21wdXRlTmV4dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09i
amVjdCogYmFzZSwgdWludDMyX3QmIGluZGV4LCBNb2RlJiBtb2RlLCBib29sIHNob3VsZEFsbG9j
YXRlSW5kZXhlZE5hbWVTdHJpbmcpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEFTU0VS
VChpbmRleGVkTGVuZ3RoKCkgfHwgc2l6ZU9mUHJvcGVydHlOYW1lcygpKTsKKworICAgIGluZGV4
Kys7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBJbml0TW9kZTogeworICAgICAgICBt
b2RlID0gSW5kZXhlZE1vZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgfQorCisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlOiB7CisgICAgICAgIHdoaWxlIChpbmRleCA8IGluZGV4ZWRMZW5ndGgoKSAmJiAhYmFzZS0+
aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaW5kZXgpKSB7CisgICAgICAgICAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGluZGV4
Kys7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAg
ICAgICBpZiAoaW5kZXggPCBpbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gc2hv
dWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyA/IGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpm
cm9tKHZtLCBpbmRleCkuc3RyaW5nKCkpIDogbnVsbHB0cjsKKworICAgICAgICBpZiAoIXNpemVP
ZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IG1vZGUgPSBPd25TdHJ1Y3R1cmVNb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZB
TExUSFJPVUdIOworICAgIH0KKworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpP
d25TdHJ1Y3R1cmVNb2RlOgorICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5l
cmljTW9kZTogeworICAgICAgICBKU1N0cmluZyogbmFtZSA9IG51bGxwdHI7CisgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICBpZiAoaW5kZXggPj0gc2l6ZU9mUHJvcGVydHlOYW1l
cygpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5
TmFtZUF0SW5kZXgoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGluZGV4IDwgZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleCgpICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gY2FjaGVkU3RydWN0dXJlSUQoKSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpm
cm9tU3RyaW5nKHZtLCBuYW1lLT52YWx1ZShnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIHNj
b3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgICAgICAgICBpZiAoYmFzZS0+aGFzRW51bWVy
YWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgaWQpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBuYW1lID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAg
ICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgICAgICBpZiAoaW5kZXggPj0g
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYmIGluZGV4IDwgc2l6ZU9mUHJvcGVydHlOYW1l
cygpKQorICAgICAgICAgICAgbW9kZSA9IEdlbmVyaWNNb2RlOworICAgICAgICByZXR1cm4gbmFt
ZTsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCmluZGV4IDAyMDExZDQxYzdmNjZkYWQ4ODNh
ZThkNzcwYjVkM2QyODZjZDUwODcuLmQ0Njg1MDQ5YWEzOTAwYzAxNWUwNDQzNjMxNTI0OWJhODAy
ODVmOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lRW51bWVyYXRvci5oCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSlND
YXN0LmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFy
cmF5LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4u
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM3LDYgKzM3LDE3IEBAIHB1YmxpYzoKICAgICB1
c2luZyBCYXNlID0gSlNDZWxsOwogICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0
dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
KyAgICBlbnVtIE1vZGUgOiB1aW50OF90IHsKKyAgICAgICAgSW5pdE1vZGUgPSAwLAorICAgICAg
ICBJbmRleGVkTW9kZSA9IDEgPDwgMCwKKyAgICAgICAgT3duU3RydWN0dXJlTW9kZSA9IDEgPDwg
MSwKKyAgICAgICAgR2VuZXJpY01vZGUgPSAxIDw8IDIsCisgICAgICAgIC8vIFByb2ZpbGluZyBP
bmx5CisgICAgICAgIEhhc1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2ggPSAx
IDw8IDMsCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDhfdCBlbnVtZXJhdGlv
bk1vZGVNYXNrID0gKEdlbmVyaWNNb2RlIDw8IDEpIC0gMTsKKwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENlbGxUeXBlLCBTdWJzcGFjZUFjY2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFj
ZSogc3Vic3BhY2VGb3IoVk0mIHZtKQogICAgIHsKQEAgLTc0LDE2ICs4NSwyMCBAQCBwdWJsaWM6
CiAgICAgdWludDMyX3QgZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OyB9CiAgICAgdWludDMyX3QgY2FjaGVkSW5saW5lQ2Fw
YWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZElubGluZUNhcGFjaXR5OyB9CiAgICAgdWlu
dDMyX3Qgc2l6ZU9mUHJvcGVydHlOYW1lcygpIGNvbnN0IHsgcmV0dXJuIGVuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KCk7IH0KKyAgICB1aW50MzJfdCBtb2RlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlU2V0OyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2Fj
aGVkU3RydWN0dXJlSUQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBpbmRleGVkTGVuZ3RoT2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwg
bV9pbmRleGVkTGVuZ3RoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgZW5kU3RydWN0dXJlUHJv
cGVydHlJbmRleE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IsIG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9lbmRHZW5lcmljUHJvcGVydHlJ
bmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9j
YWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG1vZGVTZXRPZmZz
ZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBt
X21vZGVTZXQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBjYWNoZWRQcm9wZXJ0eU5hbWVzVmVj
dG9yT2Zmc2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3Byb3BlcnR5TmFtZXMpOwogICAgIH0KIAorICAgIEpTU3Ry
aW5nKiBjb21wdXRlTmV4dChKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJf
dCYgY3VycmVudEluZGV4LCBNb2RlJiwgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3Ry
aW5nID0gdHJ1ZSk7CisKICAgICBERUNMQVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgpA
QCAtOTIsMTMgKzEwNywxNCBAQCBwcml2YXRlOgogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cihWTSYsIFN0cnVjdHVyZSosIHVpbnQzMl90LCB1aW50MzJfdCwgV3JpdGVCYXJyaWVyPEpTU3Ry
aW5nPiosIHVuc2lnbmVkKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUmVmUHRyPFBy
b3BlcnR5TmFtZUFycmF5RGF0YT4mJik7CiAKLSAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFy
cmllcjxKU1N0cmluZz4qPiBtX3Byb3BlcnR5TmFtZXM7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVj
dHVyZUNoYWluPiBtX3Byb3RvdHlwZUNoYWluOwogICAgIFN0cnVjdHVyZUlEIG1fY2FjaGVkU3Ry
dWN0dXJlSUQ7CiAgICAgdWludDMyX3QgbV9pbmRleGVkTGVuZ3RoOwogICAgIHVpbnQzMl90IG1f
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJfdCBtX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4OwogICAgIHVpbnQzMl90IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7CisgICAgdWlu
dDMyX3QgbV9tb2RlU2V0IHsgMCB9OworICAgIEF1eGlsaWFyeUJhcnJpZXI8V3JpdGVCYXJyaWVy
PEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1lczsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJl
Q2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47CiB9OwogCiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0
eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIHVp
bnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCk7
CkBAIC0xMzQsNyArMTUwLDEwIEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHBy
b3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIG51
bWJlclN0cnVjdHVyZVByb3BlcnRpZXMgPSAwOwogICAgIH0KIAotICAgIGVudW1lcmF0b3IgPSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5n
UHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywg
V1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CisgICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmICFwcm9w
ZXJ0eU5hbWVzLnNpemUoKSkKKyAgICAgICAgZW51bWVyYXRvciA9IHZtLmVtcHR5UHJvcGVydHlO
YW1lRW51bWVyYXRvcigpOworICAgIGVsc2UKKyAgICAgICAgZW51bWVyYXRvciA9IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0
eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXVEZNb3Zl
KHByb3BlcnR5TmFtZXMpKTsKICAgICBpZiAoIWluZGV4ZWRMZW5ndGggJiYgc3VjY2Vzc2Z1bGx5
Tm9ybWFsaXplZENoYWluICYmIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMgPT0g
c3RydWN0dXJlKSB7CiAgICAgICAgIGVudW1lcmF0b3ItPnNldENhY2hlZFByb3RvdHlwZUNoYWlu
KHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogICAg
ICAgICBpZiAoc3RydWN0dXJlLT5jYW5DYWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0pKQpA
QCAtMTQzLDQgKzE2Miw2IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3Bl
cnR5TmFtZUVudW1lcmF0b3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIGVu
dW1lcmF0b3I7CiB9CiAKK3VzaW5nIEVudW1lcmF0b3JNZXRhZGF0YSA9IHN0ZDo6dW5kZXJseWlu
Z190eXBlX3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0
aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcAppbmRleCBjZGNmYTk5
ZDQ5YTY5MTc0MDFkNjgzMTY4YmExOWFiZGViYWU5YTRkLi5jN2E4ZTMxZjdlNDdiZDY5MTFmZTRh
YzQ1ZmRmNzdkNjgzOTY0MTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5j
cHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNTIsNyArNTIsNyBAQCBTcGVjdWxhdGVkVHlwZSBQcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6
emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRlcm5hbChDb2RlQmxvYwogICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkOgogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3dpdGhfdGhpczoKICAgICBjYXNlIG9wX2dl
dF9ieV92YWxfd2l0aF90aGlzOgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICBj
YXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKICAg
ICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ugb3BfY2FsbDoKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjQzZGJiOTI0
MzU2ZDZmODUxYjEzZjc5NDQyNGVjNzgwNGM5OWMxYy4uMGU3NmRlNDMyODFhNGMwNzVjMTkxMzAw
MDQyZDFkODVmMTY1NWFmYiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAyMS0wOC0wMyAgS2VpdGggTWlsbGVy
ICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KKworICAgICAgICBmb3ItaW4gc2hvdWxkIG9ubHkg
ZW1pdCBvbmUgbG9vcCBpbiBieXRlY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI3OTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS13
aXRoLW93bi1uYW1lZC5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNy
b2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS5qczogQWRkZWQuCisgICAgICAgICh0ZXN0
KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWdldHRlcnMuanM6IEFkZGVkLgor
ICAgICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1h
cnJheS13aXRoLW93bi1uYW1lZC5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAg
KiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAg
KHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdp
dGgtb3duLW5hbWVkLWFuZC1nZXR0ZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVk
LmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9m
b3ItaW4tb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bSk6Cisg
ICAgICAgIChvcGFxdWVTZXQpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4tc3Ry
aW5nLWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVu
Y2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1hcnJheS1tYXAtc2V0LmpzOiBBZGRlZC4KKyAgICAgICAg
KHN1bSk6CisgICAgICAgIChsZXQuZ2VuZXJhdG9yKToKKyAgICAgICAgKiBzdHJlc3MvZm9yLWlu
LWFycmF5LW1vZGUuanM6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBzdHJlc3MvZm9yLWlu
LWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qczoKKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLWRlbGV0
ZS1kdXJpbmctaXRlcmF0aW9uLmpzOgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tcHJpbWl0aXZl
LWluZGV4LW9uLXByb3RvdHlwZS5qczogQWRkZWQuCisgICAgICAgICogc3RyZXNzL2Zvci1pbi10
ZXN0cy5qczoKKyAgICAgICAgKiBzdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9y
LWluLWxvb3AtY29ycmVjdG5lc3MuanM6CisgICAgICAgICh0ZXN0NSk6CisKIDIwMjEtMDctMjkg
IFRhZGV1IFphZ2FsbG8gIDx0emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZGVmaW5lUHJv
cGVydHlPblJlY2VpdmVyIHNob3VsZCBjaGVjayBpZiByZWNlaXZlciBjYW5QZXJmb3JtRmFzdFB1
dElubGluZQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJs
ZS1hcnJheS13aXRoLW93bi1uYW1lZC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1kb3VibGUtYXJyYXktd2l0aC1vd24tbmFtZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjU4YmY0M2ZlNWFm
MGZmMWQzMDEzOGJhNzdlMzczODA0NzQzNWM5NQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2Zvci1pbi1kb3VibGUtYXJyYXktd2l0aC1vd24tbmFtZWQuanMKQEAg
LTAsMCArMSwxNCBAQAorZnVuY3Rpb24gdGVzdChvYmplY3QpIHsKKyAgICBzdW0gPSAwOworICAg
IGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJl
dHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7
ICsraSkgeworICAgIHZhciBvID0gQXJyYXkoMTAwKS5maWxsKDEuMTIzMjE0MjMxKTsKKyAgICBv
LmEgPSAwOworICAgIG8uYiA9ICJzdXJwcmlzZSBzdHJpbmciOworICAgIHRlc3Qobyk7Cit9CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5Lmpz
IGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43NGEwYzNjNzFkNmU2OTEwNThhMzFkYWNiYjUwNjZmZjI0YTQwNWJiCi0tLSAvZGV2L251
bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS5qcwpA
QCAtMCwwICsxLDEwIEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7Cisg
ICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAg
cmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFl
NTsgKytpKQorICAgIHRlc3QoQXJyYXkoMTAwKS5maWxsKDEuMTIzMTI0MSkpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWdldHRlcnMuanMgYi9KU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9mb3ItaW4tZ2V0dGVycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGZhMzY0ODYwYTZi
MDA5ZGEzMTg4OTUyMzA4YzUzMGUwMDJiMWZhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvZm9yLWluLWdldHRlcnMuanMKQEAgLTAsMCArMSwxNSBAQAorZnVuY3Rp
b24gdGVzdChvYmplY3QpIHsKKyAgICBzdW0gPSAwOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0
KQorICAgICAgICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGlu
ZSh0ZXN0KTsKKworbGV0IG8gPSB7IH07CitPYmplY3QuZGVmaW5lUHJvcGVydHkobywgInByb3Rv
VmFsdWUiLCB7IGdldCgpIHsgcmV0dXJuICJzdHJpbmciOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0p
OworT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sICJwcm90b1ZhbHVlMiIsIHsgZ2V0KCkgeyByZXR1
cm4gInN0cmluZzEiOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0pOworT2JqZWN0LmRlZmluZVByb3Bl
cnR5KG8sICJwcm90b1ZhbHVlMyIsIHsgZ2V0KCkgeyByZXR1cm4gInN0cmluZzIiOyB9LCBlbnVt
ZXJhYmxlOiB0cnVlIH0pOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRl
c3Qobyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzIt
YXJyYXktd2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4t
aW50MzItYXJyYXktd2l0aC1vd24tbmFtZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGUyZGRiZDJmMDVkYjRl
Y2NlOWZkOWJhNDU2OWY2YjA2MjRhYTEzNwotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1hcnJheS13aXRoLW93bi1uYW1lZC5qcwpAQCAtMCww
ICsxLDE0IEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9y
ICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJu
IHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytp
KSB7CisgICAgdmFyIG8gPSBBcnJheSgxMDApLmZpbGwoMSk7CisgICAgby5hID0gMDsKKyAgICBv
LmIgPSAyOworICAgIHRlc3Qobyk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9mb3ItaW4taW50MzItYXJyYXkuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3It
aW4taW50MzItYXJyYXkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJhZTVjMWI0MjU4OTQ2NjBkOTY5ODM1ZTRm
NGNkNmE4MWVlZDUxMAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2Zvci1pbi1pbnQzMi1hcnJheS5qcwpAQCAtMCwwICsxLDE1IEBACisKK3ZhciBjb3VudCA9IDA7
CitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBp
biBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30K
K25vSW5saW5lKHRlc3QpOworCisKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMDApOworYXJyYXku
ZmlsbCgxKTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgdGVzdChhcnJheSk7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0
LXdpdGgtb3duLW5hbWVkLWFuZC1nZXR0ZXJzLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
Zm9yLWluLWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC1hbmQtZ2V0dGVycy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iNWVmN2ViZGQyNDMyOTQ0ZmRlYjE0ZmFmZjhiNDI2ZGM0NDYzYWM5Ci0tLSAvZGV2L251
bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLW9iamVjdC13aXRo
LW93bi1uYW1lZC1hbmQtZ2V0dGVycy5qcwpAQCAtMCwwICsxLDE1IEBACitmdW5jdGlvbiB0ZXN0
KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAg
ICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3Qp
OworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3RvdHlwZSwgInByb3RvVmFsdWUi
LCB7IGdldCgpIHsgcmV0dXJuICJzdHJpbmciOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0pOwordmFy
IG8gPSB7IGxlbmd0aDogMTAwIH0KK0FycmF5LnByb3RvdHlwZS5maWxsLmNhbGwobywgMSk7Citv
LmEgPSAwOworby5iID0gMjsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgdGVz
dChvKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1v
YmplY3Qtd2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4t
aW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyNjVmMWYxZjhkZWU3
OTFlOTdmMjk4MGU5MDRkM2E5Zjc1ZWUyM2IKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCkBAIC0w
LDAgKzEsMjAgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsKKyAgICBm
b3IgKHZhciBpIGluIG9iamVjdCkgeworLy8gICAgICAgICR2bS5kdW1wQ2VsbChvYmplY3QpOwor
Ly8gICAgICAgIHByaW50KCJpOiAiICsgaSk7CisgICAgICAgIHZhciB2ID0gb2JqZWN0W2ldOwor
Ly8gICAgICAgIHByaW50KCJ2YWx1ZTogIiArIHYpOworICAgICAgICBzdW0gKz0gdjsKKyAgICB9
CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsg
aSA8IDFlNTsgKytpKSB7CisgICAgdmFyIG8gPSB7IGxlbmd0aDogMTAwIH07CisgICAgQXJyYXku
cHJvdG90eXBlLmZpbGwuY2FsbChvLCAxKTsKKyAgICBvLmEgPSAwOworICAgIG8uYiA9IDI7Cisg
ICAgdGVzdChvKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3It
aW4tb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1ZjRlMGY0NjAwMmVhODgw
NDI0YTg4NGUyMmM0MGFjMjM4YWZlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCkBAIC0wLDAgKzEsMTcg
QEAKK2Z1bmN0aW9uIHN1bShvKSB7CisgICAgbGV0IHN1bSA9IDA7CisgICAgZm9yIChsZXQgcCBp
biBvKQorICAgICAgICBzdW0gKz0gb1twXTsKKyAgICByZXR1cm4gc3VtOworfQorCitmdW5jdGlv
biBvcGFxdWVTZXQobykgeworICAgIG8ueiA9IDM7Cit9CisKK2xldCBvYmplY3QgPSB7IHg6IDEs
IHk6IDIgfTsKK29wYXF1ZVNldChvYmplY3QpOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsr
aSkgeworICAgIGlmIChzdW0ob2JqZWN0KSAhPT0gNikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJiYWQgc3VtIik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3It
aW4tc3RyaW5nLWFycmF5LmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLXN0cmlu
Zy1hcnJheS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzI3NGZiYzEzOTAyYTY5MWEyMjhlZTdmYzYzZjc1MDJl
YjhhOGFjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWlu
LXN0cmluZy1hcnJheS5qcwpAQCAtMCwwICsxLDEwIEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkg
eworICAgIHN1bSA9ICIiOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0g
Kz0gb2JqZWN0W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9y
IChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0KEFycmF5KDEwMCkuZmlsbCgiYSIp
KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1vZi1pdGVyYXRlLWFy
cmF5LW1hcC1zZXQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1h
cnJheS1tYXAtc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1ZDRhMDI0NDI4OWM3MmVhYzhhNmFiMzJkMDk3
MGY1ODJmZWY1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9m
b3Itb2YtaXRlcmF0ZS1hcnJheS1tYXAtc2V0LmpzCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9u
IHN1bShvYmopIHsKKyAgICBsZXQgcmVzdWx0ID0gMDsKKyAgICBmb3IgKGxldCB4IG9mIG9iaikg
eworICAgICAgICBpZiAodHlwZW9mIHggPT0gIm51bWJlciIpCisgICAgICAgICAgICByZXN1bHQg
Kz0geDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ICs9IHhbMF07CisgICAgfQor
ICAgIHJldHVybiByZXN1bHQ7Cit9Citub0lubGluZShzdW0pOworCitsZXQgYXJyYXkgPSBbMSwy
LDMsNCw1XTsKK2xldCBzZXQgPSBuZXcgU2V0KGFycmF5KTsKK2xldCBtYXAgPSBuZXcgTWFwKGFy
cmF5Lm1hcCh4ID0+IFt4LCB4XSkpOworbGV0IGdlbmVyYXRvciA9IGZ1bmN0aW9uKiAoYXJyYXkp
IHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKQorICAgICAgICB5
aWVsZCBhcnJheVtpXTsKK30KKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAg
IGlmIChzdW0oc2V0KSAhPT0gMTUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworICAgIGlm
IChzdW0oZ2VuZXJhdG9yKGFycmF5KSkgIT09IDE1KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzIGIv
SlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKaW5kZXggOTAwMmI5NDBhZDU5NmI3
NTQ4MWYwMjU0MGU1MGFjOWU5Y2JiNTA4OC4uM2QyZGE2MzlkODEwZjhhYjk3YTNlMjY5ZmFlMTA3
MjEwYjVjZTc1YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUu
anMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKQEAgLTI2LDggKzI2
LDkgQEAKIHZhciBmdW5jQXJnQW5kQm9keVN0ciA9CiAiKGFycikgeyIgKyAiXG4iICsKICIgICAg
dmFyIHN1bSA9IDA7IiArICJcbiIgKwotIiAgICBmb3IgKHZhciBpIGluIGFycikiICsgIlxuIiAr
CisiICAgIGZvciAodmFyIGkgaW4gYXJyKSB7IiArICJcbiIgKwogIiAgICAgICAgc3VtICs9IGFy
cltpXTsiICsgIlxuIiArCisiICAgIH0gIiArCiAiICAgIHJldHVybiBzdW07IiArICJcbiIgKwog
In0iOwogCkBAIC03NSw2ICs3Niw3IEBAIGZ1bmN0aW9uIHRlc3QobmFtZSwgZGF0YSkgewogCiAg
ICAgICAgIGlmICgoYWN0dWFsICE9IGV4cGVjdGVkKSAmJiAoYWN0dWFsICE9IHByZXZpb3VzUmVz
dWx0KSkgewogICAgICAgICAgICAgcHJpbnQoIkZBSUw6ICIgKyBuYW1lICsgIjogZXhwZWN0ZWQ6
ICIgKyBleHBlY3RlZCArICIsIGFjdHVhbDogIiArIGFjdHVhbCArICIsIHN0YXJ0aW5nIEAgbG9v
cCBpdGVyYXRpb24gIiArIGkpOworICAgICAgICAgICAgJHZtLmJyZWFrcG9pbnQoKTsKICAgICAg
ICAgICAgIHByZXZpb3VzUmVzdWx0ID0gYWN0dWFsOwogICAgICAgICAgICAgZmFpbGVkID0gdHJ1
ZTsKICAgICAgICAgICAgIG51bWJlck9mRmFpbHVyZXMrKzsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMgYi9KU1Rlc3RzL3N0cmVzcy9m
b3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCmluZGV4IDgzMTE1YjQ5NzNjODM3Y2E2ZDNm
ZjA2ZWE2ZmYxMzFjMzQ1MTFlNjIuLjA5ZjgxZDk1NjUzYmFhMTUwNmU1ZGRhMDYyZmEyZTM1ZjE1
OGJmMzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQt
bGF0ZXIuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRl
ci5qcwpAQCAtMTQsNSArMTQsNSBAQCBub0lubGluZShmb28pOwogZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyh7MDowLCAxOjEsIGE6MiwgYjoz
fSk7CiAgICAgaWYgKHJlc3VsdCAhPSA3KQotICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiAr
IHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1
cmluZy1pdGVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1p
dGVyYXRpb24uanMKaW5kZXggNWFkMzU2NmZkMGQzNjEwMjVhMWU1ZjMzNjVkMGJhZDM3NGQ1MTIw
Mi4uZDExNDY5MzFiMTQ3NWQ4OGM0NzM5NDllYWRhMmRkYTBmZDM5MzBhNSAxMDA2NDQKLS0tIGEv
SlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCisrKyBiL0pT
VGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcwpAQCAtMTIsOCAr
MTIsOSBAQAogICAgIH07CiAgICAgbm9JbmxpbmUoZm9vKTsKICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAgaWYgKGZvbygpICE9PSAiMTIzNSIpCi0gICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IGZvbygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAiMTIzNSIpCisgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoImJhZCByZXN1bHQgZ290OiAiICsgcmVzdWx0KTsKICAgICB9CiAgICAgZm9v
KG51bGwpOwogfSkoKTsKQEAgLTM2LDggKzM3LDkgQEAKICAgICB9OwogICAgIG5vSW5saW5lKGZv
byk7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAgICAgIGlmIChm
b28oKSAhPT0gInh6IikKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIp
OworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09ICJ4
eiIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIgKyByZXN1bHQp
OwogICAgIH0KIH0pKCk7CiAoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9mb3ItaW4tcHJpbWl0aXZlLWluZGV4LW9uLXByb3RvdHlwZS5qcyBiL0pTVGVzdHMvc3RyZXNz
L2Zvci1pbi1wcmltaXRpdmUtaW5kZXgtb24tcHJvdG90eXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2OWRl
MjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2Zvci1pbi10ZXN0cy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwpp
bmRleCAyZTRkNmI4NDJhMjQyZWI3MTU5ODYwMGVlNTI4YWUxNGI5Yzg5Y2U0Li42ODk2MDk4MTg1
MWVlMzQ0ZTNhYTdmNTMyMzE1MWIyMjUxZjY1ZDkwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVz
cy9mb3ItaW4tdGVzdHMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCkBA
IC0xMDUsNiArMTA1LDcgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3dTeW50YXhFcnJvcihzY3JpcHQp
IHsKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOwogICAgIH0KIH0p
KCk7CisKIChmdW5jdGlvbigpIHsKICAgICB2YXIgZm9vID0gZnVuY3Rpb24oYSwgYikgewogICAg
ICAgICBmb3IgKHZhciBwIGluIGIpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcy1v
d24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzIGIvSlNUZXN0
cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5l
c3MuanMKaW5kZXggOTljNTlhYzEwNTY4Y2U4YTc5MDg1MjI5ODIwNmZkYzdlMGUwZjg5Yy4uZTBh
ZGUwNzFhMmU0YjhkMDI3OGQ5NWNjOTMzZTI0ZjE4YmJlZTA1OCAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5l
c3MuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9y
LWluLWxvb3AtY29ycmVjdG5lc3MuanMKQEAgLTEzMiw3ICsxMzIsMTAgQEAgZnVuY3Rpb24gdGVz
dDUoKSB7CiAgICAgby5fX3Byb3RvX18gPSBwOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwOyArK2kpIHsKLSAgICAgICAgYXNzZXJ0KGNvdW50KG8pID09PSAwKTsKKyAgICAgICAgdmFy
IGMgPSBjb3VudChvKTsKKyAgICAgICAgaWYgKGMpCisgICAgICAgICAgICBwcmludChjKTsKKyAg
ICAgICAgYXNzZXJ0KGMgPT09IDApOwogICAgIH0KIH0KIHRlc3Q1KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435002</attachid>
            <date>2021-08-05 10:27:24 -0700</date>
            <delta_ts>2021-08-05 10:57:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227989-20210805132723.patch</filename>
            <type>text/plain</type>
            <size>389326</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTUxZmJmZTMzNzc1YjQ4ZmUxMTczOWVmOGJhN2NkZWUwZmMyNGJlLi40OWExNmNhZmI2ZTI2ODMx
ZjgyMmRkOGFjNTM0ZmM1NDU3NDI3Y2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzMgQEAKKzIwMjEtMDgtMDUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgIFRoZXJlIGFyZSBmb3VyIG5ldyBvcGNvZGVzIHRoaXMg
cGF0Y2ggYWRkcywgd2hpY2ggcmVwbGFjZSB0aGUgdmFyaW91cyBvcGVyYXRpb25zIHdlIGhhZCBm
b3IgdGhlIHNwZWNpYWxpemVkIGxvb3BzIHByZXZpb3VzbHkuIFRoZSBuZXcgb3Bjb2RlcyBhcmUg
RW51bWVyYXRvckdldEJ5VmFsLCBFbnVtZXJhdG9ySW5CeVZhbCwgRW51bWVyYXRvckhhc093blBy
b3BlcnR5LCBhbmQgRW51bWVyYXRvck5leHQuIFRoZSBmaXJzdCB0aHJlZSBjb3JyZXNwb25kIHRv
IEdldEJ5VmFsLCBJbkJ5VmFsLCBhbmQgSGFzT3duUHJvcGVydHkgcmVzcGVjdGl2ZWx5LiBUaGUg
RW51bWVyYXRvck5leHQgb3Bjb2RlIGhhcyB0aHJlZSByZXN1bHRzIGluIGJ5dGVjb2RlLCB0aGUg
bmV4dCBlbnVtZXJhdGlvbiB2YWx1ZSdzIG1vZGUsIHRoZSBpbmRleCBvZiB0aGUgcHJvcGVydHkg
bmFtZSwgYW5kIHRoZSBwcm9wZXJ0eSBuYW1lIHN0cmluZyBpdHNlbGYuIFdoZW4gZW51bWVyYXRp
b24gaXMgZG9uZSBFbnVtZXJhdG9yTmV4dCByZXR1cm5zIEpTIG51bGwgYXMgdGhlIHByb3BlcnR5
IG5hbWUgc3RyaW5nLiBTaW5jZSB0aGUgREZHIGRvZXNuJ3Qgc3VwcG9ydCB0dXBsZXMgeWV0IHRo
aXMgb3Bjb2RlIGlzIHNwaWx0IGludG8gZm91ciBuZXcgbm9kZXMuIFRoZSBmaXJzdCBjb21wdXRl
cyB0aGUgdXBkYXRlZCBpbmRleCBhbmQgbW9kZSBmb3IgdGhlIG5leHQgZW51bWVyYXRpb24ga2V5
LCB3aGljaCBpcyBlbmNvZGVkIGludG8gYSBzaW5nbGUgSlMgbnVtYmVyLiBUaGVuIHRoZXJlIGFy
ZSB0d28gbm9kZXMgdGhhdCBleHRyYWN0IHRoZSBtb2RlIGFuZCBpbmRleC4gRmluYWxseSwgdGhl
IGxhc3QgbmV3IG5vZGUgcHJvZHVjZXMgdGhlIHByb3BlcnR5IG5hbWUgc3RyaW5nIG9yIG51bGwg
YmFzZWQgb24gdGhlIGV4dHJhY3RlZCBtb2RlIGFuZCBpbmRleC4KKworICAgICAgICBTaW5jZSwg
aW4gbW9zdCBiZW5jaG1hcmtzLCBhbnkgZ2l2ZW4gZW51bWVyYXRpb24gb3Bjb2RlIHRlbmRzIHRv
IHByb2ZpbGUgZXhhY3RseSBvbmUgZW51bWVyYXRpb24gbW9kZS4gVGhpcyBwYXRjaCBmb2N1c2Vz
IHByaW1hcmlseSBvbiByZWltcGxlbWVudGluZyBhbGwgdGhlIG9wdGltaXphdGlvbnMgd2UgaGF2
ZSBmb3IgYW55IG9uZSBzcGVjaWZpYyBtb2RlLiBUaGlzIG1lYW5zIHRoZXJlIGFyZSBzdGlsbCBw
b3RlbnRpYWwgb3B0aW1pemF0aW9ucyBmb3IgdGhlIG11bHRpLW1vZGUgZmxhdm9ycyBvZiBlYWNo
IG5ldyBvcGNvZGUuCisKKyAgICAgICAgVGhlIG1haW4gb3B0aW1pemF0aW9ucyBpbXBsZW1lbnRl
ZCBmb3IgZWFjaCBuZXcgb3Bjb2RlIGFyZToKKworICAgICAgICBFbnVtZXJhdG9yTmV4dDoKKyAg
ICAgICAgMSkgSW5kZXhlZE1vZGUgbG9vcHMgYXJlIGxvYWRlZCBhbmQgY2hlY2tlZCBmb3IgcHJl
c2VuY2UgaW5saW5lIChERkcvRlRMKS4KKyAgICAgICAgMikgTmFtZWRNb2RlIGlzIGNvbXB1dGVk
IGlubGluZSBhcyBsb25nIGFzIHRoZSBjYWNoZWQgc3RydWN0dXJlIG9uIHRoZSBlbnVtZXJhdG9y
IGNlbGwgbWF0Y2hlcyB0aGUgYmFzZSAoQmFzZWxpbmUrKS4gVGhpcyBjYW4gb25seSBkaWZmZXIg
aWYgdGhlcmUncyBhIHRyYW5zaXRpb24uCisgICAgICAgIDMpIHByb3BlcnR5IG5hbWVzIGFyZSBl
eHRyYWN0ZWQgZnJvbSB0aGUgY2FjaGVkIGJ1ZmZlciBpbmxpbmUgKEJhc2VsaW5lKykuCisKKyAg
ICAgICAgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBFbnVtZXJhdG9ySW5CeVZhbDoKKyAg
ICAgICAgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICAxKSBJbmRleGVkTW9kZSBo
YXMgYWxsIHRoZSBvcHRpbWl6YXRpb25zIG9mIGEgbm9ybWFsIFhCeVZhbCBvbiBpbmRleGVkIHBy
b3BlcnRpZXMgKERGRy9GVEwpLgorICAgICAgICAyKSBOYW1lZE1vZGUgd2lsbCBleHRyYWN0IHRo
ZSB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBpbmxpbmUvb3V0LW9mLWxpbmUgb2Zmc2V0IGlmIHRo
ZSBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgZW51bWVyYXRvcidzIChCYXNlbGluZSspLgorCisgICAg
ICAgIFRoZXJlIGFyZSBhbHNvIGEgZmV3IGludGVyZXN0aW5nIGNoYW5nZXMgd29ydGggbWVudGlv
bmluZyBoZXJlOgorICAgICAgICAxKSBJZiBhIGZvci1pbiBsb29wIHdvdWxkIHByb2R1Y2UgYW4g
ZW1wdHkgZW51bWVyYXRvciB3ZSBub3cgYWx3YXlzCisgICAgICAgIHJldHVybiB0aGUgVk1zIGVt
cHR5IGVudW1lcmF0b3IuIFRoaXMgaGFzIHR3byBiZW5lZml0cywgbW9zdCBpbXBvcnRhbnRseSwg
aXQgZGlzdGluZ2lzaGVzIGJldHdlZW4gYW4gdW5wcm9maWxlZCBmb3ItaW4gbG9vcCBhbmQgZW1w
dHkgZW51bWVyYXRpb24sIHdoaWNoIHByZXZlbnRzIE9TUiBleGl0IGxvb3BzLiBBbHNvLCBpdCBt
ZWFucyB0aGF0IHRoZSB2YXJpb3VzIEVudW1lcmF0b3Igb3Bjb2RlcyBubyBsb25nZXIgbmVlZCB0
byBoYW5kbGUgdW5kZWZpbmVkL251bGwgd2hlbiBgdG9PYmplY3RgaW5nIHRoZSBiYXNlIHZhbHVl
LgorCisgICAgICAgIDIpIFRoZSBlbnVtZXJhdG9yIG5vdyBjb250YWlucyBhIGJpdCBzZXQgb2Yg
YWxsIHRoZSBtb2RlcyBpdCB3aWxsIHByb2R1Y2UuIFRoaXMgcmVtb3ZlcyBhIGZldyBleHRyYSBi
cmFuY2hlcyB3aGVuIHNwZWN1bGF0aW5nIG9uIHRoZSBtb2RlcyB3ZSB3aWxsIHNlZSBpbiBFbnVt
ZXJhdG9yTmV4dC4KKworICAgICAgICAzKSBJbiB0aGUgREZHLCBlbnVtZXJhdG9yIEdldEJ5VmFs
IHJlbGllcyBvbiBjb21waWxlR2V0QnlWYWwgdG8gc2V0IHRoZSByZXN1bHQgaXQgYWxzbyBwYXNz
ZXMgYSBwcmVmaXggY2FsbGJhY2sgd2hpY2ggZW1pdHMgY29kZSBhZnRlciB0aGUgdmFyaW91cyBj
YXNlcyBzZXQgdXAgdGhlaXIgb3BlcmFuZHMgYnV0IGJlZm9yZSBjb2RlIGlzIGVtaXR0aW5nIHRv
IGhlbHAgc2F0aXNmeSB0aGUgYnJhbmNoIG92ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2YWxpZGF0
aW9uLiBBbHNvLCB0aGUgYXJyYXkgbW9kZSBicmFuY2ggaW4gY29tcGlsZUdldEJ5VmFsIHBhc3Nl
cyB0aGUgZGF0YSBmb3JtYXQgdGhhdCBpdCB3b3VsZCBwcmVmZXIsIHdoaWNoIGZvciBub3JtYWwg
R2V0QnlWYWwgaXMgcmV0dXJuZWQuIEZvciBFbnVtZXJhdG9yR2V0QnlWYWwsIHRoYXQgcHJlZmVy
ZW5jZSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYW5kIGl0IGFsd2F5cyByZXR1cm5zIERhdGFGb3Jt
YXRKUy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpvcjgpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBidWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGJ5dGVjb2RlL09w
Y29kZS5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9y
SW5Mb29wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvck5leHQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZSk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6
cmV3cml0ZU9wKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5kRm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5G
b3JJbkxvb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEdldEVudW1lcmFibGVMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
SGFzRW51bWVyYWJsZVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5
TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEluZGV4ZWRGb3JJblNjb3BlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hTdHJ1Y3R1cmVGb3JJ
blNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0
cnVjdHVyZUZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvcklu
Q29udGV4dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aW52YWxpZGF0
ZSk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bG9jYWwgY29uc3QpOgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OnByb3BlcnR5TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNv
bnRleHQ6OmVudW1lcmF0b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6Om1v
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OkZvckluQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Ym9keUJ5dGVjb2RlU3RhcnRPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzSW5kZXhlZEZvckluQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzSW5kZXhl
ZEZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6YXNT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6aW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnByb3BlcnR5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjplbnVtZXJhdG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpiYXNlVmFyaWFi
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6
OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ6OmFkZEluSW5zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29u
dGV4dDo6YWRkSGFzT3duUHJvcGVydHlKdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5k
ZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6YWRkR2V0SW5zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Okhhc093
blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNTYW5lQ2hhaW4g
Y29uc3QpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUp
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAg
ICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0
eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc1N0b3JhZ2VDaGlsZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
c3RvcmFnZUNoaWxkSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzRW51bWVyYXRvck1ldGFkYXRhIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjplbnVtZXJhdG9yTWV0YWRhdGEpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBTG93ZXJpbmdQaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRS
ZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3ltYm9sKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4
dEV4dHJhY3RJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFz
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51
bWVyYXRvckluQnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9w
ZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVUb0luZGV4U3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVtZXJh
dG9yUG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0RGlyZWN0UG5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VP
cGVyYW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJh
bmQ6On5TdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6
OmVtcGxhY2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVy
YXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNW
YWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRp
ZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVj
a0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAq
IGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUdldEJ5VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGZ0
bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFkZEluY29taW5nVG9Q
aGlJZlNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklU
T3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1l
cmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9k
aXJlY3RfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxl
X2luZGV4ZWRfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRC
eVZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2lu
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25f
cHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAg
ICogcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHA6CisgICAgICAgIChKU0M6OkZpbGVC
YXNlZEZ1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRp
bWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6RmlsZUJhc2Vk
RnV6emVyQWdlbnRCYXNlOjpvcGNvZGVBbGlhc0Zvckxvb2t1cEtleSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpp
bml0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRl
TmV4dCk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9Q
cmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwOgorICAgICAgICAoSlNDOjpQcmVk
aWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRlcm5hbCk6CisK
IDIwMjEtMDgtMDUgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAK
ICAgICAgICAgR0NDIDExIGJ1aWxkcyBzaG91bGQgdXNlIC1Xbm8tYXJyYXktYm91bmRzLCAtV25v
LW5vbm51bGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggN2I3ZDg0MTM0YTc0MDk5ZDJmYjE3NDM3MzViNjNmOGFj
NWY0OTE2Zi4uY2RlMzI3MGJhNjQwNmY1MmU5ZDQxYTJlZGFmYjk0NzhkOTNiZDM0YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgKQEAgLTEwNjksNiArMTA2OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0
YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJ
RCBzcmMsIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRk
cmVzcy5tX3B0ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsK
KyAgICAgICAgb3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICBzdG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQor
CiAgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3Mp
CiAgICAgewogICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1t
ZWRpYXRlOjpjcmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNDM1
Njg4ODhmYmYwNjUwNWNhZjE3OTA3NjE1MzNlN2E5Mjk2NGUzNS4uMTdiYjY2NGQ0YzBlNmU5YzJi
OTMwZWExMDZlOGFiMTEyZDRmYTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYy
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZv
aWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVy
KCkpOworICAgICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAg
fQorCiAgICAgdm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpA
QCAtNjY1LDYgKzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShz
dGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBv
cjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcigp
KTsKKyAgICAgICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0K
KwogICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4
IDk0MzdmZDNiZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlm
YzlhNTU5ZWNhNmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkp
KTsKICAgICB9CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1f
cHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0
Y2hSZWdpc3RlcigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1t
LCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lz
dGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4
IGIwMmU1NjAyMTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThm
MTgwMjkyY2JhOGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBtYWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRl
UHJpdmF0ZVN5bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxp
bmVSZWFjdGlvbkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAor
ICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3lt
Ym9scyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgppbmRleCAxODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5
NTIzNTczYWQxMmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMg
WwogICAgIDpEZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0
aEV4dGVuc2lvbiwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwK
ICAgICA6R2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1
NCw4OSArMTE1NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2lj
QmxvY2tMb2NhdGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2Vu
dW1lcmFibGVfbGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6
IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxS
ZWdpc3RlciwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAor
b3AgOmVudW1lcmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJl
Z2lzdGVyLAorICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdp
c3RlciwKKyAgICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAj
IFdpbGwgYWx3YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgor
ICAgICAgICBpbmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVy
eSB0aW1lIG1vZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFs
UmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVu
dW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRh
dGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1
Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmly
dHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAg
fQotCi1vcCA6aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAg
ICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAot
ICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBW
aXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAg
IGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJh
YmxlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1
YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0
b3JfZ2V0X2J5X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVy
LAogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJv
cGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVy
YXRvck1ldGFkYXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3Ag
OmVudW1lcmF0b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDpl
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmly
dHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAg
ICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
ZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRh
dGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitv
cCA6ZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0
OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxS
ZWdpc3RlciwKICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTog
RW51bWVyYXRvck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2
MTg5OWE2MjA5ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlh
OTZkOTQ4NTc1MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVy
LCBjb25zdCBJbnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMo
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVM
ZW5ndGgsIGJhc2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BO
ZXdHZW5lcmF0b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBz
Y29wZSkKLSAgICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0
ZUxleGljYWxFbnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAg
ICAgVVNFUyhPcENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xU
YWJsZSwgaW5pdGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAt
MjIxLDExICsyMTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRG
cm9tQXJndW1lbnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11
dGFibGVCdXR0ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFi
bGVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSwgZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmlj
UG5hbWUsIGVudW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJv
cGVydHkpCiAgICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBV
U0VTKE9wUHV0UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsy
NTgsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0
aFRoaXMsIGJhc2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZD
dXN0b20sIHZhbHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9w
SGFzT3duU3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAg
IFVTRVMoT3BJblN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikK
IAogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lk
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVn
aXN0ZXIsIGNvbnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhP
cEdldERpcmVjdFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAg
ICBVU0VTKE9wU3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIs
IHNjcnV0aW5lZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiAr
Mjg0LDExIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFy
Z3VtZW50KQogCisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwg
ZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBw
cm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBV
U0VTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUs
IGluZGV4LCBlbnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5
bWJvbENhbGwsIGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUp
OwpAQCAtNDI0LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleElt
cGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICBy
ZXR1cm47CiAgICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRo
ZSBmaXJzdCBhcmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERF
RlMoT3BUb0luZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgs
IGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAg
IERFRlMoT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9w
SGFzRW51bWVyYWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVBy
b3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBE
RUZTKE9wR2V0RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yLCBkc3QpCi0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAg
IERFRlMoT3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVu
dFNjb3BlLCBkc3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9w
Q3JlYXRlTGV4aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3du
VmFsdWUpCiAKKyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwg
aW5kZXgpCisgICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BF
bnVtZXJhdG9ySW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHksIGRzdCkKKwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYx
MDYwNTI1ZTM3ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODlj
NmU5NGQyMGU1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCkBAIC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAg
bV9ieXRlY29kZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRj
aCAob3Bjb2RlSUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpCi0KICAgICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5L
KE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3
YXJkQXJndW1lbnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElO
SyhPcEdldFByaXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQ
bmFtZSwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkK
ICAgICAgICAgTElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRC
eUlkRGlyZWN0LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGluawogCiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJ
TksoT3BFbnVtZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJ
bkJ5VmFsLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5
LCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQor
CiAgICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGws
IHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5
ODhhODYxZGIxNWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzky
ZmM0NTY3YWFmNDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xv
YmFsT2JqZWN0OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Q
cm9wZXJ0eUZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBu
dWxscHRyKSBcCisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwK
IAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0
MzBhMWQzMjRiNjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUy
YTk2ZDY4ZDBkMWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0
aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNy
byhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFy
YXJncykgXAogICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBu
YW1lKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdl
dEJ5SWQpIFwKICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5
R2V0QnlJZCkgXApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAg
ICAgbWFjcm8oT3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BU
YWlsQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykg
XApAQCAtMTM2LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRo
Rm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3Jv
KE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5
VmFsRGlyZWN0KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9w
RW51bWVyYXRvckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAor
ICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFj
cm8oT3BOZXdBcnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2Uy
MjZjOTUyMmY3YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJk
YmQ0YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25l
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3Bl
cnR5KFJlZ2lzdGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwog
fQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0
eUluRm9ySW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpyZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29u
dGV4dCwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghZ2VuZXJpY1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFz
T3duUHJvcGVydHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7Cisg
ICAgY29udGV4dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0
aC5sb2NhdGlvbigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9w
ZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0
cnVjdHVyZUZvckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3Ry
dWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVy
ZUZvckluQ29udGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bj
b2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250
ZXh0LmVudW1lcmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1f
bGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9w
RW51bWVyYXRvckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJh
c2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBj
b250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdElu
c3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBk
c3Q7CiAgICAgfQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2Us
IFIKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVk
Rm9ySW5Db250ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAo
T3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRo
aXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVt
aXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAo
T3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRo
aXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVt
aXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENv
bnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmlu
ZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFdlIGNhbm5vdCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJl
Y3RQbmFtZSA9PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFk
YXRhIElEIGFsbG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0
dXJlQ29udGV4dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAg
T3BHZXREaXJlY3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0
KSwgYmFzZSwgcHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29u
dGV4dC5lbnVtZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5z
dChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhh
dCBjYW4gcmVzaXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8
T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgp
LCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3Io
KSk7CisgICAgICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQo
KSwgcHJvcGVydHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAt
NDU1MiwzMyArNDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEdsb2JhbFByaXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBl
bWl0R2V0RnJvbVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVu
Z3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1l
cmFibGVMZW5ndGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQot
Ci1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0
KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1S
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHBy
b3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVy
SUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1
cm4gZHN0OworICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBt
b2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewot
ICAgIE9wSGFzRW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVy
dHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQotewotICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBi
YXNlLCBwcm9wZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blBy
b3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwg
ZW51bWVyYXRvcik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9y
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1l
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5k
ZXgpCi17Ci0gICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBl
bnVtZXJhdG9yLCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewot
ICAgIE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3Is
IGluZGV4KTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRl
eCkKLXsKLSAgICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAg
cmV0dXJuIGRzdDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0Nl
bGxXaXRoVHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUp
CiB7CiAgICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBA
IC00NjQ4LDIzICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJ
c0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7
CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdp
c3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAg
IGlmICghbG9jYWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5D
b250ZXh0U3RhY2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2Nh
bFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0K
LQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJ
RCogbG9jYWxSZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJl
dHVybjsKLSAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvcklu
Q29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2Rl
RW5kT2Zmc2V0KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGlj
YWxFbnZpcm9ubWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dG
dW5jdGlvbkNvbnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6
OkV4dGVuZHMgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VN
b2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAg
LTQ3NjgsMjAgKzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNU
b0Fycm93RnVuY3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxl
PiBiYXNlVmFyaWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShS
ZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvclJlZ2lzdGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFy
aWFibGU+IGJhc2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAg
IHJldHVybjsKICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0
aW9ucygpLnNpemUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigq
bmV3IFN0cnVjdHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBw
cm9wZXJ0eVJlZ2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5
dGVjb2RlU3RhcnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRv
cHRSZWYoKm5ldyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0
ZXIsIHByb3BlcnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lz
dGVyLCBiYXNlVmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAg
ICByZXR1cm47CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVy
ZUZvckluQ29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5
dGVjb2RlRW5kT2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxp
emUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAg
IG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzEx
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJ
RCogc3JjKQogICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1w
b3JhcnkoKSwgc3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsK
IH0KIAotdm9pZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJv
ZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZv
ckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYK
LSAgICAvLyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAg
Ly8KLSAgICAvLyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVk
IHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0
aW9uIHZhcmlhYmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5j
dGlvbi4KLSAgICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2ll
bnRseSByYXJlbHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAi
YW5hbHlzaXMiIHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8g
ZG8gdGhpcywgd2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxv
dy1zZW5zaXRpdmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZh
cmlhYmxlIHdhcwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8g
cnVudGltZSBjaGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJl
YXNzaWduZWQgZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9m
ZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVj
dGlvbi0+aXM8T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50
ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewot
ICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
LSAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFu
ZCkKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1l
IFR1cGxlVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5z
dEluZGV4ID0gc3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAg
QUxXQVlTX0lOTElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBUdXBsZVR5cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgog
ICAgIC8vIDMuIHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5
LgogCi0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVj
dFBuYW1lPjo6dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZh
bCkgPD0gc2l6ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1p
dDxPcGNvZGVTaXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29k
ZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNl
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3Bl
cnR5Pjo6dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8
PSBzaXplb2YoT3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1p
dDxPcGNvZGVTaXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29k
ZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoTmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBl
OjplbWl0KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSBy
ZW1haW5pbmcgYnl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkg
PCBlbmQpCiAgICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRv
cik7CiB9CiAKLXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2Nr
LCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6Zmlu
YWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAg
IEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZz
ZXQpOwotICAgIGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBG
b3JJbkNvbnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlm
CisgICAgLy8gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAg
IC8vCisgICAgLy8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25l
ZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJh
dGlvbiB2YXJpYWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVu
Y3Rpb24uCisgICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNp
ZW50bHkgcmFyZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8g
ImFuYWx5c2lzIiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRv
IGRvIHRoaXMsIHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZs
b3ctc2Vuc2l0aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2
YXJpYWJsZSB3YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRv
IHJ1bnRpbWUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyBy
ZWFzc2lnbmVkIGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0g
ZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dCgpOyAhZXNjYXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAg
ICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0
KTsKKyAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAg
IGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2tw
b2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+
dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBl
ZCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0g
aW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RP
cGNvZGVJRDsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rp
b24gPSBnZW5lcmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RUdXBsZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBu
YW1lPihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0
b3JHZXRCeVZhbCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9y
IChjb25zdCBhdXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxP
cEluU3RydWN0dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3
cml0ZU9wPE9wRW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVw
bGUpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEpt
cCkgPD0gc2l6ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3Ry
dWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBVbmxpbmtlZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAg
ICBCYXNlOjpmaW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zm
c2V0KTsKLSAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0
SW5kZXggPSBpbnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBp
bnN0UGFpci5zZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4
KS0+Y2FzdDxPcEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHlSZWdJbmRleCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0K
LX0KLQogdm9pZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8q
IGluc3RydWN0aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAs
MTQgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6
OmVtaXQodGhpcywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3Ry
dWN0dXJlRm9ySW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmZpbmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9y
IChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAg
ICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwog
ICAgICAgICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAg
IHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2Nj
YzdjZmRiNjg0ZGFlNTk5MTQuLmY1NGQ4NGZlZGUyM2Y1OWZhN2ExMzk0ODk4ZmVlZjFkNDM4ZjU0
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBKU0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAg
IGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250
ZXh0OworICAgIGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlv
biB7CiAgICAgICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVk
PEZvckluQ29udGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHZpcnR1YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlk
YXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6
IHVpbnQ4X3QgewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0
dXJlRm9ySW4KLSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3Ry
dWN0dXJlRm9ySW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRG
b3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9y
SW5Db250ZXh0KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4
ZWRGb3JJbkNvbnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZv
ckluQ29udGV4dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxSZWdpc3Rlci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRl
eHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVn
aXN0ZXIpCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0K
LQotICAgICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXpl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0
cnVlIH07Ci0gICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRl
Y29kZVN0YXJ0T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29u
dGV4dDsKICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVu
c2lnbmVkLCBpbnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1
c2luZyBIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWdu
ZWQ+OwogCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFy
aWFibGU+IGJhc2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0g
ICAgICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVG
b3JJbiwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdp
c3RlcihpbmRleFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJv
cGVydHlSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVy
YXRvclJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUp
Ci0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzVmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQg
PSBmYWxzZTsgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxSZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklE
KiBwcm9wZXJ0eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7
IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51
bWVyYXRvci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlLmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+
JiBiYXNlVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAg
ICAgIHZvaWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0lu
ZGV4KQpAQCAtMzM4LDM3ICsyODQsMzQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
X2hhc093blByb3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsg
YnJhbmNoSW5zdEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAg
ICAgIEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVt
ZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUsIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBt
X2xvY2FsUmVnaXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5h
bWUocHJvcGVydHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5
T2Zmc2V0KQorICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAg
ICAgICwgbV9tb2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJp
YWJsZSkKKyAgICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNv
ZGVTdGFydE9mZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVj
b2RlU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0
OyB9CisKICAgICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7
Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IG1fcHJvcGVydHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9m
ZnNldDsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJs
ZT4gbV9iYXNlVmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOwor
ICAgICAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5
Qnl0ZWNvZGVTdGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOwor
ICAgICAgICBWZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093
blByb3BlcnR5SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAot
ICAgIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAg
ICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIElu
ZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCog
aW5kZXhSZWdpc3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAg
ICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5k
ZXhSZWdpc3RlcikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCog
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAg
ICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFk
ZEdldEluc3QodW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldElu
c3RzLmFwcGVuZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAg
VmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAg
ICAgc3RydWN0IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAg
SGFuZGxlclR5cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MiwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwog
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9sZE9wVHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4K
ICAgICAgICAgZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVU
eXBlJik7CiAKICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0
IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250
ZXh0KiBmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAg
ICAgICAgRm9ySW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Np
b25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZW5kRGl2b3QpOwpAQCAtOTE3LDcgKzg1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFi
ZWwmIHRhcmdldCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVn
aXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRl
SnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYg
dGFyZ2V0KTsKLSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9y
SW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFi
ZWwmIGdlbmVyaWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9y
SW5Mb29wKEZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1w
T3A+CiAgICAgICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExh
YmVsJiB0YXJnZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzAs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAg
dm9pZCBlbWl0Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwg
UmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0Vu
dW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQq
IGVudW1lcmF0b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJh
dG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1l
cmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5n
dGgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRv
cihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwg
UmVnaXN0ZXJJRCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklE
KiBlbWl0RW51bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgp
OworICAgICAgICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNl
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5k
ZXgsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJ
c0NlbGxXaXRoVHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2Vu
ZXJhdG9yVHlwZSk7IH0KQEAgLTEwNTcsMTAgKzk5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlz
RGVsZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMp
OwogCi0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2Fs
LCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUo
UmVnaXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3Bl
KFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVy
dHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2Up
OwotICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwp
OworICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3Rl
cklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBi
YXNlKTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAog
ICAgICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
ICAgIExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApp
bmRleCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3
YmQ2Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMx
LDI0IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdz
LT5tX2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1f
bGlzdE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2Fy
Z3MtPm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNS
ZXNvbHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRl
eHQgPSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAg
VmFyaWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1l
bnRWYXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBh
cmd1bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5l
cmF0b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRl
eHQgPSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAg
YXV0byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVj
dHVyZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAg
ICAgICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFz
ZSktPmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFs
dWUoKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8
UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJp
YWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAg
ICAgICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52
b2tlZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRo
aXN8IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7
Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9u
VHlwZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7
CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9u
VHlwZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBS
ZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5l
cmF0b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdl
dCgpLCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0
dXJlUHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0
Tm9kZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgp
LCBiYXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVu
dCksIGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0
ZXJJRCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQo
KSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5G
b3JJbkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsK
KyAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRl
eHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBD
YWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBn
ZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsK
QEAgLTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0
b3Iuc2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQt
Pmhhc0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChk
c3QsIGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7
CiAgICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6
OlNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0
aW1pemF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6
SXNOZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBA
IHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9y
Lmlnbm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVu
Z3RoOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxv
Y2FsID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+
IGJhc2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5
LDEzNyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxl
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5h
bWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAg
IH0KIAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2gg
Zm9yLi5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7
Ci0KICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNl
dCgpOwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQo
KSArIChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9
IGdlbmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERa
U3RhY2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2so
cHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAg
IHsKLSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2Nv
cGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVy
YWJsZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwot
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9
IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDAp
KTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5n
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0
LmdldCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
SWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQo
KSk7Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1l
LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9m
aWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNj
b3BlKGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRz
dCwgbV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUo
bG9jYWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93
KHByb2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9u
IGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAo
bG9vcFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdl
bmVyYXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3Ry
dWN0dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2Nv
cGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAg
UmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVy
YXRvckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
anNOdW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0
b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFi
ZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwot
Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdl
bmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0
b3IucHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5n
ZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAg
IGdlbmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7Cisg
ICAgICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
bW92ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50
OjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVx
dWFsaXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUo
cHJvcGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFt
ZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3Np
Z25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BF
bmQuZ2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZl
ZFREWlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAg
ICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVs
U2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdl
bmVyaWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBl
bnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9v
cFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1
YWxseSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdl
dF9ieV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlz
IG9wY29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5h
bWUuZ2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9y
LmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShy
ZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFy
Z2V0KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxw
cyBwbGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5n
dWlzaCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3Is
IHByb3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29u
dHJvbEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hG
b3JJblNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBl
bnVtZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BG
b3JJblNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpz
Y29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNh
bFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5h
bWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNz
aWdubWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5n
ZXQoKSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAg
IGdlbmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmlu
ZGV4IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjJjZWFkOTBlZmI1
NzRjODlmOWMwMmM0Y2Y5NjJmYzQ1NjkyMzE0OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIx
NTEsNyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRv
ckdldEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIGRv
IGNvZGUgbW90aW9uIGZvciBPd25TdHJ1Y3R1cmVNb2RlIGJ1dCB3ZSdkIG5lZWQgdG8gdGVhY2gg
QUkgYWJvdXQgdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgc3RydWN0dXJlIGZvciB0aGF0IHRvIGJl
IHByb2ZpdGFibGUuCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBtYWtlSGVhcFRv
cEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgR2V0QnlW
YWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoKQEAgLTIxNjQs
MTAgKzIxNzEsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgQXRvbWljc1hv
cjogewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkgewogICAgICAgICAgICAg
YXV0byBmb2xkR2V0QnlWYWxPbkNvbnN0YW50UHJvcGVydHkgPSBbJl0gKEVkZ2UmIGFycmF5RWRn
ZSwgRWRnZSYgaW5kZXhFZGdlKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBl
eHBhbmQgdGhpcyBmb3Igbm9uIHg4NiBlbnZpcm9ubWVudHMuCi0gICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQotICAgICAgICAg
ICAgICAgIGlmICghaXNYODYoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1ZSA9IGZvck5vZGUoYXJy
YXlFZGdlKTsKIApAQCAtNDI0NCwyNSArNDI0Nyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1p
CiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgICAgIAotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxl
bmd0aDogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25s
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0
eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwot
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
SW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5Ogot
ICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CisKKyAgICBjYXNlIEhh
c0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5
TW9kZSgpOwogICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgpAQCAtNDI4MSwyNiArNDI2Nyw1MyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
bG9iYmVyV29ybGQoKTsKLSAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewogICAg
ICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQ2VsbCk7CiAgICAgICAgIGNsb2JiZXJXb3Js
ZCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0
dXJlUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcik7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAg
ICAgaWYgKGFycmF5TW9kZS5pc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUpOworICAgICAgICBlbHNlIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgfHwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOworCisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7
CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50
OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSAmJiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCkudXNl
S2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVt
YmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3Ry
dWN0dXJlTW9kZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
RkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
OiB7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CiAgICAg
ICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOworCisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTogeworICAgICAgICAvLyBGSVhN
RTogV2UgY2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBi
YXNlZCBvbiBhYnN0cmFjdAorICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KKyAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKaW5kZXggMTExMWY4OWY5ZDdiNWI5Nzc3OGMxNmM4ZDU0NjQwYmVh
Mzc0NDJiMi4uYTAyNmFhZDE4OTNiZjIzYzU3MTk2ZmNjNmM5MWZjMjAwMDNjNDU2NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCkBAIC0yODksNiArMjg5LDExIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91
bmRzU2FuZUNoYWluOwogICAgIH0KIAorICAgIGJvb2wgaXNTYW5lQ2hhaW4oKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSB8fCBpc091dE9mQm91bmRz
U2FuZUNoYWluKCk7CisgICAgfQorCiAgICAgYm9vbCBpc091dE9mQm91bmRzKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyB8
fCBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCmluZGV4IGRiMzdmNGRkZGJmODBjZDY2ZWI1Nzg3ZDdiYWEyYmY1M2FmODkwNzYu
LjlkYmQwYjQ3ZDlkZmY0Y2Y2MDM4YWY1MDAxNzkzNDhiZTBhZWEyOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcApAQCAtMzkwLDcgKzM5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyAmIH5Ob2RlQnl0ZWNvZGVOZWVkc05lZ1plcm8pOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCisgICAgICAgIGNh
c2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAg
ICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29k
ZVVzZXNBc1ZhbHVlKTsKICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkt
Pm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNlc0FzTnVtYmVyIHwgTm9kZUJ5dGVjb2RlVXNlc0Fz
T3RoZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNJbnQgfCBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUlu
ZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKaW5kZXggYTI5NmM0Yjg3Yzg1ODg2NGZiZGVkZDc0ZWY3MjdlNTRkOTVmZDY5NC4uZjc2ODhl
ZDE0Mjg3ZGU1NDRiMGM4ODdmZmM4MmUxNmU2OTM0ZmVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTgzODcsMTAzICs4Mzg3LDEz
NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3ByaXZhdGVfYnJhbmQpOwogICAgICAgICB9CiAK
LSAgICAgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKLSAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0
aD4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChHZXRFbnVt
ZXJhYmxlTGVuZ3RoLCBnZXQoYnl0ZWNvZGUubV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1
Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9H
cmFwaChIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksCi0gICAgICAgICAgICAgICAgZ2V0
KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0gICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkp
OworICAgICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51
bWVyYXRvcj4oKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChH
ZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7CisgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7CiAgICAgICAgIH0KIAot
ICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9w
ZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNF
bnVtZXJhYmxlUHJvcGVydHksIGdldChieXRlY29kZS5tX2Jhc2UpLCBnZXQoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3By
b3BlcnR5KTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfbmV4dDogewor
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRB
cnJheU1vZGUobWV0YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUq
IGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogZW51bWVy
YXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOworICAgICAgICAgICAgTm9kZSogbW9k
ZSA9IGdldChieXRlY29kZS5tX21vZGUpOwogCi0gICAgICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1
Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzT3duU3RydWN0dXJlUHJvcGVydHksCi0g
ICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Vu
dW1lcmF0b3IpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGE7CiAKLSAgICAgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1
cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgYWRkVG9HcmFwaChJblN0cnVjdHVyZVByb3BlcnR5LAotICAgICAgICAgICAg
ICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5t
X3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkp
OwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTsKLSAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgICAg
ICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwotICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7Ci0gICAgICAgICAgICBOb2RlKiBwcm9w
ZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOwotICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7Ci0gICAgICAgICAgICBOb2RlKiBoYXNJdGVy
YWJsZVByb3BlcnR5ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpKTsKLSAgICAgICAgICAgIG1f
ZXhpdE9LID0gZmFsc2U7IC8vIEhhc0luZGV4ZWRQcm9wZXJ0eSBtdXN0IGJlIHRyZWF0ZWQgYXMg
aWYgaXQgY2xvYmJlcnMgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSBpdCBn
ZW5lcmljLgotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBoYXNJdGVyYWJsZVByb3Bl
cnR5KTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVt
ZXJhdG9yKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBzdG9yYWdl
IGZvciBJbmRleGVkTW9kZSBvbmx5LgorICAgICAgICAgICAgTm9kZSogdXBkYXRlZEluZGV4QW5k
TW9kZSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzZWVuTW9kZXMpKTsK
KworICAgICAgICAgICAgTm9kZSogdXBkYXRlZE1vZGUgPSBhZGRUb0dyYXBoKEVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUsIHVwZGF0ZWRJbmRleEFuZE1vZGUpOworICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fbW9kZSwgdXBkYXRlZE1vZGUpOworCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVk
SW5kZXggPSBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCB1cGRhdGVkSW5k
ZXhBbmRNb2RlKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2luZGV4LCB1cGRhdGVkSW5k
ZXgpOworCisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUsIGFkZFRvR3Jh
cGgoRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIE9wSW5mbygpLCBPcEluZm8oc2Vl
bk1vZGVzKSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9kZSwgZW51bWVyYXRvcikpOworCisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX25leHQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NS
RXhpdCgpOwotICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFk
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gZ2V0UHJlZGljdGlv
bldpdGhvdXRPU1JFeGl0KCk7CisKICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNv
ZGUubV9iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1f
cHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHlOYW1lID0gZ2V0KGJ5dGVjb2Rl
Lm1fcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2Rl
Lm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogbW9kZSA9IGdldChieXRlY29kZS5tX21vZGUp
OwogICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0
b3IpOwogCisgICAgICAgICAgICBhdXRvIHNlZW5Nb2RlcyA9IE9wdGlvblNldDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3KG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFk
YXRhKTsKKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoRm9yY2VPU1JFeGl0KTsKKworICAgICAgICAgICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogYmFkTW9kZSA9IGFkZFRvR3JhcGgoQXJpdGhCaXRBbmQsIG1vZGUsIGpzQ29uc3RhbnQoanNO
dW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKKworICAgICAgICAgICAgICAgIC8v
IFdlIGtub3cgdGhlIEFyaXRoQml0QW5kIGNhbm5vdCBoYXZlIGVmZmVjdHMgc28gaXQncyBvayB0
byBleGl0IGhlcmUuCisgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tJc0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmcoanNOdW1iZXIoMCkp
KSwgYmFkTW9kZSk7CisKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAg
ICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7IC8vIFVzZSBpbmRleCBzbyB3ZSds
bCB1c2UgdGhlIG5vcm1hbCBpbmRleGVkIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNo
IEdldEJ5VmFsLgorICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFw
aChOb2RlOjpWYXJBcmcsIEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJ
bmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9t
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZW51
bWVyYXRvcik7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNraW5n
IGZvciBhIEJhZENvbnN0YW50VmFsdWUgY2F1c2VzIHVzIHRvIGFsd2F5cyB1c2UgdGhlIEdlbmVy
aWMgdmFyaWFudCBpZiB3ZSBzd2l0Y2hlZCBmcm9tIEluZGV4ZWRNb2RlIC0+IEluZGV4ZWRNb2Rl
ICsgT3duU3RydWN0dXJlTW9kZSBldmVuIHRob3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAg
ICAgICAgICBpZiAoIXNlZW5Nb2Rlcy5jb250YWluc0FueSh7IEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6R2VuZXJpY01vZGUsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0
cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAgICAgICAgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG1vZGVUZXN0ID0gYWRk
VG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhqc0Jvb2xlYW4oZmFsc2UpKSksIG1vZGVUZXN0KTsKKworICAgICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KGluZGV4KTsgLy8gVXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQgb3B0
aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8g
Rm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1v
ZGUpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVu
dW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVj
dWxhdGlvbikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNl
KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKKyAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChu
dWxscHRyKTsgLy8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCiAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChtb2RlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0RGly
ZWN0UG5hbWUsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9yR2V0
QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7
CiAKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9kaXJlY3RfcG5hbWUpOworICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKLSAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVt
ZXJhdG9yPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdl
dFByb3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLSAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOwor
ICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogCi0gICAgICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSwKLSAg
ICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsKLSAgICAgICAgfQorICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckluQnlWYWwsIE9w
SW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEpKSk7CiAKLSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6IHsK
LSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLAotICAgICAgICAgICAgICAgIGdl
dChieXRlY29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5t
X2luZGV4KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZW5lcmlj
X3BuYW1lKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3Ry
aW5nOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoVG9JbmRleFN0cmluZywgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAg
ICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOworCisgICAgICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKTsK
KyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRh
dGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0
KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVj
b2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckhhc093blByb3BlcnR5LCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSkp
OworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVy
dHkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKaW5kZXggY2MwZDAxNGRh
MjkzMWZmM2VjZGNlOTQyOWNjMjYyNTYxZTJmN2Y3Ni4uMDZkMTlkMTczOTczMDNmNzQxYmU2YjAy
YmYwMTA1N2Y3MjI1NjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGF0YUxvZygi
ICAgRm91bmQgbXVzdC1oYW5kbGUgYmxvY2s6ICIsICpibG9jaywgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBUaGlzIG1lcmdlcyBzbmFwc2hvdCBvZiBzdGFjayB2YWx1ZXMgd2hpbGUgQ0ZB
IHBoYXNlIHdhbnQgdG8gaGF2ZSBwcm92ZW4gdHlwZXMgYW5kIHZhbHVlcy4gVGhpcyBpcyBzb21l
d2hhdCB0cmlja3kuCi0gICAgICAgIC8vIEJ1dCB0aGlzIGlzIE9LIGFzIGxvbmcgYXMgREZHIE9T
UiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpwcm92ZW4qIEFic3RyYWNWYWx1ZSB2
YWx1ZXMuIEFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzCisgICAgICAgIC8vIEJ1dCB0aGlzIGlz
IE9LIGFzIGxvbmcgYXMgREZHIE9TUiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpw
cm92ZW4qIEFic3RyYWN0VmFsdWUgdmFsdWVzLiBBbmQgaXQgdHVybnMgb3V0IHRoYXQgdGhpcwog
ICAgICAgICAvLyB0eXBlIHdpZGVuaW5nIGlzIGNyaXRpY2FsIHRvIG5hdmllci1zdG9rZXMuIFdp
dGhvdXQgaXQsIG5hdmllci1zdG9rZXMgaGFzIG1vcmUgc3RyaWN0IGNvbnN0cmFpbnQgb24gT1NS
IGVudHJ5IGFuZAogICAgICAgICAvLyBmYWlscyBPU1IgZW50cnkgcmVwZWF0ZWRseS4KICAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKaW5kZXggYzcxNjRiMzBmNDY0ZWIwZDQzODJlMmNjYTQyZDU2OTk2
NGQxYmY2Ny4uYWM3ODJkOTliNDUzYzUwODI2MWE3ZjNhODc5NTU4ODAwZDAwNWY3NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMjU0LDE3
ICsyNTQsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29k
ZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfaGFzX3ByaXZh
dGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZToKLSAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKLSAgICBjYXNlIG9wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVyYWJs
ZV9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0
eToKLSAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKICAg
ICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgotICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWU6Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6
Ci0gICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoKICAg
ICBjYXNlIG9wX25ld19mdW5jX2V4cDoKICAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoK
QEAgLTI5OSw2ICsyODksMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNv
ZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9w
X3NldF9wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3BfY2hlY2tfcHJpdmF0ZV9icmFuZDoKICAg
ICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6Cisg
ICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9y
X2luX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eToKICAg
ICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX2NhbGxfZXZh
bDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOWQxMDA0
ZmU1M2YzZDQ0N2RmMTAzZmFjYTBkMmUxMGVjNGZmNWY0Ni4uNmNjZGEzYjllMGY4N2ZkOTI1YWMw
ZGVkODI3ZGFkMWE0NGY2MmI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBjYXNlIENoZWNrQXJyYXlPckVtcHR5Ogog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNl
IEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIEdldFZlY3Rvckxlbmd0aDoKQEAgLTE2NCw3
ICsxNjgsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIEFycmF5UG9w
OgogICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJv
cGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBBdG9taWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNh
c2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKQEAgLTMzNywyMSArMzQwLDgwIEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFk
LCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHdyaXRlKE1hdGhEb3RSYW5kb21TdGF0ZSk7CiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBy
ZWFkKEhlYXApOwotICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAg
Y2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgIGRlZihQdXJlVmFsdWUo
bm9kZSkpOworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAg
ICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBpZiAobm9kZS0+ZW51bWVy
YXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlICYmIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICByZWFkKE5hbWVkUHJvcGVydGllcyk7CisgICAgICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2Rl
LT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihI
YXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGdyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAg
ICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91
YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAg
ICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUo
bm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2xvYmJlclRv
cCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CisgICAgY2FzZSBI
YXNJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICBzd2l0
Y2ggKG1vZGUudHlwZSgpKSB7CkBAIC03MDUsNiArNzY3LDggQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdy
aXRlRnUKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgVG9Qcm9wZXJ0eUtleToKICAg
ICBjYXNlIEluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEluQnlJZDoKICAgICBjYXNlIEhhc1By
aXZhdGVOYW1lOgogICAgIGNhc2UgSGFzUHJpdmF0ZUJyYW5kOgpAQCAtNzE2LDEyICs3ODAsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgUmVzb2x2ZVNjb3BlRm9ySG9pc3Rp
bmdGdW5jRGVjbEluRXZhbDoKICAgICBjYXNlIFJlc29sdmVTY29wZToKICAgICBjYXNlIFRvT2Jq
ZWN0OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OgotICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5OgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVt
ZXJhdG9yOgotICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3Vz
dG9tOgogICAgIGNhc2UgVG9OdW1iZXI6CiAgICAgY2FzZSBUb051bWVyaWM6CkBAIC05MDYsNiAr
OTY1LDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAg
ICAgICAgY2xvYmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlN
b2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZl
YTkxZGYyMjRiZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZk
NTUxNTBjNjY1M2MzN2UxOGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcApAQCAtMjA1LDcgKzIwNSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAg
IGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVu
Z3RoOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAg
IGNhc2UgQ2hlY2tCYWRWYWx1ZToKQEAgLTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNl
IEdldEJ5SWRXaXRoVGhpczoKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBH
ZXREaXJlY3RQbmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBC
dWNrZXQ6CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJh
YmxlSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJv
cGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3Ry
dWN0dXJlUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAg
IGNhc2UgSGFzUHJpdmF0ZU5hbWU6CkBAIC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2Fz
ZSBUaHJvd1N0YXRpY0Vycm9yOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAg
IGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRv
ckdlbmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJh
dG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVy
aWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dD
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZToKICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgogICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxE
aXJlY3Q6CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJh
ZDkxYzc2ZjU5NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li5kNTFkOTNmZWE0ZGIzYmU5YWJlOWQ5YjEx
NDY4ZjYwOWMwNWQwNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKQEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDMpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAg
ICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+
cHJlZGljdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKQEAgLTEwNjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5h
cnJheU1vZGUoKS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0
IGZvcmNlIE9TUiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE93blN0cnVjdHVyZU1vZGUuCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdFIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byBk
byB0aGlzLi4uCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdl
dEJ5VmFsKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUobm9kZS0+YXJy
YXlNb2RlKCkud2l0aFR5cGUoQXJyYXk6OkdlbmVyaWMpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMDk2LDcgKzExMTIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5v
dyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KICAgICAgICAgICAgICAgICAgICAgLy8gb3V0
LW9mLWJvdW5kcyBzbG93IHBhdGguIFdlIGNhbiBmaXggdGhhdCB3aXRoOgogICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4
Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJy
YXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCkBAIC0xMTExLDcgKzExMjcsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlNb2RlLnNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpICYm
IGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEhvbGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwgc28gaWYg
dGhlIHVzZXIgZG9lc24ndCBjYXJlCkBAIC0xMTIxLDcgKzExMzcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRl
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE3OCw3ICsxMTk0LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IGEgbm9uLUpTVmFs
dWUgcmVzdWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgYXMgdGhlIGluZGV4aW5nIG1vZGUgZG9l
c24ndCB0ZWxsIHVzIGFib3V0IHRoZSB0eXBlIG9mIE93blN0cnVjdHVyZQorICAgICAgICAgICAg
Ly8gcHJvcGVydGllcy4gVGhpcyBpc24ndCBhbiBpc3N1ZSBmb3IgSW5kZXhlZE1vZGUgb25seSBh
cyBCeXRlY29kZVBhcnNpbmcgd2lsbCBlbWl0IGEgbm9ybWFsIEdldEJ5VmFsIGlmIHdlJ3ZlIHBy
b2ZpbGVkIHRoYXQuCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0
QnlWYWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5
TW9kZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAg
ICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkKQEAgLTIyNzUsMjggKzIyOTUs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBj
YXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4o
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZp
eEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25TdHJpbmdVc2U+KG5vZGUtPmNo
aWxkMigpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7
CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAgICBub2RlLT5z
ZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLApAQCAtMjMxNSwzNiArMjMxNCw2NCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwg
QXJyYXk6OkluQm91bmRzU2FuZUNoYWluKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgICAgIEVkZ2UmIGJhc2Ug
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSYgcHJvcGVy
dHkgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSYgaW5k
ZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgRWRnZSYgZW51
bWVyYXRvciA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMyk7Ci0gICAgICAgICAgICBmaXhF
ZGdlPENlbGxVc2U+KGJhc2UpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KGluZGV4KTsKLSAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihlbnVtZXJhdG9yKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQogICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWU6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAg
ICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAg
ICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAg
ICBFZGdlJiBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3Rv
cmFnZUNoaWxkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0
YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS0+cHJlZGljdGlvbigpKSk7CisKKyAgICAgICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KGJhc2UpOworICAgICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oYmFz
ZSwgaW5kZXgsIHN0b3JhZ2VFZGdlKTsKKworICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LmJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2Fu
ZUNoYWluSWZQb3NzaWJsZShub2RlLCBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6
SW5Cb3VuZHMgPyBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6T3V0T2ZCb3VuZHNT
YW5lQ2hhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVy
YXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2Fj
aGUpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxL
bm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdl
bmVyaWNQbmFtZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJ
bnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDog
eworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNl
PihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsK
ICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRo
ZSBpbnN0cnVjdGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxU
eXBlU2V0LgogICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlz
IGNvbnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBm
b3IKQEAgLTM2OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFy
cmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAor
ICAgIHZvaWQgc2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9u
OworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsg
b24gYSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJu
IHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNo
YW5nZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAg
ICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBh
Y3R1YWxseSBoYWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBm
cm9tIGEgaG9sZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2Vs
eSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQg
b2YKKyAgICAgICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9y
IG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5h
TiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlv
biwgYW5kIGp1c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0
IGNhc2UuIFRoaXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRv
IGhhdmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0
byBVbmRlZmluZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3
YW50IHRvCisgICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIElu
dDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAv
LyBiYXNlZD8KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1w
bGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAg
ICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRo
ZSBob2xlIGNoZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQg
aGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAg
ICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2
NjgKKworICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFy
cmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5o
YXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAg
ICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1Nh
bmVDaGFpbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVu
dGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8v
IHJldHVybmVkIGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdl
IHN0aWxsIGRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJl
cXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAo
aXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5k
cyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZl
SW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5
OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1v
ZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAg
IHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAg
ICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVy
KSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUg
dXNlciBkb2Vzbid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZl
cmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAg
ICAgICAgICAvLyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxh
dGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZC
b3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdh
dGl2ZUluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBB
cnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAg
ICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7
CisgICAgfQorCiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFy
cmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5
ZmU2MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQx
OTJkMTc1MmQ0NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1B1dEJ5SWRTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJ
ZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0Jy
YW5jaCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2Vy
UmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQw
ZWY0MDMzMGMyMzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4
OTIyMTUxZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVn
ZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4
ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRy
YWN0SW5kZXguCiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0
UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAg
ICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4
NmQzOTNmZDg3YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0
ZjBkNmY0NjQ2NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNw
cApAQCAtMTExLDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBi
cmVhazsKIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAg
Y2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2
ZDBhNDM4ZTVlZDgxLi4yOTg1ZGZkMWIyNDY0ODNkNzc1YzM1NjhhNzczNjkzNDI0ZjkxZjUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1
ZGUgIkRlbGV0ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIK
ICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIK
ICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAg
ICAgICBjYXNlIEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAg
ICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNh
c2UgR2V0QnlJZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEdldEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoK
ICAgICAgICAgY2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZh
bDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlz
OgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzU3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Ao
KSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFy
Q29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVu
dW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWlj
c0FuZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNl
IEF0b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2Fz
ZSBBdG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0
b21pY3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1
c2g6CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2ln
bmVkIHN0b3JhZ2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdl
Q2hpbGQoKSk7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0No
YXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmlu
Z0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5
VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgor
ICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNo
YW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWlj
c0xvYWQ6CisgICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9y
ZToKKyAgICAgICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6Cisg
ICAgICAgICAgICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAg
IGNhc2UgQXJyYXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBB
cnJheVBvcDoKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVy
biAyOworCisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0
dXJuIDI7CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToK
KyAgICAgICAgICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAv
LyBGSVhNRTogQWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3Mg
dG8gZGV0ZXJtaW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiAr
MjI4MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0
QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAg
ICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0
OgpAQCAtMjIxNiw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgog
ICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBBdG9taWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0NvbXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAg
IH0KIAorICAgIGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5k
ZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1l
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJl
NTY1NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdl
bmVyYXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAg
ICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVy
ZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBt
YWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRv
SW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFw
IGFuZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3
ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLmEzN2U2NmY0OTI4NWViNDk3YjFiZWZhODc3MzQ5MGY1YjFm
OWI1YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNl
KTsKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFt
ZSkpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxP
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAg
ICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1v
ZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1l
U3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9i
amVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpO
dW1iZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5k
ZXgpOworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBt
b2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAg
fQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFt
ZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmpl
Y3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgSlNPYmplY3QqIG9iamVj
dCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOworfQorCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
YmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
SlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFzUHJv
cGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5h
bWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3BlcnR5
TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFz
ZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVy
KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICByZXR1cm4ganNT
dHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0g
SlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFzT3duUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3Vy
ZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7
CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50b0lkZW50aWZpZXIoZ2xvYmFs
T2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3RQcm90
b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIGlkZW50aWZpZXIpKSkpOwog
fQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJ
bmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogcmVn
ZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4KSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFmZWRlNTk1ZDBmYjhmYTgzNWVm
NzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQxM2JmMTg4MGNlNzYzNGVlMzEz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTM2LDYg
KzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5zdGFuY2U7CiBjbGFzcyBKU0Jp
Z0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsKK2NsYXNzIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTEwNCwxMiArMTA1LDE0IEBA
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvdG90eXBlT2YsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCkp
OwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgSlND
ZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNPd25TdHJ1Y3R1
cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpT
U3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JblN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNT
dHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5
RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpKTsK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9y
Q2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxP
YmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90LCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdWludDMyX3QsIGludDMyX3Qp
KTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJO
YW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
LCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOworCiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2VsbCosIChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3RydWN0dXJlKikpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3ZTMwNmJhYjg1MzdjMGU4OWUy
ZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1ZTM3NjQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIGlmICgh
Y2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMSk7
CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCkucmVm
aW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAgICAgICAgICAgICAgICAgY2hp
bGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAg
IHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCkBAIC01
MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAm
JiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpICYmIChub2Rl
LT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKSkK
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMy
T25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDUyQW55KTsKQEAg
LTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBBcnJheVBv
cDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKQEAg
LTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgog
ICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6
CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRD
YWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OiB7
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBJbkJ5VmFs
OgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAg
ICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNhc2UgSGFzT3duUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNF
bnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVBy
b3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZTogewotICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CisKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAgICAgLy8gVGhpcyBj
YW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJhbmNoIG9mIHRoYXQgY2FzZSBp
biB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aAorICAg
ICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3Bl
Y0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcp
OworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZhbHVlIHByb2ZpbGUgd2hldGhl
ciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3RyaW5nLgorICAgICAgICAgICAg
c2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDogewogICAgICAgICAgICAgLy8g
V2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHByb2R1Y2UgYW4gaW50MzIuIEhv
d2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0IHByb2R1Y2VzIE5hTiBvciBp
bnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBjOTYzN2ExZDEzZmFhZjllYzA0
NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJiZWFiMDJhZDBjNTEzZGRiNDlj
YTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2Vy
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJp
bmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91bmRzQ2hlY2sobV9ncmFwaC5j
aGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSksIG1fZ3JhcGguY2hpbGQo
bV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEVudW1lcmF0
b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbG93ZXJC
b3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJkMGI5YjQ2MGUyYzUwLi4xZTA0
NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2LDEwICsyOTYsNiBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2Ug
RmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51
bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
bmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgY2FzZSBUb0lu
ZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAv
LyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBpbiBjb250cm9sIGZsb3cgaGVy
ZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKQEAgLTQ5Niw2ICs0
OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgcmV0dXJuIGlzU2FmZTsK
ICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAg
IC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0cyBidXQgdGhleSdsbCBvbmx5
IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUgc28gd2UgbWln
aHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNl
IENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpAQCAtNTk1LDYgKzU5Nyw4IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAg
Y2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBIYXNQcml2
YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAgICBjYXNlIEhhc093blByb3Bl
cnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNh
c2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgTXVs
dGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxl
UHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIElu
U3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICBjYXNlIEdl
dFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2Fz
ZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1MThhNjA4NzEzNDJkNjQ0ZWQ5
NzhiMWU1YjguLjg5NzM1MjAzMmNiMzdlODA2MzE5MDUyMzZmYWU1Y2RmYzJlOWFhMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0x
NjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgR1BSUmVnIHNwZWNpZmlj
UGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFs
dWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0
LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCi0gICAgOiBtX2dwcihqaXQs
IFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0LCBzcGVjaWZpY1BheWxvYWQp
CiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1Zh
bHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFu
ZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1fcGF5bG9hZEdQUihqaXQsIHNw
ZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNlbmRpZgogewotICAgIGlmIChy
ZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRl
bXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwg
b3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogSlNWYWx1
ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQs
IFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAgLTI1OTUsNyArMjU4NSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUqIG5vZGUpCiAg
ICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlLCBj
b25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0
YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGguY2hpbGQobm9kZSwgMSkp
OwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0VGFnLmFkb3B0KHJlYWxSZXN1
bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgfQot
I2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1h
dDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6IERhdGFGb3JtYXRDZWxsKTsK
KyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOwogCiAgICAg
Ly8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRp
Y2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSks
IHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJpZ0NoYXJh
Y3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCBzY3JhdGNoUmVnLCAm
dm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKIAogICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsyNjUzLDIyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lz
dGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSk7
CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
bWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAg
ICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHNjcmF0Y2hSZWcpLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1h
a2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAg
ICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0
Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3Qp
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgb3V0T2ZC
b3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgb3V0
T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBn
bG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKLSAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3Ry
aW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNj
cmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmpl
Y3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9i
amVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJl
bnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBzY3Jh
dGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICBjZWxs
UmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChm
b3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9kZSk7CisgICAgfQogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqIG5vZGUpCkBAIC0z
MzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxvYWRGcm9tSW50VHlwZWRB
cnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnCiAgICAgfQogfQogCi12
b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiBub2Rl
LCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBib29sIGNhblNwZWN1bGF0
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUq
IG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGJvb2wg
Y2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBpZiAoZWxlbWVudFNpemUodHlw
ZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBpc1VJbnQzMiA9IGVsZW1lbnRT
aXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAgIEdQUlJlZyByZXN1bHRSZWcg
PSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChzaG91bGRCb3gpIHsKKyAgICAg
ICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZnJlc3VsdCh0aGlz
KTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFJlZywgZnJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFJl
ZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21w
aWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6OnR3b1RvVGhlMzIpLCBmcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzVUludDMyKSB7CisgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpOwogICAgICAg
ICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25l
ZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5T
cGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBy
ZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChy
ZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwgR1BSUmVnIHJlc3VsdFJl
ZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2Rl
LCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUp
KTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHQK
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRS
ZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7CisgICAgYm9vbCBzaG91bGRC
b3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1pdFR5cGVkQXJyYXlCb3VuZHND
aGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAgbG9hZEZyb21JbnRUeXBlZEFy
cmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcsIHR5cGUpOworICAgIGxvYWRG
cm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IHRydWU7
Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0UmVnLCB0eXBlLCBj
YW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3Vs
dFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKIH0KIAogYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKQEAgLTM2MzYsNyArMzYyNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
R1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUq
IG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIEFTU0VSVChpc0Zs
b2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFy
cmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
Zm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwogICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKICAgICBl
bWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKQEAg
LTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBkb3VibGVSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAg
ICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcwMyw3ICszNzA0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmlu
ZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlKQogICAg
IEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIu
Z3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3Vs
dFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCiAgICAgc3BlY3Vs
YXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGFyZzFHUFIpOwogICAgIHNw
ZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAog
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCBy
ZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZywgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIpOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmpl
Y3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZv
cm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBh
cmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMzczMSwxMiArMzcz
MywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAg
IEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBKU1ZhbHVl
UmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtODAz
OCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJh
eUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdCh2ZWN0b3JHUFIs
IG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6
dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0
KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgwODIsMjMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkK
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSog
bm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwog
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gyKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIuZ3ByKCk7CiAgICAg
CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CisKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9
IHByZWZpeChEYXRhRm9ybWF0SlMpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZTdG9yYWdlKCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CkBAIC0xMzQ0Miw0NCArMTM0
NDYsMzU0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUaHJvd1N0YXRpY0Vycm9yKE5v
ZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSogbm9kZSkK
IHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBlbnVtZXJhdG9yKTsK
KyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGUodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
ZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKworICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQUlJlZyBtb2RlR1BSID0gbW9kZS5n
cHIoKTsKICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7Ci0gICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgc3RyaWN0SW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLX0KKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFk
YXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMsIFJldXNlLCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSByZXN1bHQucmVncygpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFz
RW51bWVyYWJsZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENh
Y2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKDApKSk7CiAKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1
ZVJlZ3MoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGluY3JlbWVudExvb3A7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmU7CisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9k
ZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7CisKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoaW5kZXhHUFIsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IG1vZGVHUFIpOworCisgICAgICAgICAgICBpbmNyZW1lbnRMb29wID0gbV9qaXQubGFiZWwoKTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaC5ncHIoKSk7
CisKKyAgICAgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoLmdw
cigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
KyAgICAgICAgfSkpOworICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKS5saW5rVG8oaW5jcmVtZW50TG9vcCwgJm1f
aml0KTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSA8PCAzMiksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgbV9qaXQub3I2NChz
Y3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKworICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOworCisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGVudW1l
cmF0b3IuCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwg
bm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1
ZVNvdXJjZSgpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhH
UFIsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1v
ZGVHUFIpOworCisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICBpbml0TW9kZS5saW5r
KCZtX2ppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQub3I2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgPDwgMzIpLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQ
UigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UucmVncygpOwogCiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5k
TW9kZSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBp
bmRleEdQUiwgbW9kZUdQUiwgZW51bWVyYXRvckdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwg
bm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9kZSkKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleChOb2RlKiBub2Rl
KQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgSlNWYWx1ZU9wZXJh
bmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBh
aXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQ
UiA9IHBhaXJSZWdzLnBheWxvYWRHUFIoKTsKIAotICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKLSAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwot
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKworICAgIG1faml0LmFuZDMyKFRydXN0
ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXlsb2FkR1BS
LCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGUoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5q
c1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBwYWlyR1BSID0gaXM2NEJpdCgpID8gcGFpclJlZ3Mu
cGF5bG9hZEdQUigpIDogcGFpclJlZ3MudGFnR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIG1faml0LnJzaGlmdDY0KHBhaXJHUFIsIFRydXN0ZWRJbW0zMigz
MiksIHJlc3VsdEdQUik7CisjZWxzZQorICAgIG1faml0Lm1vdmUocGFpckdQUiwgcmVzdWx0R1BS
KTsKKyNlbmRpZgorICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spLCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0
SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqIG5vZGUpCit7Cisg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4T3BlcmFuZCh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGVPcGVyYW5kKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9y
T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
cmVzdWx0VGVtcCh0aGlzKTsKKworICAgIEdQUlJlZyBpbmRleCA9IGluZGV4T3BlcmFuZC5ncHIo
KTsKKyAgICBHUFJSZWcgbW9kZSA9IG1vZGVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyBlbnVt
ZXJhdG9yID0gZW51bWVyYXRvck9wZXJhbmQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdFRlbXAucmVncygpOworCisgICAgYXV0byBzZWVuTW9kZXMgPSBPcHRpb25T
ZXQ8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjo6ZnJvbVJhdyhub2RlLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2Vz
OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wZXJhdGlvbkNhbGw7CisKKyAgICBib29sIG5l
ZWRzT3BlcmF0aW9uID0gc2Vlbk1vZGVzLmNvbnRhaW5zKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGZsdXNoIG9uIGFsbCBjb2Rl
IHBhdGhzIGlmIHdlIGNvdWxkIGNhbGwgdGhlIG9wZXJhdGlvbi4KKyAgICBpZiAobmVlZHNPcGVy
YXRpb24pCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBpZiAoc2Vlbk1vZGVzLmNv
bnRhaW5zQW55KHsgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIH0pKSB7CisKKyAgICAgICAgaWYg
KG5lZWRzT3BlcmF0aW9uKQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbW9kZSwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKworICAgICAgICBhdXRvIG91dE9m
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworCisgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvciwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgaW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgZG9uZUNhc2VzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgbV9qaXQubW92ZVRydXN0ZWRWYWx1ZShqc051bGwoKSwgcmVzdWx0UmVncyk7CisgICAg
fQorCisgICAgaWYgKG5lZWRzT3BlcmF0aW9uKSB7CisgICAgICAgIGlmIChvcGVyYXRpb25DYWxs
LmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5h
bWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwg
ZW51bWVyYXRvcik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgfQorCisg
ICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckdldEJ5
VmFsKE5vZGUqIG5vZGUpCit7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoR1BSUmVnIGJhc2VDZWxsR1BS
KSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAg
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSOworICAgICAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlU2xvd1BhdGg7
CisKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7
CisgICAgICAgICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBp
ZiAoc3RvcmFnZUVkZ2UpCisgICAgICAgICAgICAgICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0
b3JhZ2VFZGdlKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRl
eCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgNCkpOworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDUpKTsKKworICAgICAgICAgICAgR1BSUmVnIG1v
ZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICAgICAgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsK
KyAgICAgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAg
ICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHJl
c3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgICAgICAgICAgYm9vbCBoYXZlU3RvcmFn
ZSA9ICEhc3RvcmFnZUVkZ2U7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZVRlbXBv
cmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKCFo
YXZlU3RvcmFnZSkgeworICAgICAgICAgICAgICAgIHN0b3JhZ2VUZW1wb3JhcnkgPSBHUFJUZW1w
b3JhcnkodGhpcywgUmV1c2UsIGVudW1lcmF0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VH
UFIgPSBzdG9yYWdlVGVtcG9yYXJ5LmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBub3RGYXN0TmFtZWRDYXNlczsKKworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlz
IG5vdCBhbiBvYmplY3QuCisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtb2RlR1BSLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKSk7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2UpLmlzVHlwZShTcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoYmFzZUNlbGxHUFIpKTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Uga25vdyB0aGVyZSdzIG9u
bHkgb25lIHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBlbWJlZCBpdCBoZXJlLgorICAg
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2Vs
bEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHJlcHJlc2Vu
dCBJbmRleGVkK05hbWVkPworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpLm5vZGUoKSA9PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpLm5vZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgYmFkU3RydWN0dXJlU2xvd1BhdGggPSBiYWRTdHJ1Y3R1cmU7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub3RGYXN0TmFtZWRD
YXNlcy5hcHBlbmQoYmFkU3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUg
dGhlIG9mZnNldAorICAgICAgICAgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nl
c3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAg
ICAgICAgICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7CisKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChiYXNlQ2VsbEdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKwor
ICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgICAgICAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
aWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWhhdmVTdG9yYWdlKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENh
c2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1
bHRSZWdzLCBEYXRhRm9ybWF0SlMpOworICAgICAgICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVs
eSBvbiBjb21waWxlR2V0QnlWYWwgdG8gY2FsbCBqc1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMga2luZGEgaGFja3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVy
YXRpb25JbmZvKG5vZGUpLmpzVmFsdWVSZWdzKCkgPT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9u
SW5mbyhub2RlKS5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAg
aWYgKGJhZFN0cnVjdHVyZVNsb3dQYXRoLmlzU2V0KCkpCisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmFkU3RydWN0dXJlU2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUNlbGxHUFIsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BS
KSk7CisKKyAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICB9OworCisgICAgaWYg
KGlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpKSB7CisgICAgICAgIC8vIFVzZSBtYW51YWwgb3Bl
cmFuZCBzcGVjdWxhdGlvbiBzaW5jZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQgYSBVc2VLaW5kIG1v
cmUgcmVzdHJpY3RpdmUgdGhhbiBDZWxsVXNlLgorICAgICAgICBzcGVjdWxhdGUobm9kZSwgYmFz
ZUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBi
YXNlRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFz
ZU9wZXJhbmQuZ3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2VPcGVyYW5kKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQu
Z3ByKCkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5
cGU+Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5v
ZGUqIG5vZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAg
RWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBn
ZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgNCkpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5TmFtZVJlZ3Mg
PSBwcm9wZXJ0eU5hbWUucmVncygpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gcmVzdWx0LnJlZ3MoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3Bl
cmF0aW9uQ2FzZXM7CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZSkubV90
eXBlICYgflNwZWNDZWxsKQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaElmTm90Q2VsbChiYXNlKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlzIG5vdCBhIGNlbGwuCisgICAg
ICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAg
bW92ZVRydWVUbyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMu
bGluaygmbV9qaXQpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBhdXRvIGJhc2VSZWdzID0gSlNWYWx1
ZVJlZ3MoYmFzZUNlbGxHUFIsIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2Vsc2UKKyAgICAgICAg
YXV0byBiYXNlUmVncyA9IGJhc2U7CisjZW5kaWYKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzbG93
UGF0aEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZVJlZ3MsIHByb3BlcnR5TmFtZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSKTsKKyAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAg
ICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7
CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2Vu
ZXJhdGUoYmFzZS5ncHIoKSwgYmFzZS5ncHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2Uu
cmVncygpLCBiYXNlLnJlZ3MoKS5wYXlsb2FkR1BSKCkpOworICAgIH0KK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAg
Y29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJhdG9ySW5C
eVZhbCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHkoTm9kZSogbm9kZSkKK3sKKyAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5
KG5vZGUsIG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkRmx1c2goTm9kZSogbm9kZSkKQEAgLTEzNjIyLDY3
ICsxMzkzNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHVyZShO
b2RlKiBub2RlKQogICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQot
ICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOwotICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB3cm9uZ1N0
cnVjdHVyZTsKLQotICAgIHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENl
bGwoYmFzZVJlZ3MpKTsKLQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICB3cm9uZ1N0cnVjdHVyZS5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5n
cHIoKSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOwotCi0gICAgbW92ZVRydWVUbyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9w
ZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUikpOwotICAgIGJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0aW9uPgotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVj
dHVyZVByb3BlcnR5SW1wbChOb2RlKiBub2RlLCBGdW5jdGlvbiBzbG93UGF0aCkKLXsKLSAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCB3cm9uZ1N0cnVjdHVyZTsKLQotICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0
b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKLQotICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0g
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlz
LCBzbG93UGF0aCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VH
UFIsIHByb3BlcnR5R1BSKSk7Ci0gICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0UmVncy5w
YXlsb2FkR1BSKCksIG5vZGUpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFz
T3duU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKLXsKLSAgICBjb21waWxlSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbXBsKG5vZGUsIG9wZXJhdGlvbkhhc093blN0cnVjdHVyZVByb3BlcnR5
KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluU3RydWN0dXJlUHJvcGVydHko
Tm9kZSogbm9kZSkKLXsKLSAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKG5v
ZGUsIG9wZXJhdGlvbkluU3RydWN0dXJlUHJvcGVydHkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CkBAIC0xMzcwOSwzOSArMTM5
NjIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9y
KE5vZGUqIG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYXRvclBuYW1lKE5vZGUqIG5vZGUpCi17
Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIHx8
IG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSk7Ci0gICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7
Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGluZGV4R1BSLAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCAobm9kZS0+b3AoKSA9PSBHZXRFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWUpCi0gICAgICAgICAgICA/IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpCi0gICAgICAgICAgICA6IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0g
ICAgbV9qaXQubW92ZVZhbHVlKGpzTnVsbCgpLCByZXN1bHRSZWdzKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluaygmbV9q
aXQpOwotCi0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0
b3JPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgotCi0gICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKLX0KLQogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUoTm9kZSogbm9kZSkKIHsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xNDkz
NCwyOCArMTUxNTQsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3
QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAgc2l6ZUdQ
Uiwgc3RvcmFnZUdQUikpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJh
dGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9k
ZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uLCBjb25zdCBTY29w
ZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4mIHByZWZpeCkKIHsKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
R1BSUmVnIGluZGV4R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
SW52YWxpZEdQUlJlZzsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICBzd2l0Y2ggKG1v
ZGUudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJ
bmRleCgpKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1
bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZC
b3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQpA
QCAtMTQ5ODMsMTIgKzE1MjAzLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgQVNTRVJU
KCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEFT
U0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgo
KSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBGUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNo
LmZwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKKyAg
ICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAg
ICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCkBAIC0xNTAxMiwxMyArMTUyMzQsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBT
X0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwog
CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4
R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICBpZiAobW9kZS5pc0luQm91
bmRzKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CkBAIC0xNTA0Nyw3MyArMTUyNzEsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2Rl
LCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIC8vIEZJWE1F
OiBPcHRpbWl6ZSBUeXBlZEFycmF5cyBpbiBIYXNJbmRleGVkUHJvcGVydHkgSUMKICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAg
ICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOwogICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9
CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlz
LCBzbG93UGF0aE9wZXJhdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgYmFzZUdQUiwgaW5kZXhHUFIpKTsKLQotICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVj
dFBuYW1lKE5vZGUqIG5vZGUpCi17Ci0gICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIHByb3BlcnR5RWRnZSk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotCi0gICAgRWRnZSYgZW51
bWVyYXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2UpOwotICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOwotICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgIEdQ
UlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3Vs
dC5yZWdzKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBzY3JhdGNoR1BS
LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAg
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9m
TGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
Ci0gICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKLQotICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VH
UFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9m
IGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOwotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIG1faml0Lm1vdmUoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOwotICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIp
OwotICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwot
ICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7Ci0gICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUu
bGluaygmbV9qaXQpOwotCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9w
ZXJ0eUdQUikpKTsKLQotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKiBub2Rl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4
IDk4Yzc2MTZiOGZkMmZiZjVjNGRkOGE1NzcxNTA4YWQyNjc5Zjk5ZDEuLmQxMjBiN2I0ZmI4NDQz
NjlkNzJjZDYwMTgxYmMwOGMwYjZjOTE3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR1BSVGVtcG9yYXJ5OworY2xhc3MgSlNWYWx1ZVJl
Z3NUZW1wb3Jhcnk7CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJh
dG9yOwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CkBAIC0yNDYsNiArMjQ3LDggQEAgcHVibGljOgog
ICAgIH0KICAgICBHUFJSZWcgYWxsb2NhdGUoR1BSUmVnIHNwZWNpZmljKQogICAgIHsKKyAgICAg
ICAgaWYgKHNwZWNpZmljID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0ZSgp
OwogI2lmIEVOQUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQogICAgICAg
ICBtX2ppdC5hZGRSZWdpc3RlckFsbG9jYXRpb25BdE9mZnNldChtX2ppdC5kZWJ1Z09mZnNldCgp
KTsKICNlbmRpZgpAQCAtMTM0NSwxMiArMTM0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS0+YXJyYXlNb2Rl
KCkpOwogICAgIH0KICAgICAKKyAgICAvLyBXZSB1c2UgYSBzY29wZWRMYW1iZGEgdG8gcGxhY2F0
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHZhbGlkYXRpb24uCisgICAgdm9pZCBjb21waWxlR2V0QnlW
YWwoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRh
Rm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworCiAgICAgdm9p
ZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiwg
Y29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERh
dGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRnJv
bUNoYXJDb2RlKE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJn
dW1lbnRzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRz
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUq
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KTsKIAogICAgIHZvaWQgY29tcGlsZUdldFByaXZhdGVOYW1lKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVHZXRQcml2YXRlTmFtZUJ5SWQoTm9kZSopOwpAQCAtMTQyNCwxMiArMTQz
MCwxMiBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlJ
c0RldGFjaGVkSWZPdXRPZkJvdW5kcyhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEpJVENvbXBpbGVy
OjpKdW1wIG91dE9mQm91bmRzKTsKICAgICB2b2lkIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2so
Tm9kZSosIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5kZXhHUFIpOwogICAgIHZvaWQgY29tcGls
ZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFy
cmF5VHlwZSk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2Rl
KiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYg
cHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKik7Ci0gICAgdm9pZCBj
b21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZv
cm1hdCk+JiBwcmVmaXgpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5
bWJvbChOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERh
dGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9p
ZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBF
ZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JD
ZWxsV2l0aFN5bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNo
aWxkMyk7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CkBAIC0xNDU4
LDcgKzE0NjQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgRWRnZSB2YWx1ZVVzZSk7CiAg
ICAgdm9pZCBsb2FkRnJvbUludFR5cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBw
cm9wZXJ0eVJlZywgR1BSUmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQg
c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVk
QXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSk7CisgICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5
TG9hZFJlc3VsdChOb2RlKiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5cGUs
IGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCk7CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENsYXNzVHlwZT4gdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVnLCBSZWdp
c3RlcmVkU3RydWN0dXJlLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmLCBzaXplX3QsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9k
ZSopOwpAQCAtMTUyNCwyMSArMTUzMCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVG9M
b3dlckNhc2UoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRocm93KE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVUaHJvd1N0YXRpY0Vycm9yKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVt
ZXJhYmxlTGVuZ3RoKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0
eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKik7CisKKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShOb2RlKik7CisgICAgdm9pZCBj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlPgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShO
b2RlKiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJ
bkJ5VmFsKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
Tm9kZSopOworCiAgICAgdm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVQdXRCeUlkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRGlyZWN0KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9kZSopOwotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwoTm9kZSosIEZ1bmN0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0
eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxl
R2V0RW51bWVyYXRvclBuYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxl
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUdldFNldHRlcihOb2RlKik7CkBAIC0xNTY4LDcgKzE1NzUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlQ2FsbE51bWJlckNvbnN0cnVjdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1No
YWRvd0NoaWNrZW5UYWlsKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoTm9kZSosIFNfSklUT3BlcmF0aW9uX0dDWik7CisgICAgdm9pZCBjb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1osIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVF
eHRyYWN0Q2F0Y2hMb2NhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ2xlYXJDYXRjaExvY2Fs
cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHJvZmlsZVR5cGUoTm9kZSopOwpAQCAtMTkyNiw2
ICsxOTMzLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9
CiAKKyAgICBKU1ZhbHVlUmVncyByZWdzKCkgeyByZXR1cm4ganNWYWx1ZVJlZ3MoKTsgfQorCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CkBAIC0xOTY1LDcgKzE5
NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5
bG9hZEdQUigpKTsKICAgICB9CiAKLSAgICBHUFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNo
KQorICAgIEdQUlJlZyBncHIoV2hpY2hWYWx1ZVdvcmQgd2hpY2ggPSBQYXlsb2FkV29yZCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBqc1ZhbHVlUmVncygpLmdwcih3aGljaCk7CiAgICAgfQpAQCAt
MjAwMywyMSArMjAxMiwyMCBAQCBwcml2YXRlOgogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIFN0b3JhZ2VPcGVyYW5kKCkg
PSBkZWZhdWx0OworCiAgICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQq
IGppdCwgRWRnZSBlZGdlKQogICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBtX2VkZ2Uo
ZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVu
dHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobm9kZSgpKSkKLSAgICAgICAgICAgIGdwcigpOworICAgICAgICBlbXBs
YWNlKGppdCwgZWRnZSk7CiAgICAgfQogICAgIAogICAgIH5TdG9yYWdlT3BlcmFuZCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAg
ICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOworICAgICAgICBpZiAobV9ncHJPcklu
dmFsaWQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJP
ckludmFsaWQpOwogICAgIH0KICAgICAKICAgICBFZGdlIGVkZ2UoKSBjb25zdApAQCAtMjAzNiw2
ICsyMDQ0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQt
PmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAg
ICB9CisKKyAgICB2b2lkIGVtcGxhY2UoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgbV9qaXQgPSBqaXQ7CisgICAgICAgIG1fZWRnZSA9IGVkZ2U7CisgICAg
ICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgQVNT
RVJUKG1faml0KTsKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Ug
fHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobm9kZSgpKSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0KICAgICAKICAgICB2b2lk
IHVzZSgpCiAgICAgewpAQCAtMjA0Myw5ICsyMDYyLDkgQEAgcHVibGljOgogICAgIH0KICAgICAK
IHByaXZhdGU6Ci0gICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OworICAgIFNwZWN1bGF0aXZlSklU
KiBtX2ppdCB7IG51bGxwdHIgfTsKICAgICBFZGdlIG1fZWRnZTsKLSAgICBHUFJSZWcgbV9ncHJP
ckludmFsaWQ7CisgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkIHsgSW52YWxpZEdQUlJlZyB9Owog
fTsKIAogCkBAIC0yMTM0LDExICsyMTUzLDE5IEBAIGNsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
IHsKIHB1YmxpYzoKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIEpTVmFsdWVSZWdz
VGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKik7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3Bl
Y3VsYXRpdmVKSVQqLCBHUFJSZWcgc3BlY2lmaWNQYXlsb2FkKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNw
ZWNpZmljUGF5bG9hZCwgR1BSUmVnIHNwZWNpZmljVGFnKTsKKyNlbmRpZgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBS
ZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0UmVnV29yZCA9IFBheWxv
YWRXb3JkKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFJldXNl
VGFnLCBKU1ZhbHVlT3BlcmFuZCYpOwogICAgIH5KU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAg
IAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiAhIXJlZ3MoKTsgfQorCisg
ICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmIG9wZXJhdG9yPShKU1ZhbHVlUmVnc1RlbXBvcmFyeSYm
KSA9IGRlZmF1bHQ7CisKICAgICBKU1ZhbHVlUmVncyByZWdzKCk7CiAKIHByaXZhdGU6CkBAIC0y
MTUwLDYgKzIxNzcsMjYgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorI2lmIFVTRShKU1ZBTFVF
NjQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVS
ZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBX
aGljaFZhbHVlV29yZCkKKyAgICA6IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCit7Cit9Cisj
ZWxzZQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVl
UmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwg
V2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKK3sKKyAgICBpZiAocmVzdWx0V29yZCA9PSBQYXls
b2FkV29yZCkgeworICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVz
ZSwgb3BlcmFuZCk7CisgICAgICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAg
ICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgIH0K
K30KKyNlbmRpZgorCiBjbGFzcyBGUFJUZW1wb3JhcnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOWQ0MDM2OTYxMGQ4OWU0MWU1MTZmNmM0YTQy
NWU1ZmQ3MTAyYTFiZS4uYWJjOGQxOGFhMzk3NjRhMmY5YzBjMDc0MWNmZDFlOWE1OGRkYzQyNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkBAIC0xODEyLDYgKzE4MTIsMzM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSogbm9kZSwgQmFzZU9wZXJhbmRUeXBlJiBiYXNl
CiAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsgICAgCiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25z
dCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZv
cm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
czoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjaWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NP
REUpCisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3Zl
cmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBH
UFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVm
aXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAg
IGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNl
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNl
S2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVm
aXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3Vs
YXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgorICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBKU1ZhbHVl
UmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIs
IHByb3BlcnR5UmVncyk7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHBy
b3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUp
ID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JO
b2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50
YWdHUFIoKSkpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIGJh
c2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOworCisgICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYg
KG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3Bl
Y1N5bWJvbCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAg
ICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVs
bHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlW
YWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdU
Rk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQg
Zm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZp
eChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdElu
dDMyIDogRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAg
ICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SW50MzIpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7CisKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0Lmxv
YWQzMigKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3Vs
dChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAg
ICAgICAgICAgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVD
aGFpbigpKSB7CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1f
aml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVn
cygpLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJl
c3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKwor
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6
dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWRWYWx1
ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZ3MpOworICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSkpOworCisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0
UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0
LmZwcigpKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAg
ICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHQuZnByKCksIHJlc3VsdFJlZ3MpOworICAgICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJs
ZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
KworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBG
UFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4
KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAg
ICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAg
ICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHBy
b3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
KworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOwor
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAw
LCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJl
Z3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigp
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3Vu
ZHMpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAg
ICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5
TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRB
cnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0gfQorfQorCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgp
OwpAQCAtMjIzMyw3ICsyNTYyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgIC8vIFJlbGllcyBv
biBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBiYXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwK
LSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CisgICAgICAgIEpTVmFsdWVS
ZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9k
ZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkg
eworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAg
ICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQp
OworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjI2NSwzMjYgKzI1
OTksMjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoK
LSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFC
TEVfQ09ERSkKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRl
cXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2Us
IGluZGV4KTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwot
Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1
c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2Uo
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIp
OwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRH
UFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmpl
Y3RVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJv
bFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN5bWJvbChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KTsgLy8gU2F2ZSBhIHJlZ2lzdGVyLCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUg
cmlnaHQuCi0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVn
cyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBq
c1ZhbHVlUmVzdWx0OworICAgICAgICBHUFJUZW1wb3Jhcnkgb25lUmVnUmVzdWx0OworICAgICAg
ICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICAgICAgICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLQotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIHByb3BlcnR5LCBUYWdXb3JkKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwg
UGF5bG9hZFdvcmQpOwotCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2Uu
anNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHBy
b3BlcnR5LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRl
RXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNp
emUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNl
ZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOwotCi0gICAg
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgIGJhc2VSZWdz
LCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwotCi0gICAgICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1Bh
dGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAg
ICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBi
YXNlUmVncywgcHJvcGVydHlSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQu
YWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czog
ewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBh
eWxvYWQodGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFBheWxvYWRPZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJl
c3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRhZy5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zm
c2V0KSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewot
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJh
bmNoSWZOb3RFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWcuZ3By
KCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFs
dWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0g
ICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwg
cmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlz
SW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3Vs
dC5mcHIoKSkpOwotICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5v
ZGUpOworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6CisgICAgICAgICAgICBjYXNl
IERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAgICAgIG9uZVJlZ1Jlc3VsdCA9IEdQUlRlbXBv
cmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KG9uZVJlZ1Jlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXls
b2FkKHRoaXMpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAg
ICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1w
UmVnKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVt
cFJlZykpOwotICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFRhZ1JlZywgcmVz
dWx0UGF5bG9hZFJlZyk7Ci0KLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTog
ewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFBheWxvYWQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAs
IG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAg
ICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1h
dCA9PSBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQgPSBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0ganNW
YWx1ZVJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1
bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3Vs
dFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
OwotCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBo
b2xlID0gbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91
bmRzKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJ
bnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0
UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAg
ICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
blNjb3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQp
OworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxMTIsNTEg
KzQxNDcsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAg
ICAgICAgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgobm9kZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAg
ICBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAg
Y29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShub2RlKTsKKyAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eTogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihp
bmRleC5ncHIoKSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eShub2RlKTsKKworICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7
CisgICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29t
cGlsZUluU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0
ZUluZGV4QW5kTW9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFz
SW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9k
ZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5l
eHRFeHRyYWN0TW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9k
ZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOworCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldERp
cmVjdFBuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZShub2RlKTsKKworICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKLSAgICAgICAgY29tcGls
ZUdldFByb3BlcnR5RW51bWVyYXRvcihub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckdldEJ5
VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAg
ICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgY29tcGlsZUdldEVu
dW1lcmF0b3JQbmFtZShub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsKKyAg
ICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgIGNvbXBpbGVUb0luZGV4U3Ry
aW5nKG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorCiAgICAgY2FzZSBQcm9maWxlVHlwZTogewogICAgICAgICBjb21waWxlUHJvZmls
ZVR5cGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggYjVlMWNjM2U0MmQyZmI0YzlkNGYx
MzEwN2U5OGVmZTBiMjA1ZTVjNy4uNTA4MWRjNTNmOTQ3N2Y0MjFhYjljYTNhODk4ODY4MjMxODJk
YzAxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCkBAIC0yMjQ2LDYgKzIyNDYsMzcwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSogbm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2Fz
ZSBBcnJheTo6QW55VHlwZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAg
Y2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6CisgICAgY2FzZSBBcnJheTo6U2VsZWN0
VXNpbmdQcmVkaWN0aW9uczoKKyAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBE
RkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
c3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRSZWdz
LmdwcigpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKKyAgICBj
YXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Cisg
ICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAg
ICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2Jq
ZWN0VXNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9k
ZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkg
PSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworCisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdHViSW5mbzsKKyAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQp
KSB7CisgICAgICAgICAgICBzdHViSW5mbyA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAg
ICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8uZ3ByKCk7CisgICAgICAgIH0KKworICAgICAgICBz
cGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIHNw
ZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0g
bV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElm
TmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CisK
KyAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9qaXQuY29k
ZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0
YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQz
Mk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgobV9qaXQpOworCisgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRG
R0pJVCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsK
KyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAg
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAg
IH0KKworICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOworCisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHQgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1v
ZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQsIG5vZGUs
IGZvcm1hdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVz
dWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1
bHRSZWcpOworCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2Fu
ZUNoYWluKCkpIHsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5jaElmTm90RW1w
dHkocmVzdWx0UmVnKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51
bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZF
bXB0eShyZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKKyAgICAgICAgfQorCisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsK
KyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KERhdGFGb3JtYXREb3VibGUpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVz
dWx0UmVnKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1Nh
bmVDaGFpbigpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xl
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHRSZWcpKTsK
KyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICAg
ICAgYm94RG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlICYmICFyZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCByZXN1bHRJc1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNo
YWluKCkgJiYgIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOworCisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcg
dGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IGZvcm1hdCkgPSBwcmVmaXgocmVzdWx0SXNVbmJveGVkID8gRGF0YUZvcm1hdERvdWJsZSA6IERh
dGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7Cisg
ICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZl
SW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
KSk7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQTmFOOworICAg
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJl
Zyk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJl
Zywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgICAgIGJv
eERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpT
VmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7
CisgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVncy5ncHIoKSk7CisgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MuZ3ByKCksIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKworICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdEdQUikpOworCisgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7
CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRh
Rm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwg
cmVzdWx0UmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdFJlZykpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5v
ZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3Vt
ZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSwgcHJl
Zml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgor
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJh
eTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJy
YXk6OlVpbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Cisg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eTogeworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUs
IHR5cGUsIHByZWZpeCk7CisgICAgfSB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CkBAIC0yNzEz
LDcgKzMwNzcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
CiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6IHsKICAgICAgICAgLy8gUmVsaWVzIG9uIFN0cmluZ0No
YXJBdCBub2RlIGhhdmluZyBzYW1lIGJhc2ljIGxheW91dCBhcyBHZXRCeVZhbAotICAgICAgICBj
b21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBzY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEFT
U0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9
PSBEYXRhRm9ybWF0Q2VsbCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVz
dWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTI3NDYsMzQ1ICszMTE1LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkFueVR5cGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAg
ICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBt
b2RlIHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVbmRl
Y2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKLSAgICAgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgbm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDApKSk7Ci0KLSAgICAgICAgICAgIHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
LSAgICAgICAgICAgIGluZGV4LnVzZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpCaWdV
aW50NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdp
dGhTeW1ib2wobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdC5ncHIoKSwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RkOjpvcHRpb25h
bDxHUFJUZW1wb3Jhcnk+IHN0dWJJbmZvOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHByb3BlcnR5KTsKLQotICAg
ICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgc3R1YkluZm9HUFIg
PSBzdHViSW5mby0+Z3ByKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLQotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljOwotICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0
LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRl
ZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUu
Zm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICAgICAgICAgIGlmICht
X3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNT
dHJpbmcpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5n
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAgICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTeW1ib2wpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzU3ltYm9sID0gdHJ1ZTsKLQotICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9q
aXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpERkdKSVQpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPiBzbG93UGF0aDsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0Nh
bGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCks
IHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBz
dHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LAotICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0
dWJJbmZvKCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0
aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQ
YXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgot
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29u
dGlndW91cyk7Ci0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUg
PSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFs
dWVSZWdzKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdC5ncHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0
QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAg
ICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3Jt
YXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0g
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSwgcmVzdWx0UmVnKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0
T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0
LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJ
bmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkp
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgICAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBGUFJSZWcgcmVz
dWx0UmVnID0gcmVzdWx0LmZwcigpOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
LQotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kc1NhbmVDaGFpbigpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZOYU4o
cmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9k
ZSk7CisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZl
cnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SlMgfHwgcHJlZmVycmVkRm9ybWF0ID09IERhdGFGb3Jt
YXRKU0ludDMyIHx8IHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50MzIpOworICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWVSZWdzVGVtcG9yYXJ5KHRoaXMpOworICAgICAgICAg
ICAgICAgIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIHJlc3VsdElzVW5ib3hlZCA9IG5v
ZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hhaW4oKSAmJiAhKG5vZGUtPmZsYWdz
KCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcik7Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9y
YWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jhcnk+IHJlc3VsdDsKLSAgICAgICAgICAg
IHN0ZDo6b3B0aW9uYWw8R1BSUmVnPiByZXN1bHRSZWc7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dElzVW5ib3hlZCkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5lbXBsYWNlKHRoaXMpOwotICAg
ICAgICAgICAgICAgIHJlc3VsdFJlZyA9IHJlc3VsdC0+Z3ByKCk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgICAgIEZQUlJlZyB0
ZW1wUmVnID0gdGVtcC5mcHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICBpZiAo
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKHJlc3VsdElzVW5ib3hlZCkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZt
X2ppdCk7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRl
eCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsK
LSAgICAgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQTmFOOwotICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJk5hTiksIHRl
bXBSZWcpOwotICAgICAgICAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAgICAg
ICAgICAgICAgICAgZG91YmxlUmVzdWx0KHRlbXBSZWcsIG5vZGUpOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOYU4odGVtcFJlZykpOwotICAgICAgICAgICAgICAgICAgICBib3hEb3VibGUodGVtcFJl
ZywgKnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1
bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVn
cygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHBy
b3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKSksICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdCgqcmVz
dWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJl
ZykpOwotICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAqcmVzdWx0UmVnKTsKLSAg
ICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAg
c2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBv
cGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICpyZXN1
bHRSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQoKnJlc3VsdFJlZywgbm9kZSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2Fz
ZSBBcnJheTo6QXJyYXlTdG9yYWdlOgotICAgICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlT
dG9yYWdlOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygp
KSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHQuZ3By
KCkpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1Zh
bHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdC5ncHIoKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG5vZGUpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpOwotICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3Bl
cnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
ICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwotICAg
IAotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3Rv
cmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0
b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0UmVnKTsKLSAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKLSAgICAKLSAgICAgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgK
LSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9i
amVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBBcnJheTo6U3RyaW5nOgotICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5
VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgotICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
T25TY29wZWRBcmd1bWVudHMobm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBBcnJheTo6SW50OEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpJbnQxNkFycmF5OgotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50OEFy
cmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50OENsYW1wZWRBcnJheToKLSAgICAgICAgY2Fz
ZSBBcnJheTo6VWludDE2QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQzMkFycmF5Ogot
ICAgICAgICBjYXNlIEFycmF5OjpGbG9hdDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0NjRBcnJheTogewotICAgICAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFy
cmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7Ci0gICAgICAgICAgICBpZiAoaXNJbnQodHlwZSkp
Ci0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5
cGUpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9u
RmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUpOwotICAgICAgICB9IH0KKyAgICAgICAgICAgIH07
CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0UmVncywgcHJlZmVycmVk
Rm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTM1ODEs
NyArMzYyNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNvbnN0ZXhwciBib29sIGNhblNw
ZWN1bGF0ZSA9IGZhbHNlOwotICAgICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2Rl
LCByZXN1bHRHUFIsIHR5cGUsIGNhblNwZWN1bGF0ZSk7CisgICAgICAgIGNvbnN0ZXhwciBib29s
IHNob3VsZEJveCA9IGZhbHNlOworICAgICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChu
b2RlLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCB0eXBlLCBjYW5TcGVjdWxhdGUsIHNob3VsZEJv
eCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC01MjY5LDUyICs1MzE1LDU2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29t
cGlsZVN0b3JlQmFycmllcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgICAgICAK
LSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdldEVudW1l
cmFibGVMZW5ndGgobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0Vu
dW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzRW51bWVyYWJs
ZVN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVQ
cm9wZXJ0eShub2RlKTsKKworICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CisgICAgICAg
IFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
aW5kZXgpOworCisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0
aW9uSGFzSW5kZXhlZFByb3BlcnR5LCBzY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQ
UlJlZz4oKT4oWyZdIHsgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGluZGV4LmdwcigpLCByZXN1bHQu
Z3ByKCkpOyB9KSk7CisgICAgICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0Lmdwcigp
LCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzT3duU3RydWN0dXJl
UHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KG5vZGUp
OworCisgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKKyAgICAgICAgY29tcGlsZUdl
dFByb3BlcnR5RW51bWVyYXRvcihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNh
c2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSW5TdHJ1Y3R1cmVQcm9w
ZXJ0eShub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6
IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsK
LSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHkpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOiB7Cisg
ICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7Ci0g
ICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdElu
ZGV4OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleChub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAg
ICAgY29tcGlsZUdldERpcmVjdFBuYW1lKG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRh
dGVQcm9wZXJ0eU5hbWUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdl
dFByb3BlcnR5RW51bWVyYXRvcjogewotICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJh
dG9yKG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAgY29t
cGlsZUVudW1lcmF0b3JHZXRCeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAg
IGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRv
ckdlbmVyaWNQbmFtZTogewotICAgICAgICBjb21waWxlR2V0RW51bWVyYXRvclBuYW1lKG5vZGUp
OworCisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDogeworICAgICAgICBjb21waWxlRW51bWVy
YXRvckluQnlWYWwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIFRvSW5k
ZXhTdHJpbmc6IHsKLSAgICAgICAgY29tcGlsZVRvSW5kZXhTdHJpbmcobm9kZSk7CisKKyAgICBj
YXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTogeworICAgICAgICBjb21waWxlRW51bWVyYXRv
ckhhc093blByb3BlcnR5KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CisKICAgICBjYXNl
IFByb2ZpbGVUeXBlOiB7CiAgICAgICAgIGNvbXBpbGVQcm9maWxlVHlwZShub2RlKTsKICAgICAg
ICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVD
aGVja0hvaXN0aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAppbmRleCAxMTc2ZDNlN2FmMjgzMzJiMDMwNzQxYjRkOWM0
MGYwYmVmMWQwMzhiLi41ZjUxZjIyNTEwNGY5YmE1MjI2OThkZDAzNjc1YmRkNWJlMjc1ZmFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5n
UGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAKQEAgLTI3Myw2ICsyNzMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNl
IE51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHk6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRC
dXR0ZXJmbHk6CisgICAgICAgICAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6CiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5VmFs
RGlyZWN0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CkBAIC0zNTIsNiArMzUzLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAg
ICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAg
Y2FzZSBHZXRCdXR0ZXJmbHk6CisgICAgICAgICAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlW
YWw6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CmluZGV4IDJlMmYwN2RmYzdlOGMxM2RkYjBlZGQ1YTJkMDdhNWQ4NzJlMTc5MDguLjllZDg3MTMz
Zjc3MjMwZTBlMWJkNDQ1ZjMwNjIzNDM3ZmNkNjM0MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCkBAIC0xMTQsNiAr
MTE0LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcl9lbmRHZW5lcmljUHJvcGVydHlJbmRleCwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSBcCiAgICAgbWFj
cm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgp
KSBcCiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3RoLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSkgXAorICAgIG1hY3Jv
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9tb2RlU2V0LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Om1vZGVTZXRPZmZzZXQoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19mbGFncywgSlNS
b3BlU3RyaW5nOjpvZmZzZXRPZkZsYWdzKCkpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfbGVu
Z3RoLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpIFwKICAgICBtYWNybyhKU1JvcGVT
dHJpbmdfZmliZXIwLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXIwKCkpIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBhMWE1ZmQyNDRj
ZjIxMTAzMjY0MTk3YTc2YWUzMGM3ZjYwZjc5ZTY0Li4wM2Y4NjUyYzZjYjgyYzYyMDIwZDFlNjZi
YjU5ZjQ2NTkxZDgzZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCkBAIC0yODYsMTggKzI4NiwxNSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgY2Fz
ZSBCb29sZWFuVG9OdW1iZXI6CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0
cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgotICAgIGNh
c2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5
OgotICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3Ro
OgogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldFByb3Bl
cnR5RW51bWVyYXRvcjoKLSAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAg
ICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5n
OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0
SW5kZXg6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICBj
YXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
IGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgQm90dG9tVmFsdWU6CiAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCmluZGV4IDZm
ZTI5ZDk5ZmE0NDE0OWMxNDZiMjFhYjQxMDRjNDA4MDM2OWYzNzEuLmM2M2UzZjkxODdmZTFkZTI4
MGMwNTVkMGI2OGQ2ZTRkNTIxZjliZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTE1MjMsNDAgKzE1MjMsMzEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGNvbXBpbGVTdG9yZUJhcnJpZXIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKKyAgICAgICAgICAgIGNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVBy
b3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0
eSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3Bl
cnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
ICAgICAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkoKTsKKyAgICAgICAgY2FzZSBH
ZXRQcm9wZXJ0eUVudW1lcmF0b3I6CisgICAgICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVt
ZXJhdG9yKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJblN0cnVjdHVyZVBy
b3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoKTsKKyAgICAg
ICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgICAgIGNv
bXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0
RGlyZWN0UG5hbWUoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoK
KyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCgpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDoKLSAgICAgICAg
ICAgIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKCk7CisgICAgICAgIGNhc2UgRW51bWVyYXRv
ck5leHRFeHRyYWN0TW9kZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RNb2RlKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVu
dW1lcmF0b3I6Ci0gICAgICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCk7Cisg
ICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgICAgICAg
ICBjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICAg
ICAgICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUoKTsKKyAgICAgICAgY2Fz
ZSBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5
VmFsKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2Vu
ZXJpY1BuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUo
KTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIGNvbXBpbGVF
bnVtZXJhdG9ySW5CeVZhbCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVG9J
bmRleFN0cmluZzoKLSAgICAgICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKCk7CisgICAgICAg
IGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICAgICAgY29tcGlsZUVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1
cmVJbW1lZGlhdGUoKTsKQEAgLTUwMjAsNyArNTAxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8v
IHdlIGRvbWluYXRlIHRoZW0uCiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZUdldEJ5VmFs
KCkKKyAgICBMVmFsdWUgY29tcGlsZUdldEJ5VmFsSW1wbCgpCiAgICAgewogICAgICAgICBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmln
aW4uc2VtYW50aWMpOwogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CkBAIC01MDQ3LDggKzUwMzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdl
IGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZl
LgogICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJh
eTo6Q29udGlndW91cykKICAgICAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YmFzZSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBmYXN0Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CkBAIC01MDgwLDggKzUwNzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0
byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAg
ICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3Vv
dXMpCiAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkp
OwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2
NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKQEAgLTUxMDAsOCArNTA4OSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgbnVsbHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQocmVzdWx0LCByZXN1bHQpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
c2V0RG91YmxlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBib29sIHJl
c3VsdElzVW5ib3hlZCA9IG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFp
bigpICYmICEobV9ub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOwpAQCAt
NTE0MSwxOCArNTEzMCwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIGlmIChy
ZXN1bHRJc1VuYm94ZWQpCi0gICAgICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LnBoaShEb3Vi
bGUsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3Vs
dCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5w
aGkoRG91YmxlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKKworICAgICAgICAgICAgcmV0dXJu
IG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKICAgICAgICAgICAgIExWYWx1ZSBpbmRl
eCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CiAKICAgICAgICAg
ICAgIHNwZWN1bGF0ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCBtX25vZGUsIG1fb3V0Lmxlc3NU
aGFuKGluZGV4LCBtX291dC5pbnQzMlplcm8pKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9v
dXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCkpOwotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVV
bmRlZmluZWQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6
RGlyZWN0QXJndW1lbnRzOiB7CkBAIC01MTY5LDggKzUxNTYsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCBudWxscHRyLCBpc091
dE9mQm91bmRzKTsKICAgICAgICAgICAgICAgICBUeXBlZFBvaW50ZXIgYWRkcmVzcyA9IG1fb3V0
LmJhc2VJbmRleCgKICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5EaXJlY3RBcmd1bWVudHNf
c3RvcmFnZSwgYmFzZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpOwotICAgICAgICAgICAgICAg
IHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJlc3MpKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmxvYWQ2NChhZGRyZXNzKTsKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdC
bG9jaygpOwpAQCAtNTE5Miw4ICs1MTc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2
NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVu
dHM6IHsKQEAgLTUyNDYsOCArNTIzMSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCkpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQs
IG92ZXJmbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJyYXk6OkJpZ0ludDY0QXJyYXk6CkBAIC01MjU2LDI0ICs1MjQwLDIxIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhtX25vZGUpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKS51c2VL
aW5kKCkgPT0gT2JqZWN0VXNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludDY0LCBvcGVy
YXRpb25HZXRCeVZhbE9iamVjdFN0cmluZywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApKSwgbG93U3RyaW5nKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb3dPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93U3RyaW5n
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpOwogICAgICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAx
KS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRK
U1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
U3ltYm9sLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxvd09iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTeW1i
b2wobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTeW1ib2wobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdm1DYWxsKAogICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlW
YWwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgIGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93SlNWYWx1ZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAw
KSksIGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX25vZGU7CkBAIC01MzczLDggKzUz
NTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgfSk7CiAK
LSAgICAgICAgICAgIHNldEpTVmFsdWUocGF0Y2hwb2ludCk7Ci0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICByZXR1cm4gcGF0Y2hwb2ludDsKICAgICAgICAgfQogCiAgICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5U3RvcmFnZToKQEAgLTUzOTAsOCArNTM3MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCBudWxscHRy
LCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRv
IGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAg
ICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBz
ZXRKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Js
b2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTU0MTcsMTMgKzUzOTYsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwogICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBj
b250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVy
ZShiYXNlKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVz
dWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OlN0cmluZzogewotICAgICAgICAgICAg
Y29tcGlsZVN0cmluZ0NoYXJBdCgpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKCk7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CkBAIC01NDQ4LDkgKzU0MjUsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG9hZEZyb21JbnRU
eXBlZEFycmF5KHBvaW50ZXIsIHR5cGUpOwogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZl
IHRvIGtlZXAgYmFzZSBhbGl2ZSBzaW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAg
ICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
ICAgICAgICBjb25zdGV4cHIgYm9vbCBjYW5TcGVjdWxhdGUgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChyZXN1bHQsIHR5cGUsIGNhblNwZWN1
bGF0ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CkBAIC01NDY5LDggKzU0NDQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2Vl
cCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMgc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAg
ICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBzZXREb3Vi
bGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC01NDgwLDggKzU0NTQs
MjQgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
czoKICAgICAgICAgY2FzZSBBcnJheTo6VW5wcm9maWxlZDoKICAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOworICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbCgp
CisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gY29tcGlsZUdldEJ5VmFsSW1wbCgpOwor
ICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50eXBlZEFy
cmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAgIGNvbnN0
ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IHRydWU7CisgICAgICAgICAgICBzZXRJbnRUeXBlZEFy
cmF5TG9hZFJlc3VsdChyZXN1bHQsIHR5cGUsIGNhblNwZWN1bGF0ZSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gRG91Ymxl
KQorICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0
TXlBcmd1bWVudEJ5VmFsKCkKQEAgLTg1NzEsNyArODU2MSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBlbXB0eVJlc3VsdCwgc2xv
d1Jlc3VsdCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQXQoKQor
ICAgIExWYWx1ZSBjb21waWxlU3RyaW5nQ2hhckF0SW1wbCgpCiAgICAgewogICAgICAgICBMVmFs
dWUgYmFzZSA9IGxvd1N0cmluZyhtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMCkpOwogICAgICAgICBM
VmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSkpOwpAQCAtODY3
OSw3ICs4NjY5LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSBz
aW5jZSB0aGF0IGtlZXBzIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGJhc2UpOwotICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgcmVzdWx0cykp
OworICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCByZXN1bHRzKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQXQoKQorICAgIHsKKyAgICAgICAgc2V0SlNWYWx1ZShj
b21waWxlU3RyaW5nQ2hhckF0SW1wbCgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
U3RyaW5nQ2hhckNvZGVBdCgpCkBAIC0xMjkwNiwxNyArMTI5MDEsMTYgQEAgcHJpdmF0ZToKICAg
ICAgICAgZW1pdFN0b3JlQmFycmllcihsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX25vZGUt
Pm9wKCkgPT0gRmVuY2VkU3RvcmVCYXJyaWVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlv
bikKKyAgICBMVmFsdWUgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwoTFZhbHVlIGluZGV4
LCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2xvd1BhdGhPcGVyYXRpb24pCiAgICAgewogICAgICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9v
cmlnaW4uc2VtYW50aWMpOwogICAgICAgICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDApKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKICAgICAgICAgQXJyYXlNb2RlIG1vZGUg
PSBtX25vZGUtPmFycmF5TW9kZSgpOwogCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5hcnJheU1v
ZGUoKS50eXBlKCkpIHsKICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgICAgIGNhc2Ug
QXJyYXk6OkNvbnRpZ3VvdXM6IHsKLSAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3Rv
cmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAgICAgICAgTFZhbHVl
IHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCBtX25vZGUt
PnN0b3JhZ2VDaGlsZEluZGV4KCkpKTsKIAogICAgICAgICAgICAgSW5kZXhlZEFic3RyYWN0SGVh
cCYgaGVhcCA9IG1vZGUudHlwZSgpID09IEFycmF5OjpJbnQzMiA/CiAgICAgICAgICAgICAgICAg
bV9oZWFwcy5pbmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91
c1Byb3BlcnRpZXM7CkBAIC0xMjk1MSwxMSArMTI5NDUsMTAgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0
LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1
bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTog
ewotICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3Jh
Z2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgo
KSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFw
ID0gbV9oZWFwcy5pbmRleGVkRG91YmxlUHJvcGVydGllczsKICAgICAgICAgICAgIApAQCAtMTI5
ODksMTIgKzEyOTgyLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50
MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93
UmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZTog
ewotICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3Jh
Z2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgo
KSkpOwogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CiAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9j
aygpOwpAQCAtMTMwMjYsMTk2ICsxMzAxOCwzMjkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJ
bnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xv
d1Jlc3VsdCk7CiAgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQsIHNsb3dQYXRoT3BlcmF0aW9u
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCkpKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0Lm5vdFplcm82NCh2bUNhbGwoSW50NjQs
IHNsb3dQYXRoT3BlcmF0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRl
eCkpOwogICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVIYXNF
bnVtZXJhYmxlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgp
CisgICAgeworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMSkpOworICAgICAgICBzZXRCb29sZWFuKGNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHlJbXBsKGluZGV4LCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHkpKTsKKyAgICB9CisK
KyAgICB2b2lkIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKQogICAgIHsKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
b3JpZ2luLnNlbWFudGljKTsKLSAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQyKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uSGFz
RW51bWVyYWJsZVByb3BlcnR5LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBwcm9w
ZXJ0eSkpOworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSkKKyAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm9w
ZXJ0eUVudW1lcmF0b3JDZWxsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldEpTVmFsdWUo
dm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIHdlYWtQb2ludGVy
KGdsb2JhbE9iamVjdCksIGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKICAgICB9CiAK
LSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2xvd1BhdGhDYWxsPgotICAgIHZvaWQgY29tcGlsZUhh
c1N0cnVjdHVyZVByb3BlcnR5SW1wbChMVmFsdWUgYmFzZSwgU2xvd1BhdGhDYWxsIHNsb3dQYXRo
Q2FsbCkKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSgp
CiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgcHJvcGVy
dHkgPSBsb3dTdHJpbmcobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJh
dG9yID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVl
IG1vZGUgPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMikpOworICAgICAg
ICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDMpKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gbV9vdXQubmV3QmxvY2so
KTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29ycmVjdFN0cnVjdHVyZSA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKLSAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgaWYgKG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBu
b1ZhbHVlKCksIG1fbm9kZSwgbV9vdXQubm90WmVybzMyKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9y
LCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRHZW5lcmljUHJvcGVydHlJbmRl
eCkpKTsKIAotICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5cGUobV9u
b2RlLT5jaGlsZDEoKSkpLAotICAgICAgICAgICAgdXN1YWxseShpc0NlbGxDYXNlKSwgcmFyZWx5
KHNsb3dQYXRoKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBpbmNyZW1lbnQgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tIYXNQcm9wZXJ0eSA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29ycmVjdFN0cnVjdHVyZSk7CisgICAgICAgICAgICBWYWx1
ZUZyb21CbG9jayBpbml0aWFsSW5kZXggPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgaW5pdGlhbEluZGV4Rm9ySGFzUHJvcGVydHkgPSBtX291dC5hbmNo
b3IoaW5kZXgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKG1vZGUp
LCB1bnN1cmUoY2hlY2tIYXNQcm9wZXJ0eSksIHVuc3VyZShpbmNyZW1lbnQpKTsKIAotICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIo
YmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQubG9h
ZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0
cnVjdHVyZUlEKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvcnJl
Y3RTdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluY3JlbWVudCk7Cisg
ICAgICAgICAgICBMVmFsdWUgaW5kZXhQaGkgPSBtX291dC5waGkoSW50MzIsIGluaXRpYWxJbmRl
eCk7CisgICAgICAgICAgICBMVmFsdWUgaW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFkZChpbmRl
eFBoaSwgbV9vdXQuaW50MzJPbmUpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5jcmVt
ZW50ZWRJbmRleFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbmNyZW1lbnRlZEluZGV4KTsKKyAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGZpbmFsSW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFuY2hv
cihpbmNyZW1lbnRlZEluZGV4KTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5sZXNz
VGhhbihpbmNyZW1lbnRlZEluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5K
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgpKSwgdW5zdXJlKGNoZWNrSGFzUHJv
cGVydHkpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29ycmVjdFN0cnVjdHVyZSwgc2xvd1BhdGgpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBjb3Jy
ZWN0U3RydWN0dXJlUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKLSAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY2hlY2tIYXNQcm9wZXJ0eSk7CisgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHlJbmRleCA9
IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4Rm9ySGFzUHJvcGVydHksIGluY3JlbWVudGVk
SW5kZXhSZXN1bHQpOworICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaShpbmRleFBo
aSwgbV9vdXQuYW5jaG9yKHByb3BlcnR5SW5kZXgpKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZpbmFsUHJvcGVydHlJbmRleCA9IG1fb3V0LmFuY2hvcihwcm9wZXJ0eUluZGV4KTsKKyAg
ICAgICAgICAgIExWYWx1ZSBoYXNQcm9wZXJ0eSA9IGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHlJ
bXBsKHByb3BlcnR5SW5kZXgsIG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkp
OworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGhhc1Byb3BlcnR5LCB1bnN1cmUoY29udGludWF0
aW9uKSwgdW5zdXJlKGluY3JlbWVudCkpOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQ
YXRoLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UGF0aFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKAotICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCAK
LSAgICAgICAgICAgICAgICB2bUNhbGwoSW50NjQsIHNsb3dQYXRoQ2FsbCwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7Cisg
ICAgICAgICAgICBMVmFsdWUgZmluYWxJbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgZmluYWxJbmNy
ZW1lbnRlZEluZGV4LCBmaW5hbFByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGZpbmFsSW5kZXgsIEludDY0KSwgbV9vdXQuY29u
c3RJbnQ2NChKU1ZhbHVlOjpOdW1iZXJUYWcgfCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgPDwgMzIpKSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKLSAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIGNvcnJlY3RT
dHJ1Y3R1cmVSZXN1bHQsIHNsb3dQYXRoUmVzdWx0KSk7CisgICAgICAgIEVkZ2UmIGJhc2VFZGdl
ID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApOworICAgICAgICBpZiAobV9ub2RlLT5l
bnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAg
IExWYWx1ZSBiYXNlID0gbG93Q2VsbChiYXNlRWRnZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUo
QmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5ub3RFcXVhbChtX291dC5sb2FkMzIo
YmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7
CisKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBtX25vZGUsIG1f
b3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9tb2RlU2V0KSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGluY3JlbWVudCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBpbml0aWFsSW5kZXggPSBtX291dC5hbmNob3IoaW5kZXgpOworICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0LmlzWmVybzMyKG1vZGUpLCB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKGluY3JlbWVudCkpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbmNyZW1lbnQp
OworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5jcmVtZW50ZWRJbmRleCA9IG1fb3V0LmFu
Y2hvcihtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSk7CisgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICBpbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbElu
ZGV4LCBpbmNyZW1lbnRlZEluZGV4KTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuYml0
T3IobV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6
Ok51bWJlclRhZyB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok93blN0cnVjdHVyZU1vZGUpIDw8IDMyKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAg
ICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBpbmRleCwg
bW9kZSwgZW51bWVyYXRvcikpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eSgpCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRy
YWN0SW5kZXgoKQogICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVyZVByb3BlcnR5SW1w
bChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJv
cGVydHkpOworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKTsKKworICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0VG9JbnQzMihib3hlZFBhaXIp
KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSgpCisg
ICAgdm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSgpCiAgICAgewotICAgICAg
ICBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEo
KSksIG9wZXJhdGlvbkhhc093blN0cnVjdHVyZVByb3BlcnR5KTsKKyAgICAgICAgTFZhbHVlIGJv
eGVkUGFpciA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgTFZhbHVl
IGhpZ2hCaXRzID0gbV9vdXQuY2FzdFRvSW50MzIobV9vdXQubFNocihib3hlZFBhaXIsIG1fb3V0
LmNvbnN0SW50MzIoMzIpKSk7CisgICAgICAgIHNldEludDMyKG1fb3V0LmJpdEFuZChoaWdoQml0
cywgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9u
TW9kZU1hc2spKSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSgpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwcm9iYWJseSBoYXZlIGEgbWV0aG9kIG9mIHZh
bHVlIHJlY292ZXJ5IGZvciB0aGlzIG5vZGUgc2luY2UgaXQncyAiZWZmZWN0IiBmcmVlIGJ1dCBh
bHdheXMgbGl2ZSBpbiBieXRlY29kZS4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVw
ZGF0ZVByb3BlcnR5TmFtZSgpCiAgICAgewotICAgICAgICBjb21waWxlSGFzU3RydWN0dXJlUHJv
cGVydHlJbXBsKGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHkpOworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOworICAgICAgICBMVmFsdWUgaW5k
ZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBs
b3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJhdGlv
bkJsb2NrID0gbnVsbHB0cjsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbnVs
bHB0cjsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkJvdW5kc1Jlc3VsdDsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgY2FjaGVkTmFtZVJlc3VsdDsKKworICAgICAgICBhdXRvIHNlZW5N
b2RlcyA9IE9wdGlvblNldDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3
KG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkpOworCisgICAgICAgIGlmIChzZWVuTW9kZXMu
Y29udGFpbnNBbnkoeyBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUgfSkpIHsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGNoZWNrSW5kZXggPSBudWxscHRyOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgb3V0T2ZCb3VuZHNCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFz
aWNCbG9jayBsb2FkUHJvcGVydHlOYW1lQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICAgICAgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgaWYg
KHNlZW5Nb2Rlcy5jb250YWlucyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSkgeworICAgICAgICAgICAgICAgIGNoZWNrSW5kZXggPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbkJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5icmFuY2gobV9vdXQudGVzdElzWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0
SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpLCB1bnN1cmUoY2hl
Y2tJbmRleCksIHVuc3VyZShvcGVyYXRpb25CbG9jaykpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrSW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5kZXgpOworICAgICAgICAgICAgICAgIExWYWx1
ZSBvdXRPZkJvdW5kcyA9IG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG91dE9mQm91bmRzLCB1
bnN1cmUob3V0T2ZCb3VuZHNCbG9jayksIHVuc3VyZShsb2FkUHJvcGVydHlOYW1lQmxvY2spKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG91dE9mQm91bmRzQmxvY2spOworICAgICAgICAgICAgICAgIG91dE9mQm91bmRzUmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVs
bCgpKSkpOworICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGxvYWRQcm9wZXJ0eU5hbWVCbG9jayk7CisgICAgICAgICAgICAgICAgTFZhbHVlIG5hbWVzVmVj
dG9yID0gbV9vdXQubG9hZFB0cihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBjYWNo
ZWROYW1lUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lnplcm9FeHRQdHIobV9vdXQubG9hZFB0
cihtX291dC5iYXNlSW5kZXgobV9oZWFwcy5Xcml0ZUJhcnJpZXJCdWZmZXJfYnVmZmVyQ29udGVu
dHMuYXRBbnlJbmRleCgpLCBuYW1lc1ZlY3RvciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQp
LCBTY2FsZVB0cikpKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3Bl
cmF0aW9uUmVzdWx0OworCisgICAgICAgIGlmIChzZWVuTW9kZXMuY29udGFpbnMoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYXRp
b25CbG9jaykKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhvcGVyYXRpb25CbG9jayk7
CisgICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0
LCBvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgd2Vha1BvaW50ZXIo
Z2xvYmFsT2JqZWN0KSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKTsKKyAgICAgICAgICAgIGlm
IChjb250aW51YXRpb24pCisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1f
b3V0LnBoaShJbnQ2NCk7CisgICAgICAgIEFTU0VSVChvdXRPZkJvdW5kc1Jlc3VsdCB8fCBjYWNo
ZWROYW1lUmVzdWx0IHx8IG9wZXJhdGlvblJlc3VsdCk7CisgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGlJZlNldChyZXN1bHQsIG91dE9mQm91bmRzUmVzdWx0LCBjYWNoZWROYW1lUmVzdWx0
LCBvcGVyYXRpb25SZXN1bHQpOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoKQorICAgIHZvaWQgY29tcGlsZUVudW1l
cmF0b3JHZXRCeVZhbCgpCiAgICAgewotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAg
ICBMVmFsdWUgYmFzZSA9IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKTsK
LSAgICAgICAgTFZhbHVlIHByb3BlcnR5ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMSkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMikpOwotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKyAgICAgICAgRWRnZSBiYXNlRWRnZSA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgRWRnZSBwcm9wZXJ0eU5h
bWVFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpOworICAgICAgICBFZGdlIHN0
b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpOworICAgICAgICBFZGdl
IGluZGV4RWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAzKTsKIAotICAgICAgICBM
QmFzaWNCbG9jayBjaGVja09mZnNldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGlubGluZUxvYWQgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9j
ayBvdXRPZkxpbmVMb2FkID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMVmFsdWUgYmFzZSA9IERGRzo6
aXNDZWxsKGJhc2VFZGdlLnVzZUtpbmQoKSkgPyBsb3dDZWxsKGJhc2VFZGdlLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pIDogbG93SlNWYWx1ZShiYXNlRWRnZSk7CisKKyAgICAgICAgTFZhbHVl
IHN0b3JhZ2UgPSBzdG9yYWdlRWRnZSA/IGxvd1N0b3JhZ2Uoc3RvcmFnZUVkZ2UpIDogbnVsbHB0
cjsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBtYXRlcmlhbGl6ZSB0aGUgcHJvcGVydHlOYW1lIGhl
cmUgaW4gY2FzZSBpdCByZXF1aXJlcyBib3hpbmcgc2luY2UgdGhlIElDIHBhdGggd29uJ3QgZG9t
aW5hdGUgc3Vic2VxdWVudCB1c2VzIGluIHN1YnNlcXVlbnQgbm9kZXMuCisgICAgICAgIC8vIElm
IGl0J3MgYW4gSW50MzIgYW5kIHdlIHVzZSBpdCBhcyBzdWNoIHRoaXMgYm94aW5nIHdpbGwgYmUg
RENFJ2QgYnkgYjMgbGF0ZXIgYW55d2F5LgorICAgICAgICBsb3dKU1ZhbHVlKHByb3BlcnR5TmFt
ZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKworICAgICAgICBMVmFsdWUgaW5k
ZXggPSBsb3dJbnQzMihpbmRleEVkZ2UpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMy
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJh
dG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgNSkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGNoZWNrSXNDZWxsQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBjaGVja1N0cnVjdHVyZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJbmxpbmVPck91dE9mTGluZUJsb2NrID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lTG9hZEJsb2NrID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3V0T2ZMaW5lTG9hZEJsb2NrID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZ2VuZXJpY0lDQmxvY2sgPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdC
bG9jaygpOwogCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RFcXVhbCgKLSAgICAgICAg
ICAgIG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0gICAg
ICAgICAgICBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSwKLSAgICAgICAgICAgIHJhcmVseShzbG93Q2Fz
ZSksIHVzdWFsbHkoY2hlY2tPZmZzZXQpKTsKKyAgICAgICAgTFZhbHVlIGlzTm90TmFtZWQgPSBt
X291dC50ZXN0Tm9uWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJp
Y01vZGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90TmFtZWQsIHVuc3VyZShnZW5lcmlj
SUNCbG9jayksIHVuc3VyZShjaGVja0lzQ2VsbEJsb2NrKSk7CiAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjaGVja09mZnNldCwgaW5saW5lTG9hZCk7Ci0g
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIG1fb3V0LmxvYWQz
MihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRJbmxp
bmVDYXBhY2l0eSkpLAotICAgICAgICAgICAgdW5zdXJlKG91dE9mTGluZUxvYWQpLCB1bnN1cmUo
aW5saW5lTG9hZCkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0lzQ2VsbEJsb2NrKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKGJhc2VFZGdlKSks
IHVzdWFsbHkoY2hlY2tTdHJ1Y3R1cmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrU3RydWN0dXJlQmxvY2spOworICAgICAgICBM
VmFsdWUgc3RydWN0dXJlSUQ7CisgICAgICAgIGF1dG8gc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JO
b2RlKGJhc2VFZGdlLm5vZGUoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOworICAgICAg
ICBpZiAoc3RydWN0dXJlKQorICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5jb25zdElu
dDMyKHN0cnVjdHVyZS0+aWQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHN0cnVjdHVy
ZUlEID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKwor
ICAgICAgICBMVmFsdWUgaGFzRW51bWVyYXRvclN0cnVjdHVyZSA9IG1fb3V0LmVxdWFsKHN0cnVj
dHVyZUlELCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBi
YWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdDsKKyAgICAgICAgaWYgKGluZGV4RWRnZS5ub2RlKCkg
PT0gcHJvcGVydHlOYW1lRWRnZS5ub2RlKCkpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRp
Yyk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aCA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVj
dHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJp
Y0lDQmxvY2spKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmFkU3RydWN0dXJlU2xv
d1BhdGgpOworICAgICAgICAgICAgYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1bHQgPSBtX291dC5h
bmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9yUmVjb3Zlck5hbWVBbmRHZXRC
eVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgaW5kZXgsIGVudW1lcmF0b3Ip
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX291dC5icmFuY2goaGFzRW51bWVyYXRv
clN0cnVjdHVyZSwgdXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spLCByYXJlbHko
Z2VuZXJpY0lDQmxvY2spKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhpbmxpbmVMb2FkLCBv
dXRPZkxpbmVMb2FkKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tJbmxpbmVPck91dE9m
TGluZUJsb2NrKTsKKyAgICAgICAgTFZhbHVlIGlubGluZUNhcGFjaXR5ID0gbnVsbHB0cjsKKyAg
ICAgICAgYm9vbCBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPSBmYWxzZTsKKyAgICAgICAgaWYg
KHN0cnVjdHVyZSkgeworICAgICAgICAgICAgaGFzTm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gIXN0
cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5
ID0gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgICAg
ICB9CisgICAgICAgIGlmICghaW5saW5lQ2FwYWNpdHkpCisgICAgICAgICAgICBpbmxpbmVDYXBh
Y2l0eSA9IG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIExWYWx1ZSBpc0lubGluZSA9
IGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA/IG1fb3V0LmludDMyT25lIDogbV9vdXQuYmVsb3co
aW5kZXgsIGlubGluZUNhcGFjaXR5KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzSW5saW5lLCB1
bnN1cmUoaW5saW5lTG9hZEJsb2NrKSwgdW5zdXJlKG91dE9mTGluZUxvYWRCbG9jaykpOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlubGluZUxvYWRCbG9jayk7CiAgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGlubGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0Lmxv
YWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIAor
ICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRp
ZXMuYXRBbnlOdW1iZXIoKSwKICAgICAgICAgICAgICAgICBiYXNlLCBtX291dC56ZXJvRXh0KGlu
ZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKG91dE9mTGluZUxvYWQsIHNsb3dDYXNlKTsKLSAgICAgICAgTFZhbHVlIHN0b3Jh
Z2UgPSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KTsKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9hZEJsb2NrKTsKKyAgICAgICAgaWYgKCFz
dG9yYWdlKQorICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFw
cy5KU09iamVjdF9idXR0ZXJmbHkpOworCiAgICAgICAgIExWYWx1ZSByZWFsSW5kZXggPSBtX291
dC5zaWduRXh0MzJUbzY0KAotICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwg
bV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
X2NhY2hlZElubGluZUNhcGFjaXR5KSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291dC5z
dWIoaW5kZXgsIGlubGluZUNhcGFjaXR5KSkpOwogICAgICAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwogICAgICAgICBWYWx1
ZUZyb21CbG9jayBvdXRPZkxpbmVSZXN1bHQgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBt
X291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJl
cigpLCBzdG9yYWdlLCByZWFsSW5kZXgsIFNjYWxlRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCi0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93Q2FzZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uR2V0QnlWYWwsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHBy
b3BlcnR5KSk7Ci0gICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oZ2VuZXJpY0lDQmxvY2spOworICAgICAgICBMVmFsdWUgZ2VuZXJpY1Jlc3Vs
dCA9IGNvbXBpbGVHZXRCeVZhbEltcGwoKTsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9
IG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50
KHR5cGUpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0IHx8IGlzU2ln
bmVkKHR5cGUpKQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBib3hJbnQzMihnZW5l
cmljUmVzdWx0KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBnZW5lcmljUmVz
dWx0ID0gc3RyaWN0SW50NTJUb0pTVmFsdWUoZ2VuZXJpY1Jlc3VsdCk7CisgICAgICAgIH0gZWxz
ZSBpZiAoZ2VuZXJpY1Jlc3VsdC0+dHlwZSgpID09IERvdWJsZSkKKyAgICAgICAgICAgIGdlbmVy
aWNSZXN1bHQgPSBib3hEb3VibGUoZ2VuZXJpY1Jlc3VsdCk7CiAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKEludDY0LCBpbmxpbmVSZXN1bHQsIG91dE9mTGluZVJlc3VsdCwgc2xvd0Nhc2VSZXN1bHQp
KTsKLSAgICB9CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGdlbmVyaWNJQ1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcihnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogCi0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCgpCi0gICAgewotICAgICAg
ICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IHNldEludDMyKG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcl9pbmRleExlbmd0aCkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24pOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKEludDY0LCBnZW5lcmlj
SUNSZXN1bHQsIG91dE9mTGluZVJlc3VsdCwgaW5saW5lUmVzdWx0KTsKKyAgICAgICAgaWYgKGJh
ZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0KQorICAgICAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdU
b1BoaShyZXN1bHQsIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVzdWx0KTsKKyAgICAgICAgc2V0SlNW
YWx1ZShyZXN1bHQpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVy
YXRvcigpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+CisgICAg
dm9pZCBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KFNsb3dQYXRoRnVuY3Rpb25UeXBlIHNs
b3dQYXRoRnVuY3Rpb24pCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAg
ICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkKLSAgICAgICAgICAg
IHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JD
ZWxsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkp
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBv
cGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3IsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCks
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXBp
bGVHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUoKQotICAgIHsKLSAgICAgICAgTFZhbHVlIGVu
dW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5k
ZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRWRnZSBiYXNlRWRnZSA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAgICAgICAgTFZhbHVlIGJhc2UgPSBi
YXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSA/IGxvd0NlbGwoYmFzZUVkZ2UpIDogbG93SlNW
YWx1ZShiYXNlRWRnZSk7CisgICAgICAgIExWYWx1ZSBwcm9wZXJ0eU5hbWUgPSBsb3dKU1ZhbHVl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9
IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgIExWYWx1
ZSBtb2RlID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDMpKTsKKyAgICAg
ICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCA0KSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygp
OwotICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGlzTmFtZWRCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzQ2VsbEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgbWF0Y2hlc1N0cnVjdHVyZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0aW9uQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOwogICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogCi0gICAg
ICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0
b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZFN0cnVjdHVyZVByb3BlcnR5
SW5kZXgpKSwKLSAgICAgICAgICAgIHVzdWFsbHkoaW5Cb3VuZHMpLCByYXJlbHkob3V0T2ZCb3Vu
ZHMpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LnRlc3ROb25aZXJvMzIobW9kZSwgbV9v
dXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
KSwgdW5zdXJlKGlzTmFtZWRCbG9jayksIHVuc3VyZShvcGVyYXRpb25CbG9jaykpOworICAgICAg
ICBtX291dC5hcHBlbmRUbyhpc05hbWVkQmxvY2spOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGxh
c3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW5Cb3VuZHMsIG91dE9mQm91bmRzKTsKLSAgICAgICAg
TFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2FkUHRyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3IpOwotICAgICAgICBW
YWx1ZUZyb21CbG9jayBpbkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAg
IG1fb3V0LmxvYWRQdHIobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JDb250ZW50cywgc3RvcmFnZSwgbV9vdXQu
emVyb0V4dFB0cihpbmRleCkpKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoYmFzZSwg
cHJvdmVuVHlwZShiYXNlRWRnZSkpLCB1bnN1cmUoaXNDZWxsQmxvY2spLCB1bnN1cmUob3BlcmF0
aW9uQmxvY2spKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpc0NlbGxCbG9jayk7CisgICAg
ICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChzdHJ1Y3R1
cmVJRCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yX2NhY2hlZFN0cnVjdHVyZUlEKSksCisgICAgICAgICAgICB1c3VhbGx5KG1hdGNoZXNT
dHJ1Y3R1cmVCbG9jayksIHJhcmVseShvcGVyYXRpb25CbG9jaykpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG1hdGNoZXNTdHJ1Y3R1cmVCbG9jayk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG5hbWVkUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9m
Qm91bmRzLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkJvdW5k
c1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlTnVs
bCkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhvcGVyYXRpb25CbG9jayk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIG9wZXJhdGlvblJlc3VsdCA9IG1fb3V0LmFuY2hvcih1bmJveEJvb2xlYW4o
dm1DYWxsKEludDY0LCBzbG93UGF0aEZ1bmN0aW9uLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3Qp
LCBiYXNlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBtb2RlKSkpOwogICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGlu
Qm91bmRzUmVzdWx0LCBvdXRPZkJvdW5kc1Jlc3VsdCkpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBu
YW1lZFJlc3VsdCwgb3BlcmF0aW9uUmVzdWx0KSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxl
R2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSgpCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvcklu
QnlWYWwoKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNo
aWxkMigpKTsKLQotICAgICAgICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsK
LSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLQot
ICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYmVsb3coaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVt
ZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9lbmRHZW5lcmljUHJvcGVy
dHlJbmRleCkpLAotICAgICAgICAgICAgdXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJv
dW5kcykpOwotCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8o
aW5Cb3VuZHMsIG91dE9mQm91bmRzKTsKLSAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5s
b2FkUHRyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hl
ZFByb3BlcnR5TmFtZXNWZWN0b3IpOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBpbkJvdW5kc1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIobV9vdXQuYmFz
ZUluZGV4KG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JDb250ZW50cywgc3RvcmFnZSwgbV9vdXQuemVyb0V4dFB0cihpbmRleCkpKSk7Ci0g
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhvdXRPZkJvdW5kcywgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3V0
T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpW
YWx1ZU51bGwpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAK
LSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBpbkJvdW5kc1Jlc3VsdCwgb3V0T2ZCb3VuZHNS
ZXN1bHQpKTsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShvcGVyYXRpb25F
bnVtZXJhdG9ySW5CeVZhbCk7CiAgICAgfQotICAgIAotICAgIHZvaWQgY29tcGlsZVRvSW5kZXhT
dHJpbmcoKQorCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KCkKICAg
ICB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2
NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgaW5k
ZXgpKTsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShvcGVyYXRpb25FbnVt
ZXJhdG9ySGFzT3duUHJvcGVydHkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVj
a1N0cnVjdHVyZUltbWVkaWF0ZSgpCkBAIC0xNzM0NCw3ICsxNzQ2OSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBzZXRJbnQzMihyZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChtX25vZGUtPnNob3VsZFNwZWN1bGF0ZUludDMy
KCkgJiYgY2FuU3BlY3VsYXRlKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAgICAg
ICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQubGVzc1RoYW4ocmVzdWx0
LCBtX291dC5pbnQzMlplcm8pKTsKQEAgLTIwMjk2LDYgKzIwNDIxLDI3IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgfQogCisgICAgLy8gVGhpcyBvbmx5IHdv
cmtzIGZvciBpbnRzIHJpZ2h0IG5vdy4KKyAgICBQYXRjaHBvaW50VmFsdWUqIGRhdGFMb2dGb3JE
ZWJ1Z2dpbmcoY29uc3QgY2hhciogcHJlZml4LCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBQYXRjaHBvaW50VmFsdWUqIHJlc3VsdCA9IG1fb3V0LnBhdGNocG9pbnQoVm9pZCk7CisgICAg
ICAgIHJlc3VsdC0+ZWZmZWN0cy53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKKyAgICAgICAgcmVz
dWx0LT5hcHBlbmQodmFsdWUsIFZhbHVlUmVwOjpyZWcoR1BSSW5mbzo6cmVnVDApKTsKKyAgICAg
ICAgVHlwZSB2YWx1ZVR5cGUgPSB2YWx1ZS0+dHlwZSgpOworICAgICAgICByZXN1bHQtPnNldEdl
bmVyYXRvcihbPV0gKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBTdGFja21hcEdlbmVyYXRpb25Q
YXJhbXMmKSB7CisgICAgICAgICAgICBBbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxs
b3dTY3JhdGNoKGppdCk7CisKKyAgICAgICAgICAgIGppdC5wcm9iZURlYnVnKFs9XSAoUHJvYmU6
OkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWVUeXBlID09IElu
dDMyKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4ocHJlZml4LCBjb250ZXh0Lmdwcjxp
bnQzMl90PihHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8SlNWYWx1ZT4oR1BSSW5m
bzo6cmVnVDApKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKwogICAgIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5TWFw
KCkgeyByZXR1cm4gbV9hdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5OyB9CiAg
ICAgCiAgICAgVk0mIHZtKCkgeyByZXR1cm4gbV9ncmFwaC5tX3ZtOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaAppbmRleCAyZGZkZTg2ZjcyYmVkNzNkNzNkYzhhZWI1ZDRiMmIz
NmM4YjIwNTBlLi5hYjgyNWNkN2U0ZWIwMmY4NWEwMDRhZDA1YTIwYzUxMzI1ZjJhODU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNDUsNiArMTQ1LDggQEAgcHVi
bGljOgogICAgIHZvaWQgYWRkSW5jb21pbmdUb1BoaShMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9j
ayk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUGFyYW1zPgogICAgIHZvaWQgYWRkSW5jb21p
bmdUb1BoaShMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9jaywgUGFyYW1zLi4uIHRoZVJlc3QpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIFBhcmFtcz4KKyAgICB2b2lkIGFkZEluY29taW5nVG9Q
aGlJZlNldChMVmFsdWUgcGhpLCBQYXJhbXMuLi4gdGhlUmVzdCk7CiAgICAgCiAgICAgTFZhbHVl
IG9wYXF1ZShMVmFsdWUpOwogCkBAIC00OTMsNiArNDk1LDE2IEBAIGlubGluZSB2b2lkIE91dHB1
dDo6YWRkSW5jb21pbmdUb1BoaShMVmFsdWUgcGhpLCBWYWx1ZUZyb21CbG9jayB2YWx1ZSwgUGFy
YW1zLi4uCiAgICAgYWRkSW5jb21pbmdUb1BoaShwaGksIHRoZVJlc3QuLi4pOwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBQYXJhbXM+CitpbmxpbmUgdm9pZCBPdXRwdXQ6OmFkZEluY29taW5n
VG9QaGlJZlNldChMVmFsdWUgcGhpLCBQYXJhbXMuLi4gdmFsdWVzKQoreworICAgIGF1dG8gYWRk
UGhpID0gWyZdIChWYWx1ZUZyb21CbG9jayB2YWx1ZSkgeworICAgICAgICBpZiAodmFsdWUpCisg
ICAgICAgICAgICBhZGRJbmNvbWluZ1RvUGhpKHBoaSwgdmFsdWUpOworICAgIH07CisgICAgKGFk
ZFBoaSh2YWx1ZXMpLC4uLik7Cit9CisKIEFMTE9XX1VOVVNFRF9QQVJBTUVURVJTX0VORAogSUdO
T1JFX1dBUk5JTkdTX0VORAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2Vu
ZXJhdG9yL0RTTC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCmlu
ZGV4IDczMTcxMDA5NmNmM2UyNDk4YWU0NWRkYTI2YWE4MmU3OWNkNDZhNGUuLjY5N2RlOGQ5OGYx
OWRlMzllNDFjNDI0YWI1ODQwOWY0ZjUxOWIwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5l
cmF0b3IvRFNMLnJiCkBAIC0xMzgsNiArMTM4LDcgQEAgbW9kdWxlIERTTAogI2luY2x1ZGUgIkdl
dEJ5VmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSXRl
cmF0aW9uTW9kZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0S2luZC5o
IgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL1JlZ2lzdGVyLmgKaW5kZXggNDQ0NjM1ZTk4MGQ5MGFmODM3ZWJkNjNiOTYyZmFl
ZGUyZWM1MzUwMy4uZDg3OWM5MGJlMzExNzg2MjMzZjUyNmIxODNlZGYxY2IzYzdiYjM4YSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKQEAgLTUzLDcg
KzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXIm
IG9wZXJhdG9yPShDYWxsRnJhbWUqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYg
b3BlcmF0b3I9KENvZGVCbG9jayopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBv
cGVyYXRvcj0oSlNTY29wZSopOwotICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVy
YXRvcj0oSlNPYmplY3QqKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0
b3I9KEpTQ2VsbCopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0o
RW5jb2RlZEpTVmFsdWUpOwogCiAgICAgICAgIGludDMyX3QgaSgpIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5oCmluZGV4
IGM1NmVmNWU0NTU0Y2IxMDNhYmViZTcyZTYyOThmOGM0OGFhZDk4NjAuLjU5M2VmNjY2OGRlMmUw
M2E2NTliMzlmMzFhZjYwZjg4YzI3ODM5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKQEAgLTYzLDcgKzYzLDcgQEAgQUxX
QVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShDb2RlQmxvY2sqIGNvZGVC
bG9jaykKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIFJl
Z2lzdGVyOjpvcGVyYXRvcj0oSlNPYmplY3QqIG9iamVjdCkKK0FMV0FZU19JTkxJTkUgUmVnaXN0
ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgdS52YWx1ZSA9
IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKG9iamVjdCkpOwogICAgIHJldHVybiAqdGhpczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IGFjOGI1MTM3
ZDg1MzU0NTA2YWVlZGNlZGJkMWM1YmQ3NzI1NzljMDEuLjBiNGMyYjliZTBmNWZmZjE1MWEzYjA3
ZTlhYTI0ZmNjZjkwNTAzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaApAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihy
ZWdzLnRhZ0dQUigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KGFkZHJlc3MpICsgVGFnT2Zmc2V0KSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAgICB2b2lk
IGxvYWRWYWx1ZShBZGRyZXNzIGFkZHJlc3MsIEpTVmFsdWVSZWdzIHJlZ3MpCiAgICAgewogI2lm
IFVTRShKU1ZBTFVFNjQpCkBAIC04ODksNyArODg5LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYnJhbmNoOCgKICAgICAgICAgICAgIEJlbG93LCBBZGRyZXNzKGNlbGxHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpOwogICAgIH0K
LSAgICAKKwogICAgIC8vIE5vdGUgdGhhdCBmaXJzdCBhbmQgbGFzdCBhcmUgaW5jbHVzaXZlLgog
ICAgIEp1bXAgYnJhbmNoSWZUeXBlKEdQUlJlZyBjZWxsR1BSLCBKU1R5cGVSYW5nZSByYW5nZSkK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNDJiOGNhZjVmNWNiOGM0YjVm
M2FkZWIzZWRhNDdhYjI2OTBkNDkwNC4uYzliMDFjMGQwNWE1ZDZmMGMxMWQwYTM3MzgxYzJkOThl
ZmE0NzEzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMzA4LDEwICszMDgsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9TTE9X
X09QKG5ld19hcnJheV93aXRoX3NwcmVhZCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2Fy
cmF5X2J1ZmZlcikKICAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAgICBERUZJ
TkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9TTE9XX09Q
KGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfU0xPV19PUChnZXRfcHJv
cGVydHlfZW51bWVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhfc3RyaW5n
KQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKICAgICAg
ICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCiAgICAgICAgIERFRklO
RV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQpAQCAtMzY1LDYgKzM2MiwxMCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX2RpcmVj
dCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChv
cF9lbnVtZXJhdG9yX25leHQpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCkKKyAgICAg
ICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKICAgICAgICAgREVG
SU5FX09QKG9wX2dldF9wcml2YXRlX25hbWUpCiAgICAgICAgIERFRklORV9PUChvcF9zZXRfcHJp
dmF0ZV9icmFuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2NoZWNrX3ByaXZhdGVfYnJhbmQpCkBA
IC00NzMsMTQgKzQ3NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX09Q
KG9wX3B1dF90b19hcmd1bWVudHMpCiAKLSAgICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVtZXJh
YmxlX2luZGV4ZWRfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9oYXNfZW51bWVyYWJs
ZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0
eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCi0gICAgICAgIERFRklO
RV9PUChvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLSAgICAgICAgREVGSU5FX09QKG9w
X2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKLSAgICAgICAgICAgIAogICAgICAgICBERUZJTkVf
T1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Aob3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAKQEAgLTU3OCw2ICs1NzEsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9i
eV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfdmFsKQor
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X3ByaXZhdGVfbmFtZSkKICAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTYwOSw3ICs2MDMsNiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2RlbF9ieV9p
ZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSAgICAgICAgREVGSU5FX1NM
T1dDQVNFX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCiAjaWYgIUVOQUJM
RShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2Zy
b21fc2NvcGUpCiAjZW5kaWYKQEAgLTY0MiwxMSArNjM1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Aobm90KQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChzdHJpY3RlcSkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AobnN0cmljdGVxKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChnZXRfZGlyZWN0X3BuYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChn
ZXRfcHJvdG90eXBlX29mKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChoYXNfZW51
bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9X
X09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
U0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAjaWYgIUVOQUJMRShFWFRSQV9DVElfVEhV
TktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3BlKQogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA0ODdhNWFjNWI4ZTVkOGE5ZDgwYjJjNmQz
MDZlMDgxNTIxYjgyODE0Li40ZGE3YTJmZDY2ZjE1MGNmY2QzNTkwMmZlOTNlNTRmZWQyYTVhZDJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTQ1Myw2ICs0NTMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lz
dGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CisgICAgICAgIHZv
aWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVn
aXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgICAgIGludDMyX3QgZ2V0
T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwogICAgICAgICBkb3VibGUg
Z2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwpAQCAtNDY5LDcg
KzQ3MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRMb2FkMihWaXJ0dWFs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmlydHVhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCiAgICAgICAg
IHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVy
SUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAg
ICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29uc3RhbnQs
IFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgdm9pZCBlbWl0
U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRl
eElzSW50MzIgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmlydHVhbFJl
Z2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBmYWxzZSk7
CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQg
cGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKQEAgLTY3MCwyMSArNjcwLDI0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9sb2FkKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChjb25zdCBJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChjb25zdCBJbnN0cnVj
dGlvbiopOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLSAgICAgICAg
dm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJs
ZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBl
bWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0g
ICAgICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1l
KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dl
dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQg
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0IEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgorICAg
ICAgICB2b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworCisgICAgICAgIHZvaWQgZW1pdF9vcF9l
bnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29w
X2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICAgICAg
dm9pZCBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbios
IGNvbnN0IE9wY29kZVR5cGUmLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSk7CisgICAgICAgIHZvaWQg
ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAg
ICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1Y3Rpb24q
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNs
b3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC03MzUsNyArNzM4
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IEluc3RydWN0
aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVt
aXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJ
bnN0cnVjdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKaW5k
ZXggZjZkYjNmNTljNGFhNGUwMjdhMTU2MTFlZGJiYTI2MWNhZDhlZmVkNi4uOWJhMTBlZDY3NzJm
YWVjM2YyMGU2MzRiYWJlMTRhZGQ5YTEwODkwNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCkBAIC0xNjkyLDQ2ICsxNjkyLDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVUeXBl
Pgotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcENvZGVUeXBlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51
bWVyYXRvcjsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9u
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0
eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3Bf
aGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50
SW5zdHJ1Y3Rpb24pOwotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgCisKICAgICBQYXRjaGFibGVKdW1wIGJhZFR5
cGU7Ci0gICAgCisKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxp
a2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KICAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0
TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFkVHlwZSwg
bnVsbHB0cik7CkBAIC0xNzM5LDcgKzE3MDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVI
YXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAog
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRo
aXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7Ci0gICAg
CisKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJn
ZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNsb3dQYXRo
VGFyZ2V0KTsKIApAQCAtMTc0OCw3ICsxNzE0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQK
ICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKICAg
ICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKICAg
ICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3Mu
dW50YWdnZWRWYWx1ZSgpKTsKLSAgICAKKwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6QmFzZWxpbmVKSVQpKSB7CiAgICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBlSnVtcFRh
cmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8t
PnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAgICAgICAgYnlWYWxJbmZvLT5tX3Nsb3dP
cGVyYXRpb24gPSBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljOwpAQCAtMTc1OCwx
NzEgKzE3MjQsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
QnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIH0KIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJh
c2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0
ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEu
bV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDEpOwotCi0gICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNv
cnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRo
aXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdh
cyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlz
IGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBp
cyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KLSAg
ICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGlu
ZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQotICAgIC8v
IHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBj
YWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgotICAgIC8vIGV4dGVu
ZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUg
c2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwgcmVnVDEpOwotCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICBhbmQzMihU
cnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7Ci0KLSAgICBKSVRBcnJheU1v
ZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2Ug
VHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9h
ZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUsIGJ5VmFsSW5m
byk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSkpLCByZWdUMCk7Ci0KLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBl
OjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAg
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgTGFiZWwgbmV4dEhvdFBh
dGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVK
dW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBCeVZhbElu
Zm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLSAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0gICAgaWYg
KEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAgICAgYnlW
YWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZh
dWx0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9uSGFzSW5k
ZXhlZFByb3BlcnR5RGVmYXVsdCk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgQnlWYWxJ
bmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIEdQUkluZm86Om5vbkFyZ0dQUjAp
OwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNJ
bmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOwotCi0gICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBz
bG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsr
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29k
ZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsK
LQotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0g
ICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGlu
ZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5l
QWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0g
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkp
LCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2Fk
NjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGlu
ZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNp
dHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zm
c2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVn
VDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0g
ICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9z
dHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JT
dHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9k
c3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0
b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNo
MzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNW
ZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVn
VDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVn
VDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwot
ICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5
SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJv
dW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1Qx
KTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KIHZvaWQg
SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZVR5cGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKaW5kZXggNGQ3NDEyNmJlMWUzZGU0MzBkM2E2ZDljYjdmZGRiNmRjODZmN2ViNC4u
Y2EzMmRjMWM1NmU2MjdhYjZlMGU2MjY5ZTUzOTgxM2NlZWU3ZDBhZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTE0Miw0NyArMTE0Miwx
MiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CiB9
CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgotdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENv
ZGVUeXBlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIGVtaXRMb2Fk
UGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJh
c2UpOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLQotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7
Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVC
b29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9z
dHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzRW51bWVyYWJs
ZVN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUlt
cGw8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3Bl
cnR5SW1wbDxPcEluU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0K
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5
VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJy
YXlNb2RlKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5w
dHIoKTsKLSAgICAKKwogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICAKKwogICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQg
QXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDM0LgogICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKQEAgLTExOTAs
NyArMTE1NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShC
eVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0CiAgICAgSnVtcCBkb25lID0ganVt
cCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExp
bmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICAKKwogICAgIHBhdGNoQnVmZmVy
LmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAgICAgcGF0Y2hCdWZm
ZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogCkBAIC0xMTk5
LDE3MCArMTE2NCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIGJ5VmFsSW5mby0+
c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBtX2NvZGVCbG9j
aywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUg
aGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0
cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkp
OwotICAgIAorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bV9i
YWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVy
aWMpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9w
ZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQ
cm9wZXJ0eT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAg
VmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0g
ICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSk7Ci0KLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QxKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0KLSAgICAvLyBUaGlz
IGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAtIHdlJ3JlIHplcm8tZXh0ZW5kaW5nIGFuIGludDMy
LiBPbiB0aGUgaG90IHBhdGggdGhpcyBkb2Vzbid0IG1hdHRlci4KLSAgICAvLyBXZSBjaGVjayB0
aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWludDMyIGFnYWluc3QgdGhlIG1fdmVjdG9yTGVuZ3Ro
IC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBpZgotICAgIC8vIG51bWJlciB3YXMgc2lnbmVkIHNp
bmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5cyBsZXNzIHRoYW4gaW50bWF4IChzaW5jZSB0aGUg
dG90YWwgYWxsb2NhdGlvbgotICAgIC8vIHNpemUgaXMgYWx3YXlzIGxlc3MgdGhhbiA0R2IpLiBB
cyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwgaGF2ZSBiZWVuIGNvcnJlY3QgKGFuZCBleHRlbmRp
bmcgdGhlIHZhbHVlCi0gICAgLy8gdG8gNjQtYml0cyBpcyBuZWNlc3Nhcnkgc2luY2UgaXQncyB1
c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0aW9uLiBXZSB6ZXJvIGV4dGVuZCByYXRoZXIgdGhh
biBzaWduCi0gICAgLy8gZXh0ZW5kaW5nIHNpbmNlIGl0IG1ha2VzIGl0IGVhc2llciB0byByZS10
YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNhc2UuCi0gICAgemVyb0V4dGVuZDMyVG9Xb3JkKHJl
Z1QxLCByZWdUMSk7Ci0KLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAs
IHJlZ1QyLCBwcm9maWxlKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1h
c2spLCByZWdUMik7Ci0KLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShw
cm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0KLSAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4K
LSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAz
MyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAg
ICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1vZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIo
MSksIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNl
KHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAg
ZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLQotICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFi
ZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBp
bGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVtcCgpLCBi
YWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJv
cGVydHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAg
IFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdp
c3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5i
eVZhbEluZm87Ci0KLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgZW1p
dExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMs
IHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBieVZhbElu
Zm8pOwotCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJl
Z2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4
ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5
dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwK
LSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0
TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRl
IHRoZSBvZmZzZXQKLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QyKTsKLSAgICAvLyBJ
ZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3Jh
Z2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3Mg
PSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1Qw
KTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgbG9hZDMyKEJh
c2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1w
KCk7Ci0KLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFj
Y2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1Qy
KTsKLSAgICBuZWczMihyZWdUMik7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkg
PSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9m
ZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJl
Z1QwLCByZWdUMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgbG9hZDMyKEJhc2VJ
bmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICAK
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAg
IGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5
dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5k
ZXg7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBh
eWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihC
ZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5k
U3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlz
KTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbG9hZFB0
cihCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciksIHJlZ1QwKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDIpOwotCi0gICAgZG9uZS5saW5rKHRo
aXMpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0
ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUu
bV9pbmRleDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwotICAgIGVtaXRM
b2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDAp
LCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgbG9h
ZFB0cihCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciksIHJlZ1QwKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDIpOwotICAgIAotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwotfQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAppbmRleCAxNWUxZDM0NTc5YjZkNGM4YzE3MGQyMzUwYzZjMzY0NDNmZmVh
NDE1Li5mMDUzOTVjODIwYzRjNDhmMDEzYzg5OWRiMDU3MWQ1ZjZhN2NiMWYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKKyNpbmNsdWRlICJQ
cm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgpAQCAtODYsMTAg
Kzg3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIAogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2RlVHlwZT4K
K3ZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlwZSYgYnl0
ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgaWYg
KGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CkBAIC0xMzYsNiArMTM3LDExIEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTCiAgICAgfQogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCksIGl0ZXIpOworfQorCiAjaWYgRU5B
QkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJU
YWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZNJiB2bSkK
IHsKQEAgLTI5NzcsNiArMjk4MywxOTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFs
X2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIHRlbXBsYXRl
IHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKIAordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgIFZpcnR1YWxSZWdpc3RlciBi
YXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0gYnl0ZWNv
ZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1faW5kZXg7
CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJvcGVydHlO
YW1lOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJh
dG9yOworCisgICAgSnVtcExpc3QgZG9uZTsKKyAgICBKdW1wTGlzdCBvcGVyYXRpb25DYXNlczsK
KworICAgIEdQUlJlZyBtb2RlR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGluZGV4R1BSID0gcmVn
VDE7CisgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKKworICAgIC8vIFRoaXMgaXMgdGhlIG1v
c3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2UgaXQgaWYg
d2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCisgICAgaWYgKG1ldGFkYXRhLm1fZW51bWVyYXRv
ck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
eworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgICAgICBvcGVy
YXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAgICAgbG9h
ZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOworICAgICAgICBvcGVyYXRpb25DYXNl
cy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1vZGUsIG1vZGVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCBpbmRleEdQUik7CisgICAgICAgIEp1bXAgbm90SW5pdCA9IGJyYW5jaFRlc3QzMihaZXJv
LCBtb2RlR1BSKTsKKyAgICAgICAgLy8gTmVlZCB0byB1c2UgYWRkNjQgc2luY2UgdGhpcyBpcyBh
IEpTVmFsdWUgaW50MzIuCisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIp
OworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7CisgICAg
ICAgIG5vdEluaXQubGluayh0aGlzKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUoanNOdW1i
ZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSksIGFkZHJlc3NGb3IobW9kZSkpOworCisgICAgICAgIEp1bXAgb3V0T2ZCb3Vu
ZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1lcmF0b3JH
UFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9m
ZnNldCgpKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIGVu
dW1lcmF0b3JHUFIpOworICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBoaWdoIGJpdHMg
ZnJvbSB0aGUgbnVtYmVyIGVuY29kaW5nLgorICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoLTEp
LCBpbmRleEdQUik7CisgICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KGVudW1lcmF0b3JHUFIsIGlu
ZGV4R1BSLCBTY2FsZVB0ciksIGVudW1lcmF0b3JHUFIpOworCisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yR1BSKTsKKyAgICAgICAgZG9uZS5h
cHBlbmQoanVtcCgpKTsKKworICAgICAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOworICAgICAg
ICBzdG9yZVRydXN0ZWRWYWx1ZShqc051bGwoKSwgYWRkcmVzc0Zvcihwcm9wZXJ0eU5hbWUpKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKyAgICB9CisKKyAgICBvcGVyYXRpb25DYXNl
cy5saW5rKHRoaXMpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOworICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3RlciBwcm9w
ZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
ZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBKdW1wTGlzdCBkb25lQ2Fz
ZXM7CisKKyAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCBy
ZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJlZ1QxKTsK
KworICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JN
ZXRhZGF0YSkpOworCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Cisg
ICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KKyAgICBKdW1wIGlz
Tm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwgVHJ1c3Rl
ZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0
dXJlCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qz
KTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qz
LCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVy
ZUlET2Zmc2V0KCkpKTsKKworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0
aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4g
aW5saW5lIGFjY2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVP
ckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihK
U09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgc2lnbkV4dGVu
ZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CisKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgIG91dE9mTGluZUFj
Y2Vzcy5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1Qx
KTsKKyAgICBuZWczMihyZWdUMSk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1Qx
KTsKKyAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0Vp
Z2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGRvbmVDYXNlcy5h
cHBlbmQoanVtcCgpKTsKKworICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7CisgICAg
c3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25T
dHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEpOworCisgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7CisgICAgSnVt
cCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgLy8gUmVwbGFjZSB0
aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5k
ZXgsIHJlZ1QxKTsKKworICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOworICAgIGVtaXRBcnJh
eVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCByZWdUMSk7CisKKyAgICBKSVRHZXRCeVZh
bEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBKSVRUeXBlOjpCYXNlbGluZUpJ
VCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlSW5kZXgpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVJ
bmRleCksIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDEpLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpLCByZWdUMik7CisgICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOworICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2Vs
aW5lSklUKSkKKyAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBl
bHNlCisgICAgICAgIGFkZFNsb3dDYXNlKCk7CisgICAgbV9nZXRCeVZhbHMuYXBwZW5kKGdlbik7
CisKKyAgICBkb25lQ2FzZXMubGluayh0aGlzKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUobWV0YWRhdGEsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUikpOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpLCBpdGVy
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVuYW1lIFNsb3dQYXRo
RnVuY3Rpb25UeXBlPgordm9pZCBKSVQ6OmVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBs
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IE9wY29kZVR5cGUm
IGJ5dGVjb2RlLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSBnZW5lcmFsQ2FzZSkKK3sKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7CisgICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRl
Y29kZS5tX2VudW1lcmF0b3I7CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5t
X21vZGU7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG1vZGUsIHJlZ1QwKTsKKyAgICBvcjgocmVnVDAsIEFic29sdXRlQWRkcmVzcygmbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoVGVzdDMyKFplcm8sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihi
YXNlLCByZWdUMCk7CisKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9m
ZnNldCgpKSkpOworCisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpLCByZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwor
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIHNsb3dDYXNlcy5saW5rKHRoaXMpOworCisg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGdlbmVyYWxDYXNlKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworCisgICAgZG9uZS5saW5r
KHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRfZW51bWVyYXRv
cl9oYXNfcHJvcGVydHlJbXBsKGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpLCBzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92
YWwpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHko
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0X2VudW1l
cmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk+KCksIHNsb3dfcGF0aF9lbnVtZXJh
dG9yX2hhc19vd25fcHJvcGVydHkpOworfQorCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KQogCiB2
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihWaXJ0dWFsUmVnaXN0ZXIgb3duZXIsIFZpcnR1YWxS
ZWdpc3RlciB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggNThlNWQ1
MmZlNWIwOGFlMjllM2U1ZGRkZTNkNzQ2Nzk2N2YyMzAxOS4uNzVkMGJkN2Y2ZWYzNWM3NjI3MzEz
ZjI2YmE2NWExNjhkODNiOTQ1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC0xNTA1LDYgKzE1MDUsMzUgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAKIHRlbXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8
T3BQdXRCeVZhbD4oY29uc3QgSW5zdHJ1Y3Rpb24qKTsKIAordm9pZCBKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9uZXh0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0
aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYpCit7CisgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JN
KCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9y
X2luX2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVy
dHkpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQppbmRleCAzN2I2ZGYzMGYxMGMzYTAw
MWE1NjU1ZWExYmIxZGI1OTU3M2NmNjA4Li5lNzE4M2E3MmEzNjhmMWEyODA0Njg0ZDJiMDc2NDdm
MjIwNjhmMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCkBAIC0xOTkyLDE5ICsxOTkyLDE0IEBAIHNsb3dQYXRoT3AoY3Jl
YXRlX2dlbmVyYXRvcikKIHNsb3dQYXRoT3AoY3JlYXRlX2FzeW5jX2dlbmVyYXRvcikKIHNsb3dQ
YXRoT3AoZGVmaW5lX2FjY2Vzc29yX3Byb3BlcnR5KQogc2xvd1BhdGhPcChkZWZpbmVfZGF0YV9w
cm9wZXJ0eSkKLXNsb3dQYXRoT3AoZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKQotc2xvd1BhdGhP
cChlbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKIHNsb3dQYXRoT3AoZ2V0X2J5X3ZhbF93aXRo
X3RoaXMpCi1zbG93UGF0aE9wKGdldF9kaXJlY3RfcG5hbWUpCi1zbG93UGF0aE9wKGdldF9lbnVt
ZXJhYmxlX2xlbmd0aCkKIHNsb3dQYXRoT3AoZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCi1zbG93
UGF0aE9wKGhhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi1zbG93UGF0aE9wKGhhc19l
bnVtZXJhYmxlX3Byb3BlcnR5KQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX25leHQpCitzbG93UGF0
aE9wKGVudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9pbl9ieV92
YWwpCitzbG93UGF0aE9wKGVudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKIAogaWYgbm90IEpT
VkFMVUU2NAotICAgIHNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5
KQotICAgIHNsb3dQYXRoT3AoaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xvd1Bh
dGhPcChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgc2xvd1BhdGhPcChnZXRfcHJvdG90eXBl
X29mKQogZW5kCiAKQEAgLTIwMjEsNyArMjAxNiw2IEBAIHNsb3dQYXRoT3AocmVzb2x2ZV9zY29w
ZV9mb3JfaG9pc3RpbmdfZnVuY19kZWNsX2luX2V2YWwpCiBzbG93UGF0aE9wKHNwcmVhZCkKIHNs
b3dQYXRoT3Aoc3RyY2F0KQogc2xvd1BhdGhPcCh0aHJvd19zdGF0aWNfZXJyb3IpCi1zbG93UGF0
aE9wKHRvX2luZGV4X3N0cmluZykKIHNsb3dQYXRoT3AodHlwZW9mKQogc2xvd1BhdGhPcCh0eXBl
b2ZfaXNfb2JqZWN0KQogc2xvd1BhdGhPcCh0eXBlb2ZfaXNfZnVuY3Rpb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCmlu
ZGV4IGJkODg1NWViZmQ2ZmMxOWIxNWMxYjU4ODZkNGZhNTU2NDM4MmQ4N2QuLjhhNWY3ZDIzZTY0
NzYzYmEyNTllMWIyYzVkODdmOGQxNmI4MjlhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCkBAIC0zMTQxLDM0ICsz
MTQxLDYgQEAgbGxpbnRPcChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCwgT3BMb2dTaGFkb3dD
aGlja2VuVGFpbCwgbWFjcm8gKHNpemUsIGdldCwgZGkKICAgICBkaXNwYXRjaCgpCiBlbmQpCiAK
LW1hY3JvIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1
cm4sIHNsb3dQYXRoQ2FsbCkKLSAgICBnZXQobV9iYXNlLCB0MCkKLSAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHNpemUsIHQwLCB0MSkKLSAgICBidHFueiB0MSwgbm90Q2VsbE1hc2ssIC5zbG93
UGF0aAotCi0gICAgbG9hZFZhcmlhYmxlKGdldCwgbV9lbnVtZXJhdG9yLCB0MCkKLSAgICBsb2Fk
aSBKU0NlbGw6Om1fc3RydWN0dXJlSURbdDFdLCB0MQotICAgIGJpbmVxIHQxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Om1fY2FjaGVkU3RydWN0dXJlSURbdDBdLCAuc2xvd1BhdGgKLQotICAg
IHJldHVybihWYWx1ZVRydWUpCi0KLS5zbG93UGF0aDoKLSAgICBjYWxsU2xvd1BhdGgoc2xvd1Bh
dGhDYWxsKQotICAgIGRpc3BhdGNoKCkKLWVuZAotCi1sbGludE9wV2l0aFJldHVybihvcF9oYXNf
ZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVBy
b3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGhhc1N0cnVj
dHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xvd19wYXRo
X2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhS
ZXR1cm4ob3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSGFzT3duU3RydWN0dXJlUHJv
cGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0
dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhf
aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi1lbmQpCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9w
X2luX3N0cnVjdHVyZV9wcm9wZXJ0eSwgT3BJblN0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQotICAgIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChz
aXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJuLCBfc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLWVuZCkKLQogb3AoZnV6emVyX3JldHVybl9lYXJseV9mcm9tX2xvb3BfaGludCwgbWFj
cm8gKCkKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKICAgICBsb2FkcCBDb2RlQmxvY2s6
Om1fZ2xvYmFsT2JqZWN0W3QwXSwgdDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCmluZGV4IDExMjk1NGJiOWI2ZTUwMTM2ODgzYjc0NTZj
YjFlODMxOGZiNWE1MTEuLjA3YTc0NWRkNDEwZDUxNzM1M2FhYmNjNGQ1NDM2NGIxNGE5NzQ0ZTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcApAQCAtOTYyLDE2MSArOTYyLDEzOSBAQCBKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX3RvX3Byb3BlcnR5X2tleSkKICAgICBSRVRVUk4oR0VUX0MoYnl0ZWNvZGUubV9z
cmMpLmpzVmFsdWUoKS50b1Byb3BlcnR5S2V5VmFsdWUoZ2xvYmFsT2JqZWN0KSk7CiB9CiAKLUpT
Q19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3Ro
KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfcHJvcGVydHlfZW51
bWVyYXRvcikKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BH
ZXRFbnVtZXJhYmxlTGVuZ3RoPigpOwotICAgIEpTVmFsdWUgZW51bWVyYXRvclZhbHVlID0gR0VU
X0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKGVudW1lcmF0b3JWYWx1ZS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICBSRVRVUk4oanNOdW1iZXIoMCkpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBp
ZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIFJFVFVSTih2bS5lbXB0
eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CiAKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oZW51bWVy
YXRvclZhbHVlLmFzQ2VsbCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09i
amVjdChnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgUkVUVVJO
KGpzTnVtYmVyKGVudW1lcmF0b3ItPmluZGV4ZWRMZW5ndGgoKSkpOworICAgIFJFVFVSTihwcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5F
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVy
dHkpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4
dCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BF
bnVtZXJhdG9yTmV4dD4oKTsKICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jayk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2Up
LmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigp
OwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1
ZSgpOwotICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmUoYmFzZS0+
c3RydWN0dXJlKHZtKSk7Ci0gICAgQVNTRVJUKHByb3BlcnR5LmlzVUludDMyQXNBbnlJbnQoKSk7
Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBwcm9wZXJ0eS5hc1VJbnQzMkFzQW55SW50KCkpKSk7Ci19CisgICAgUmVnaXN0ZXIm
IG1vZGVSZWdpc3RlciA9IEdFVChieXRlY29kZS5tX21vZGUpOworICAgIFJlZ2lzdGVyJiBpbmRl
eFJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpOworICAgIFJlZ2lzdGVyJiBuYW1lUmVn
aXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpOwogCi1KU0NfREVGSU5FX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkK
LXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVtZXJh
YmxlU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRl
Y29kZS5tX2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNL
X0VYQ0VQVElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9w
ZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJFTEVBU0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkp
OwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBl
bnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29k
ZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgaWYgKGJhc2UtPnN0cnVj
dHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAg
ICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7Ci0jZW5kaWYKLSAgICBKU1N0cmluZyogc3RyaW5n
ID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50
b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBS
RVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3Qs
IHByb3BlcnR5TmFtZSkpKTsKLX0KKyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KG1vZGVSZWdpc3Rlci5qc1ZhbHVlKCkuYXNVSW50MzIo
KSk7CisgICAgdWludDMyX3QgaW5kZXggPSBpbmRleFJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQz
MigpOwogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3Ry
dWN0dXJlX3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcEhhc093blN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIEpTVmFsdWUgYmFzZSA9IEdF
VF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkK
LSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgp
LmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS5pc0NlbGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUodm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAg
ICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlmCisgICAgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+
KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBHRVQoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgQVNTRVJUKCFiYXNl
VmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBiYXNlVmFs
dWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICBt
ZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZS0+c3RydWN0dXJl
SUQoKSk7CiAKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAg
ICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVy
dHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICBKU1N0cmlu
ZyogbmFtZSA9IGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9iamVjdCwgYmFzZSwgaW5k
ZXgsIG1vZGUpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOwogCi0gICAgUkVUVVJOKGpzQm9vbGVh
bihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3Bl
cnR5TmFtZSkpKTsKKyAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNf
Y2FzdDx1aW50OF90Pihtb2RlKTsKKyAgICBtb2RlUmVnaXN0ZXIgPSBqc051bWJlcihzdGF0aWNf
Y2FzdDx1aW50OF90Pihtb2RlKSk7CisgICAgaW5kZXhSZWdpc3RlciA9IGpzTnVtYmVyKGluZGV4
KTsKKyAgICBuYW1lUmVnaXN0ZXIgPSBuYW1lID8gbmFtZSA6IGpzTnVsbCgpOworICAgIEVORCgp
OwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVy
ZV9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKQogewogICAgIEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBj
LT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VUX0Mo
Ynl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2Vs
bCgpKTsKLSAgICBpZiAoYmFzZS5pc0NlbGwoKSAmJiBiYXNlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
dm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCi0gICAgICAgIFJF
VFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlmCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdF
VChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJv
cGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6
Om9wSW5CeVZhbChnbG9iYWxPYmplY3QsIGJhc2UsIGFzU3RyaW5nKHByb3BlcnR5KSkpKTsKLX0K
KyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7Cisg
ICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1
dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VU
KGJ5dGVjb2RlLm1fbW9kZSkuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1f
ZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOworCisgICAg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUoKSk7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzSW50
MzIoKTsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGU6IHsKKyAgICAgICAgaWYgKExJS0VMWShiYXNlVmFsdWUuaXNDZWxs
KCkpKQorICAgICAgICAgICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVy
ZUlEKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7CisgICAgICAgIFJFVFVSTl9Q
Uk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGluZGV4KSkpOworICAgIH0KKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3du
U3RydWN0dXJlTW9kZTogeworICAgICAgICBBU1NFUlQoYmFzZVZhbHVlLmlzQ2VsbCgpKTsKKyAg
ICAgICAgaWYgKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9y
LT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKSB7CisgICAgICAgICAgICAvLyBXZSdsbCBvbmx5IG1hdGNo
IHRoZSBzdHJ1Y3R1cmUgSUQgaWYgdGhlIGJhc2UgaXMgYW4gb2JqZWN0LgorICAgICAgICAgICAg
QVNTRVJUKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKTsK
KyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0T2JqZWN0KCktPmdldERp
cmVjdChpbmRleCA8IGVudW1lcmF0b3ItPmNhY2hlZElubGluZUNhcGFjaXR5KCkgPyBpbmRleCA6
IGluZGV4IC0gZW51bWVyYXRvci0+Y2FjaGVkSW5saW5lQ2FwYWNpdHkoKSArIGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWV0YWRhdGEubV9lbnVt
ZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKTsKKyAgICAg
ICAgRkFMTFRIUk9VR0g7CisgICAgfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKTsKLSAgICBKU09i
amVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgQVNTRVJUKHByb3Bl
cnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0
eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxP
YmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFz
ZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOwot
fQorICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTogeworICAg
ICAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIG1vZGUgIT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9hcnJheVBy
b2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZUlEKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQo
KSk7CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9w
cm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1lID0gc3Ry
aW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgLy8gVE9ETyBEb2VzIHRo
aXMgYWN0dWFsbHkgZXZlciB0aHJvdz8gSXNuJ3Qgc3RyaW5nIGJhY2tlZCBieSBhIFVVSUQ/Cisg
ICAgICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZh
bHVlLmdldChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpOworICAgIH0KIAotSlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKQotewotICAgIEJF
R0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwot
ICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7
Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVl
KCk7Ci0gICAgQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBzdHJp
bmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmct
PnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAg
IFJFVFVSTihiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSk7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfTsKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi1K
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJh
dG9yKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2lu
X2J5X3ZhbCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BH
ZXRQcm9wZXJ0eUVudW1lcmF0b3I+KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVu
dW1lcmF0b3JJbkJ5VmFsPigpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNv
ZGUubV9iYXNlKS5qc1ZhbHVlKCk7Ci0gICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICBSRVRVUk4odm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICBh
dXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+KEdF
VChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBtZXRhZGF0YS5t
X2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsKIAotICAg
IEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CiAgICAg
Q0hFQ0tfRVhDRVBUSU9OKCk7CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2Vu
dW1lcmF0b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFsdWUuZ2V0
T2JqZWN0KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+
Y2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkp
OwogCi0gICAgUkVUVVJOKHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xvYmFsT2JqZWN0LCBiYXNl
KSk7Ci19Ci0KLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWUpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIHVp
bnQzMl90IGluZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMkFz
QW55SW50KCk7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc1Byb3Bl
cnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQz
MigpKSkpOworICAgIH0KIAotICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBudWxscHRyOwot
ICAgIGlmIChpbmRleCA8IGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSkK
LSAgICAgICAgcHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChp
bmRleCk7Ci0gICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVsbCgp
KTsKKyAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVy
dHlOYW1lKS5qc1ZhbHVlKCkpOworICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhz
OjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHN0cmluZywgJm1ldGFkYXRhLm1f
YXJyYXlQcm9maWxlKSkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KQogewogICAgIEJFR0lOKCk7
Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7
Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpzVmFsdWUo
KS5hc0NlbGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0ZWNvZGUubV9pbmRleCku
anNWYWx1ZSgpLmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
R0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0
PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNW
YWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOwogCi0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFt
ZSA9IG51bGxwdHI7Ci0gICAgaWYgKGVudW1lcmF0b3ItPmVuZFN0cnVjdHVyZVByb3BlcnR5SW5k
ZXgoKSA8PSBpbmRleCAmJiBpbmRleCA8IGVudW1lcmF0b3ItPmVuZEdlbmVyaWNQcm9wZXJ0eUlu
ZGV4KCkpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0
SW5kZXgoaW5kZXgpOwotICAgIFJFVFVSTihwcm9wZXJ0eU5hbWUgPyBwcm9wZXJ0eU5hbWUgOiBq
c051bGwoKSk7Ci19CisgICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0g
anNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0
b3IpLmpzVmFsdWUoKSk7CisgICAgaWYgKGF1dG8qIGJhc2UgPSBiYXNlVmFsdWUuZ2V0T2JqZWN0
KCkpIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25T
dHJ1Y3R1cmVNb2RlICYmIGJhc2UtPnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVk
U3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwogCi1K
U0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX2luZGV4X3N0cmluZykKLXsK
LSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BUb0luZGV4U3RyaW5n
PigpOwotICAgIEpTVmFsdWUgaW5kZXhWYWx1ZSA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1Zh
bHVlKCk7Ci0gICAgQVNTRVJUKGluZGV4VmFsdWUuaXNVSW50MzJBc0FueUludCgpKTsKLSAgICBS
RVRVUk4oanNTdHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4VmFsdWUuYXNVSW50
MzJBc0FueUludCgpKS5zdHJpbmcoKSkpOworICAgICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVh
bihiYXNlLT5oYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIEdFVChieXRlY29kZS5tX2luZGV4
KS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkpKTsKKyAgICB9CisKKyAgICBKU1N0cmluZyogc3RyaW5n
ID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkpOworICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsK
KyAgICBDSEVDS19FWENFUFRJT04oKTsKKyAgICBSRVRVUk4oanNCb29sZWFuKG9iamVjdFByb3Rv
dHlwZUhhc093blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZVZhbHVlLCBwcm9wZXJ0eU5hbWUp
KSk7CiB9CiAKIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfcHJvZmlsZV90
eXBlX2NsZWFyX2xvZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmgKaW5kZXggZDhkMTUwMWZiMzViYWMyNzk0YzZkOTQxMDI3MWJiNjhmNGNjMDU3
ZS4uYTVlMDE1ZDUzYTY5ZTYwNTNhZjRkYmIzMWIyYzhmMjU3YzBkYjFlMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKQEAgLTI1NCwxNyAr
MjU0LDExIEBAIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2lzX2NvbnN0
cnVjdG9yKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3N0cmNhdCk7
CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcmltaXRpdmUpOwog
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJvcGVydHlfa2V5KTsK
LUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9lbnVtZXJhYmxlX2xl
bmd0aCk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVy
YWJsZV9pbmRleGVkX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci1KU0NfREVDTEFSRV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSk7Ci1KU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfb3duX3N0cnVjdHVyZV9wcm9w
ZXJ0eSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9pbl9zdHJ1Y3R1
cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0
X2RpcmVjdF9wbmFtZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9n
ZXRfcHJvcGVydHlfZW51bWVyYXRvcik7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk7Ci1KU0NfREVDTEFSRV9DT01NT05f
U0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOwotSlNDX0RFQ0xB
UkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKTsKK0pTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfbmV4dCk7CitKU0NfREVD
TEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOwor
SlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92
YWwpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9o
YXNfb3duX3Byb3BlcnR5KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfdW5yZWFjaGFibGUpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnQuY3BwCmluZGV4IGUyY2Ex
NjJlMGI1NGUyNWNmMDY5ZWVhOGM4N2UxZWVhMmU0Y2Q1YmUuLjFiMDMxMzBmMGE1YzA3YzMzNWNj
NTg1NjgzYmI2NDVlZTUzZTA4YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKQEAgLTkwLDcgKzkwLDYgQEAgU3Bl
Y3VsYXRlZFR5cGUgRmlsZUJhc2VkRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRlcm5hbChD
b2RlQmxvY2sqIGNvZGVCbG9jaywKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIG9wX2dldF9i
eV92YWxfd2l0aF90aGlzOgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKICAgICBjYXNl
IG9wX2NvbnN0cnVjdDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgogICAgIGNhc2Ug
b3BfY2FsbF92YXJhcmdzOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAKaW5kZXggZjEzOWQ0YTQ0N2IyNzBm
OWVkMzNmN2RmZDM1ZTAyYWZmYzMxYzcwMy4uMTcwZjFhNjBkYWJiMjU2NzFjMGVkNmNkMzc1YzBi
OWIxMjhkMTY2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmls
ZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2UuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgT3Bjb2RlSUQg
RmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlOjpvcGNvZGVBbGlhc0Zvckxvb2t1cEtleShjb25zdCBP
cGNvZGVJRCYgb3Bjb2QKIHsKICAgICBpZiAob3Bjb2RlSWQgPT0gb3BfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlkID09IG9wX2NhbGxfZXZhbCB8fCBvcGNvZGVJZCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSWQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIHJldHVybiBvcF9jYWxs
OwotICAgIGlmIChvcGNvZGVJZCA9PSBvcF9nZXRfZGlyZWN0X3BuYW1lIHx8IG9wY29kZUlkID09
IG9wX2dldF9ieV92YWxfd2l0aF90aGlzKQorICAgIGlmIChvcGNvZGVJZCA9PSBvcF9lbnVtZXJh
dG9yX2dldF9ieV92YWwgfHwgb3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpCiAg
ICAgICAgIHJldHVybiBvcF9nZXRfYnlfdmFsOwogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9jb25z
dHJ1Y3RfdmFyYXJncykKICAgICAgICAgcmV0dXJuIG9wX2NvbnN0cnVjdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCAyNGZjZjA4
MTVlMjUwNDk1ZTAzMTc5NGEwNmU0YjMxMDVjNzg0ZmI0Li4xNWY1YjA2NGVjYmZjNjU4YTk5MGQy
ZWI1OTYzNWJmMmJkYmU4ODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC0xNDYxLDYgKzE0NjEsMTAgQEAgY2FwaXRhbE5hbWUg
IyMgQ29uc3RydWN0b3IqIGxvd2VyTmFtZSAjIyBDb25zdHJ1Y3RvciA9IGZlYXR1cmVGbGFnID8g
Y2FwaXRhbE5hbWUKICAgICAgICAgfSk7CiAjZW5kaWYKIAorICAgIG1fbGlua1RpbWVDb25zdGFu
dHNbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KExpbmtUaW1lQ29uc3RhbnQ6OmVtcHR5UHJvcGVydHlO
YW1lRW51bWVyYXRvcildLmluaXRMYXRlcihbXSAoY29uc3QgSW5pdGlhbGl6ZXI8SlNDZWxsPiYg
aW5pdCkgeworICAgICAgICBpbml0LnNldChpbml0LnZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVy
YXRvcigpKTsKKyAgICB9KTsKKwogICAgIGlmIChPcHRpb25zOjpleHBvc2VQcm9maWxlcnNPbkds
b2JhbE9iamVjdCgpKSB7CiAjaWYgRU5BQkxFKFNBTVBMSU5HX1BST0ZJTEVSKQogICAgICAgICBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwg
Il9fZW5hYmxlU2FtcGxpbmdQcm9maWxlciIpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMs
IDEsIFN0cmluZygpLCBlbmFibGVTYW1wbGluZ1Byb2ZpbGVyKSwgUHJvcGVydHlBdHRyaWJ1dGU6
OkRvbnRFbnVtIHwgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnREZWxldGUgfCBQcm9wZXJ0eUF0dHJp
YnV0ZTo6UmVhZE9ubHkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKaW5kZXggMjFjNzBhMjdiNjkxYmUw
NTY5MGEyZmFlNzdjNjk5MTJhZWVjMTE5ZC4uOTgyYWE0N2M2NTYzNzMzNjk0YjMwZjE5NmI4OTFi
NDU5ZmYyM2UzNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuY3BwCkBAIC00OSwxMyArNDksMTkgQEAgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZShW
TSYgdm0sIFN0cnVjdHVyZSogc3QKIAogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgdWludDMyX3Qg
aW5kZXhlZExlbmd0aCwgdWludDMyX3QgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV3JpdGVC
YXJyaWVyPEpTU3RyaW5nPiogcHJvcGVydHlOYW1lc0J1ZmZlciwgdW5zaWduZWQgcHJvcGVydHlO
YW1lc1NpemUpCiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5TmFtZUVudW1lcmF0b3JTdHJ1
Y3R1cmUuZ2V0KCkpCi0gICAgLCBtX3Byb3BlcnR5TmFtZXModm0sIHRoaXMsIHByb3BlcnR5TmFt
ZXNCdWZmZXIpCiAgICAgLCBtX2NhY2hlZFN0cnVjdHVyZUlEKHN0cnVjdHVyZSA/IHN0cnVjdHVy
ZS0+aWQoKSA6IDApCiAgICAgLCBtX2luZGV4ZWRMZW5ndGgoaW5kZXhlZExlbmd0aCkKICAgICAs
IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleChudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzKQog
ICAgICwgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleChwcm9wZXJ0eU5hbWVzU2l6ZSkKICAgICAs
IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHkoc3RydWN0dXJlID8gc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpIDogMCkKKyAgICAsIG1fcHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVydHlOYW1l
c0J1ZmZlcikKIHsKKyAgICBpZiAobV9pbmRleGVkTGVuZ3RoKQorICAgICAgICBtX21vZGVTZXQg
fD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTsKKyAgICBpZiAobV9lbmRT
dHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVTZXQgfD0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlOworICAgIGlmIChtX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4IC0gbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KQorICAgICAgICBtX21vZGVT
ZXQgfD0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTsKIH0KIAogdm9pZCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgUmVmUHRyPFBy
b3BlcnR5TmFtZUFycmF5RGF0YT4mJiBpZGVudGlmaWVycykKQEAgLTE0OCw0ICsxNTQsNzAgQEAg
dm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU09iamVjdCogYmFzZSwgUHIKICAgICB9CiB9CiAKK0pTU3RyaW5nKiBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCYgaW5kZXgsIE1vZGUmIG1vZGUsIGJvb2wgc2hvdWxk
QWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZykKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
QVNTRVJUKGluZGV4ZWRMZW5ndGgoKSB8fCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpOworCisgICAg
aW5kZXgrKzsKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEluaXRNb2RlOiB7CisgICAg
ICAgIG1vZGUgPSBJbmRleGVkTW9kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxM
VEhST1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5k
ZXhlZE1vZGU6IHsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpICYmICFi
YXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpIHsKKyAgICAg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAg
aW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwor
CisgICAgICAgIGlmIChpbmRleCA8IGluZGV4ZWRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVy
biBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nID8ganNTdHJpbmcodm0sIElkZW50aWZp
ZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSkgOiBudWxscHRyOworCisgICAgICAgIGlmICgh
c2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgbW9kZSA9IE93blN0cnVjdHVyZU1vZGU7CisgICAgICAgIGluZGV4ID0gMDsKKyAgICAg
ICAgRkFMTFRIUk9VR0g7CisgICAgfQorCisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok93blN0cnVjdHVyZU1vZGU6CisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkdlbmVyaWNNb2RlOiB7CisgICAgICAgIEpTU3RyaW5nKiBuYW1lID0gbnVsbHB0cjsKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA+PSBzaXplT2ZQcm9wZXJ0
eU5hbWVzKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBuYW1lID0gcHJv
cGVydHlOYW1lQXRJbmRleChpbmRleCk7CisgICAgICAgICAgICBpZiAoIW5hbWUpCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaW5kZXggPCBlbmRTdHJ1Y3R1cmVQcm9w
ZXJ0eUluZGV4KCkgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBjYWNoZWRTdHJ1Y3R1cmVJRCgp
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYXV0byBpZCA9IElkZW50aWZp
ZXI6OmZyb21TdHJpbmcodm0sIG5hbWUtPnZhbHVlKGdsb2JhbE9iamVjdCkpOworICAgICAgICAg
ICAgc2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKyAgICAgICAgICAgIGlmIChiYXNlLT5oYXNF
bnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAg
ICAgICAgICAgIG5hbWUgPSBudWxscHRyOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAg
fQorICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOworCisgICAgICAgIGlmIChpbmRl
eCA+PSBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgJiYgaW5kZXggPCBzaXplT2ZQcm9wZXJ0
eU5hbWVzKCkpCisgICAgICAgICAgICBtb2RlID0gR2VuZXJpY01vZGU7CisgICAgICAgIHJldHVy
biBuYW1lOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKaW5kZXggMDIwMTFkNDFjN2Y2NmRh
ZDg4M2FlOGQ3NzBiNWQzZDI4NmNkNTA4Ny4uZDQ2ODUwNDlhYTM5MDBjMDE1ZTA0NDM2MzE1MjQ5
YmE4MDI4NWY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRl
ICJKU0Nhc3QuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlO
YW1lQXJyYXkuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVD
aGFpbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsNiArMzcsMTcgQEAgcHVibGljOgog
ICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRh
bDsKIAorICAgIGVudW0gTW9kZSA6IHVpbnQ4X3QgeworICAgICAgICBJbml0TW9kZSA9IDAsCisg
ICAgICAgIEluZGV4ZWRNb2RlID0gMSA8PCAwLAorICAgICAgICBPd25TdHJ1Y3R1cmVNb2RlID0g
MSA8PCAxLAorICAgICAgICBHZW5lcmljTW9kZSA9IDEgPDwgMiwKKyAgICAgICAgLy8gUHJvZmls
aW5nIE9ubHkKKyAgICAgICAgSGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRj
aCA9IDEgPDwgMywKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50OF90IGVudW1l
cmF0aW9uTW9kZU1hc2sgPSAoR2VuZXJpY01vZGUgPDwgMSkgLSAxOworCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+CiAgICAgc3RhdGljIElzb1N1
YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewpAQCAtNzQsMTYgKzg1LDIwIEBAIHB1
YmxpYzoKICAgICB1aW50MzJfdCBlbmRHZW5lcmljUHJvcGVydHlJbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7IH0KICAgICB1aW50MzJfdCBjYWNoZWRJbmxp
bmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7IH0KICAg
ICB1aW50MzJfdCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkgY29uc3QgeyByZXR1cm4gZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXgoKTsgfQorICAgIHVpbnQzMl90IG1vZGVTZXQoKSBjb25zdCB7IHJldHVy
biBtX21vZGVTZXQ7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFN0cnVjdHVyZUlET2Zm
c2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwg
bV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGluZGV4ZWRMZW5n
dGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yLCBtX2luZGV4ZWRMZW5ndGgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBlbmRTdHJ1Y3R1
cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciwgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3QgZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkSW5saW5lQ2FwYWNpdHlP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LCBtX2NhY2hlZElubGluZUNhcGFjaXR5KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3QgbW9kZVNl
dE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IsIG1fbW9kZVNldCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1lcyk7CiAgICAgfQogCisgICAg
SlNTdHJpbmcqIGNvbXB1dGVOZXh0KEpTR2xvYmFsT2JqZWN0KiwgSlNPYmplY3QqIGJhc2UsIHVp
bnQzMl90JiBjdXJyZW50SW5kZXgsIE1vZGUmLCBib29sIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5h
bWVTdHJpbmcgPSB0cnVlKTsKKwogICAgIERFQ0xBUkVfVklTSVRfQ0hJTERSRU47CiAKIHByaXZh
dGU6CkBAIC05MiwxMyArMTA3LDE0IEBAIHByaXZhdGU6CiAgICAgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKFZNJiwgU3RydWN0dXJlKiwgdWludDMyX3QsIHVpbnQzMl90LCBXcml0ZUJhcnJpZXI8
SlNTdHJpbmc+KiwgdW5zaWduZWQpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBSZWZQ
dHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiYmKTsKIAotICAgIEF1eGlsaWFyeUJhcnJpZXI8V3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlOYW1lczsKLSAgICBXcml0ZUJhcnJpZXI8
U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47CiAgICAgU3RydWN0dXJlSUQgbV9jYWNo
ZWRTdHJ1Y3R1cmVJRDsKICAgICB1aW50MzJfdCBtX2luZGV4ZWRMZW5ndGg7CiAgICAgdWludDMy
X3QgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4OwogICAgIHVpbnQzMl90IG1fZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXg7CiAgICAgdWludDMyX3QgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsKKyAg
ICB1aW50MzJfdCBtX21vZGVTZXQgeyAwIH07CisgICAgQXV4aWxpYXJ5QmFycmllcjxXcml0ZUJh
cnJpZXI8SlNTdHJpbmc+Kj4gbV9wcm9wZXJ0eU5hbWVzOworICAgIFdyaXRlQmFycmllcjxTdHJ1
Y3R1cmVDaGFpbj4gbV9wcm90b3R5cGVDaGFpbjsKIH07CiAKIHZvaWQgZ2V0RW51bWVyYWJsZVBy
b3BlcnR5TmFtZXMoSlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCosIFByb3BlcnR5TmFtZUFycmF5
JiwgdWludDMyX3QmIGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90JiBzdHJ1Y3R1cmVQcm9wZXJ0eUNv
dW50KTsKQEAgLTEzNCw3ICsxNTAsMTAgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogcHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICAg
ICAgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcyA9IDA7CiAgICAgfQogCi0gICAgZW51bWVyYXRv
ciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKHZtLCBzdHJ1Y3R1cmVBZnRlckdl
dHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0
aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKKyAgICBpZiAoIWluZGV4ZWRMZW5ndGggJiYg
IXByb3BlcnR5TmFtZXMuc2l6ZSgpKQorICAgICAgICBlbnVtZXJhdG9yID0gdm0uZW1wdHlQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yKCk7CisgICAgZWxzZQorICAgICAgICBlbnVtZXJhdG9yID0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1By
b3BlcnR5TmFtZXMsIGluZGV4ZWRMZW5ndGgsIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdU
Rk1vdmUocHJvcGVydHlOYW1lcykpOwogICAgIGlmICghaW5kZXhlZExlbmd0aCAmJiBzdWNjZXNz
ZnVsbHlOb3JtYWxpemVkQ2hhaW4gJiYgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1l
cyA9PSBzdHJ1Y3R1cmUpIHsKICAgICAgICAgZW51bWVyYXRvci0+c2V0Q2FjaGVkUHJvdG90eXBl
Q2hhaW4odm0sIHN0cnVjdHVyZS0+cHJvdG90eXBlQ2hhaW4oZ2xvYmFsT2JqZWN0LCBiYXNlKSk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNhbkNhY2hlUHJvcGVydHlOYW1lRW51bWVyYXRvcih2
bSkpCkBAIC0xNDMsNCArMTYyLDYgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciog
cHJvcGVydHlOYW1lRW51bWVyYXRvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKICAgICByZXR1
cm4gZW51bWVyYXRvcjsKIH0KIAordXNpbmcgRW51bWVyYXRvck1ldGFkYXRhID0gc3RkOjp1bmRl
cmx5aW5nX3R5cGVfdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGU+OworCiB9IC8vIG5h
bWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
ZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwCmluZGV4IGNk
Y2ZhOTlkNDlhNjkxNzQwMWQ2ODMxNjhiYTE5YWJkZWJhZTlhNGQuLmM3YThlMzFmN2U0N2JkNjkx
MWZlNGFjNDVmZGY3N2Q2ODM5NjQxMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFn
ZW50LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01Miw3ICs1Miw3IEBAIFNwZWN1bGF0ZWRUeXBlIFByZWRpY3Rpb25GaWxlQ3JlYXRp
bmdGdXp6ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbkludGVybmFsKENvZGVCbG9jCiAgICAgY2FzZSBv
cF9nZXRfYnlfaWQ6CiAgICAgY2FzZSBvcF9nZXRfYnlfaWRfd2l0aF90aGlzOgogICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgor
ICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsOgogICAgIGNhc2Ugb3BfY29uc3RydWN0
OgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jYWxsOgpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA3NWQ0
MDU5MDFkZDIzYmEzMzI4ZjdmMjFhZTY0ZmZmNmY5MTIzNTQzLi43ODhiMWYxMWRlYTJhNTc4YTMw
ZjA2Yzk0ZWViZDMzNWUwMDcwNzg2IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDIxLTA4LTA1ICBLZWl0aCBN
aWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIGZvci1pbiBzaG91bGQg
b25seSBlbWl0IG9uZSBsb29wIGluIGJ5dGVjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjc5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFy
cmF5LXdpdGgtb3duLW5hbWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAq
IG1pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAg
KHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4tZ2V0dGVycy5qczogQWRk
ZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWlu
dDMyLWFycmF5LXdpdGgtb3duLW5hbWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAg
ICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXkuanM6IEFkZGVkLgorICAg
ICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1vYmpl
Y3Qtd2l0aC1vd24tbmFtZWQtYW5kLWdldHRlcnMuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6
CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1vYmplY3Qtd2l0aC1vd24t
bmFtZWQuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1h
cmtzL2Zvci1pbi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanM6IEFkZGVkLgorICAgICAgICAoc3Vt
KToKKyAgICAgICAgKG9wYXF1ZVNldCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1zdHJpbmctYXJyYXkuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL2Zvci1vZi1pdGVyYXRlLWFycmF5LW1hcC1zZXQuanM6IEFkZGVkLgorICAg
ICAgICAoc3VtKToKKyAgICAgICAgKGxldC5nZW5lcmF0b3IpOgorICAgICAgICAqIHN0cmVzcy9m
b3ItaW4tYXJyYXktbW9kZS5qczoKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIHN0cmVzcy9m
b3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzOgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4t
ZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanM6CisgICAgICAgICogc3RyZXNzL2Zvci1pbi1wcmlt
aXRpdmUtaW5kZXgtb24tcHJvdG90eXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJlc3MvZm9y
LWluLXRlc3RzLmpzOgorICAgICAgICAqIHN0cmVzcy9oYXMtb3duLXByb3BlcnR5LXN0cnVjdHVy
ZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qczoKKyAgICAgICAgKHRlc3Q1KToKKwogMjAyMS0w
OC0wMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0Nd
IFlhcnIgQm95ZXJNb29yZSBzZWFyY2ggc2hvdWxkIHN1cHBvcnQgY2hhcmFjdGVyLWNsYXNzCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5LXdp
dGgtb3duLW5hbWVkLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1h
cnJheS13aXRoLW93bi1uYW1lZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNThiZjQzZmU1YWYwZmYxZDMwMTM4
YmE3N2UzNzM4MDQ3NDM1Yzk1Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS13aXRoLW93bi1uYW1lZC5qcwpAQCAtMCwwICsxLDE0
IEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIg
aSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsK
K30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7Cisg
ICAgdmFyIG8gPSBBcnJheSgxMDApLmZpbGwoMS4xMjMyMTQyMzEpOworICAgIG8uYSA9IDA7Cisg
ICAgby5iID0gInN1cnByaXNlIHN0cmluZyI7CisgICAgdGVzdChvKTsKK30KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1kb3VibGUtYXJyYXkuanMgYi9KU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0YTBj
M2M3MWQ2ZTY5MTA1OGEzMWRhY2JiNTA2NmZmMjRhNDA1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5LmpzCkBAIC0wLDAgKzEs
MTAgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsKKyAgICBmb3IgKHZh
ciBpIGluIG9iamVjdCkKKyAgICAgICAgc3VtICs9IG9iamVjdFtpXTsKKyAgICByZXR1cm4gc3Vt
OworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisg
ICAgdGVzdChBcnJheSgxMDApLmZpbGwoMS4xMjMxMjQxKSk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZ2V0dGVycy5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2Zvci1pbi1nZXR0ZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ZmEzNjQ4NjBhNmIwMDlkYTMxODg5
NTIzMDhjNTMwZTAwMmIxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9mb3ItaW4tZ2V0dGVycy5qcwpAQCAtMCwwICsxLDE1IEBACitmdW5jdGlvbiB0ZXN0KG9i
amVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAg
IHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOwor
CitsZXQgbyA9IHsgfTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCAicHJvdG9WYWx1ZSIsIHsg
Z2V0KCkgeyByZXR1cm4gInN0cmluZyI7IH0sIGVudW1lcmFibGU6IHRydWUgfSk7CitPYmplY3Qu
ZGVmaW5lUHJvcGVydHkobywgInByb3RvVmFsdWUyIiwgeyBnZXQoKSB7IHJldHVybiAic3RyaW5n
MSI7IH0sIGVudW1lcmFibGU6IHRydWUgfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkobywgInBy
b3RvVmFsdWUzIiwgeyBnZXQoKSB7IHJldHVybiAic3RyaW5nMiI7IH0sIGVudW1lcmFibGU6IHRy
dWUgfSk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgdGVzdChvKTsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1hcnJheS13aXRo
LW93bi1uYW1lZC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1hcnJh
eS13aXRoLW93bi1uYW1lZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTJkZGJkMmYwNWRiNGVjY2U5ZmQ5YmE0
NTY5ZjZiMDYyNGFhMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFy
a3MvZm9yLWluLWludDMyLWFycmF5LXdpdGgtb3duLW5hbWVkLmpzCkBAIC0wLDAgKzEsMTQgQEAK
K2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsKKyAgICBmb3IgKHZhciBpIGlu
IG9iamVjdCkKKyAgICAgICAgc3VtICs9IG9iamVjdFtpXTsKKyAgICByZXR1cm4gc3VtOworfQor
bm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICB2
YXIgbyA9IEFycmF5KDEwMCkuZmlsbCgxKTsKKyAgICBvLmEgPSAwOworICAgIG8uYiA9IDI7Cisg
ICAgdGVzdChvKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1pbnQzMi1hcnJheS5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1h
cnJheS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MmFlNWMxYjQyNTg5NDY2MGQ5Njk4MzVlNGY0Y2Q2YTgxZWVk
NTEwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWlu
dDMyLWFycmF5LmpzCkBAIC0wLDAgKzEsMTUgQEAKKwordmFyIGNvdW50ID0gMDsKK2Z1bmN0aW9u
IHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsKKyAgICBmb3IgKHZhciBpIGluIG9iamVjdCkK
KyAgICAgICAgc3VtICs9IG9iamVjdFtpXTsKKyAgICByZXR1cm4gc3VtOworfQorbm9JbmxpbmUo
dGVzdCk7CisKKwordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMCk7CithcnJheS5maWxsKDEpOwor
Zm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0KGFycmF5KTsKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1vYmplY3Qtd2l0aC1vd24t
bmFtZWQtYW5kLWdldHRlcnMuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50
MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLWFuZC1nZXR0ZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1ZWY3
ZWJkZDI0MzI5NDRmZGViMTRmYWZmOGI0MjZkYzQ0NjNhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVk
LWFuZC1nZXR0ZXJzLmpzCkBAIC0wLDAgKzEsMTUgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7
CisgICAgc3VtID0gMDsKKyAgICBmb3IgKHZhciBpIGluIG9iamVjdCkKKyAgICAgICAgc3VtICs9
IG9iamVjdFtpXTsKKyAgICByZXR1cm4gc3VtOworfQorbm9JbmxpbmUodGVzdCk7CisKK09iamVj
dC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCAicHJvdG9WYWx1ZSIsIHsgZ2V0KCkg
eyByZXR1cm4gInN0cmluZyI7IH0sIGVudW1lcmFibGU6IHRydWUgfSk7Cit2YXIgbyA9IHsgbGVu
Z3RoOiAxMDAgfQorQXJyYXkucHJvdG90eXBlLmZpbGwuY2FsbChvLCAxKTsKK28uYSA9IDA7Citv
LmIgPSAyOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0KG8pOwpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLW9iamVjdC13aXRo
LW93bi1uYW1lZC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1vYmpl
Y3Qtd2l0aC1vd24tbmFtZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU3MGZkMGY1MTZkY2Q1NzU1YjNmMmVi
OTY5Yzk4OWI1MTVkNzZjNAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2Zvci1pbi1pbnQzMi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanMKQEAgLTAsMCArMSwxNyBA
QAorZnVuY3Rpb24gdGVzdChvYmplY3QpIHsKKyAgICBzdW0gPSAwOworICAgIGZvciAodmFyIGkg
aW4gb2JqZWN0KSB7CisgICAgICAgIHZhciB2ID0gb2JqZWN0W2ldOworICAgICAgICBzdW0gKz0g
djsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxl
dCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgdmFyIG8gPSB7IGxlbmd0aDogMTAwIH07Cisg
ICAgQXJyYXkucHJvdG90eXBlLmZpbGwuY2FsbChvLCAxKTsKKyAgICBvLmEgPSAwOworICAgIG8u
YiA9IDI7CisgICAgdGVzdChvKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2Zvci1pbi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1ZjRlMGY0
NjAwMmVhODgwNDI0YTg4NGUyMmM0MGFjMjM4YWZlNWEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCkBAIC0w
LDAgKzEsMTcgQEAKK2Z1bmN0aW9uIHN1bShvKSB7CisgICAgbGV0IHN1bSA9IDA7CisgICAgZm9y
IChsZXQgcCBpbiBvKQorICAgICAgICBzdW0gKz0gb1twXTsKKyAgICByZXR1cm4gc3VtOworfQor
CitmdW5jdGlvbiBvcGFxdWVTZXQobykgeworICAgIG8ueiA9IDM7Cit9CisKK2xldCBvYmplY3Qg
PSB7IHg6IDEsIHk6IDIgfTsKK29wYXF1ZVNldChvYmplY3QpOworZm9yIChsZXQgaSA9IDA7IGkg
PCAxZTU7ICsraSkgeworICAgIGlmIChzdW0ob2JqZWN0KSAhPT0gNikKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJiYWQgc3VtIik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9mb3ItaW4tc3RyaW5nLWFycmF5LmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9y
LWluLXN0cmluZy1hcnJheS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzI3NGZiYzEzOTAyYTY5MWEyMjhlZTdm
YzYzZjc1MDJlYjhhOGFjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFy
a3MvZm9yLWluLXN0cmluZy1hcnJheS5qcwpAQCAtMCwwICsxLDEwIEBACitmdW5jdGlvbiB0ZXN0
KG9iamVjdCkgeworICAgIHN1bSA9ICIiOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAg
ICAgICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0
KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0KEFycmF5KDEwMCku
ZmlsbCgiYSIpKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1vZi1p
dGVyYXRlLWFycmF5LW1hcC1zZXQuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3Itb2Yt
aXRlcmF0ZS1hcnJheS1tYXAtc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1ZDRhMDI0NDI4OWM3MmVhYzhh
NmFiMzJkMDk3MGY1ODJmZWY1NjYKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1hcnJheS1tYXAtc2V0LmpzCkBAIC0wLDAgKzEsMjYgQEAK
K2Z1bmN0aW9uIHN1bShvYmopIHsKKyAgICBsZXQgcmVzdWx0ID0gMDsKKyAgICBmb3IgKGxldCB4
IG9mIG9iaikgeworICAgICAgICBpZiAodHlwZW9mIHggPT0gIm51bWJlciIpCisgICAgICAgICAg
ICByZXN1bHQgKz0geDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ICs9IHhbMF07
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9Citub0lubGluZShzdW0pOworCitsZXQgYXJy
YXkgPSBbMSwyLDMsNCw1XTsKK2xldCBzZXQgPSBuZXcgU2V0KGFycmF5KTsKK2xldCBtYXAgPSBu
ZXcgTWFwKGFycmF5Lm1hcCh4ID0+IFt4LCB4XSkpOworbGV0IGdlbmVyYXRvciA9IGZ1bmN0aW9u
KiAoYXJyYXkpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgKytpKQor
ICAgICAgICB5aWVsZCBhcnJheVtpXTsKK30KKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsr
aSkgeworICAgIGlmIChzdW0oc2V0KSAhPT0gMTUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigp
OworICAgIGlmIChzdW0oZ2VuZXJhdG9yKGFycmF5KSkgIT09IDE1KQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1hcnJheS1t
b2RlLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKaW5kZXggOTAwMmI5
NDBhZDU5NmI3NTQ4MWYwMjU0MGU1MGFjOWU5Y2JiNTA4OC4uM2QyZGE2MzlkODEwZjhhYjk3YTNl
MjY5ZmFlMTA3MjEwYjVjZTc1YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFy
cmF5LW1vZGUuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKQEAg
LTI2LDggKzI2LDkgQEAKIHZhciBmdW5jQXJnQW5kQm9keVN0ciA9CiAiKGFycikgeyIgKyAiXG4i
ICsKICIgICAgdmFyIHN1bSA9IDA7IiArICJcbiIgKwotIiAgICBmb3IgKHZhciBpIGluIGFyciki
ICsgIlxuIiArCisiICAgIGZvciAodmFyIGkgaW4gYXJyKSB7IiArICJcbiIgKwogIiAgICAgICAg
c3VtICs9IGFycltpXTsiICsgIlxuIiArCisiICAgIH0gIiArCiAiICAgIHJldHVybiBzdW07IiAr
ICJcbiIgKwogIn0iOwogCkBAIC03NSw2ICs3Niw3IEBAIGZ1bmN0aW9uIHRlc3QobmFtZSwgZGF0
YSkgewogCiAgICAgICAgIGlmICgoYWN0dWFsICE9IGV4cGVjdGVkKSAmJiAoYWN0dWFsICE9IHBy
ZXZpb3VzUmVzdWx0KSkgewogICAgICAgICAgICAgcHJpbnQoIkZBSUw6ICIgKyBuYW1lICsgIjog
ZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZCArICIsIGFjdHVhbDogIiArIGFjdHVhbCArICIsIHN0YXJ0
aW5nIEAgbG9vcCBpdGVyYXRpb24gIiArIGkpOworICAgICAgICAgICAgJHZtLmJyZWFrcG9pbnQo
KTsKICAgICAgICAgICAgIHByZXZpb3VzUmVzdWx0ID0gYWN0dWFsOwogICAgICAgICAgICAgZmFp
bGVkID0gdHJ1ZTsKICAgICAgICAgICAgIG51bWJlck9mRmFpbHVyZXMrKzsKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMgYi9KU1Rlc3Rz
L3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCmluZGV4IDgzMTE1YjQ5NzNj
ODM3Y2E2ZDNmZjA2ZWE2ZmYxMzFjMzQ1MTFlNjIuLjA5ZjgxZDk1NjUzYmFhMTUwNmU1ZGRhMDYy
ZmEyZTM1ZjE1OGJmMzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJl
YXNzaWduZWQtbGF0ZXIuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3Np
Z25lZC1sYXRlci5qcwpAQCAtMTQsNSArMTQsNSBAQCBub0lubGluZShmb28pOwogZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3VsdCA9IGZvbyh7MDowLCAxOjEs
IGE6MiwgYjozfSk7CiAgICAgaWYgKHJlc3VsdCAhPSA3KQotICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJl
c3VsdDogIiArIHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4t
ZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRl
LWR1cmluZy1pdGVyYXRpb24uanMKaW5kZXggNWFkMzU2NmZkMGQzNjEwMjVhMWU1ZjMzNjVkMGJh
ZDM3NGQ1MTIwMi4uZDExNDY5MzFiMTQ3NWQ4OGM0NzM5NDllYWRhMmRkYTBmZDM5MzBhNSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpz
CisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcwpA
QCAtMTIsOCArMTIsOSBAQAogICAgIH07CiAgICAgbm9JbmxpbmUoZm9vKTsKICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAgaWYgKGZvbygpICE9PSAiMTIzNSIp
Ci0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IGZvbygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAiMTIzNSIpCisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQgZ290OiAiICsgcmVzdWx0KTsKICAgICB9
CiAgICAgZm9vKG51bGwpOwogfSkoKTsKQEAgLTM2LDggKzM3LDkgQEAKICAgICB9OwogICAgIG5v
SW5saW5lKGZvbyk7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0gICAg
ICAgIGlmIChmb28oKSAhPT0gInh6IikKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFk
IHJlc3VsdCIpOworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgICAgIGlmIChyZXN1
bHQgIT09ICJ4eiIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIg
KyByZXN1bHQpOwogICAgIH0KIH0pKCk7CiAoZnVuY3Rpb24oKSB7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3N0cmVzcy9mb3ItaW4tcHJpbWl0aXZlLWluZGV4LW9uLXByb3RvdHlwZS5qcyBiL0pTVGVz
dHMvc3RyZXNzL2Zvci1pbi1wcmltaXRpdmUtaW5kZXgtb24tcHJvdG90eXBlLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRlYTNkMjkzNDIxYmYzNDg2OTFlZjcwYzk2OTViNjg5YzU5YWZiZmQKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcHJpbWl0aXZlLWluZGV4LW9uLXByb3RvdHlw
ZS5qcwpAQCAtMCwwICsxLDIzIEBACitmdW5jdGlvbiB0ZXN0KHYpIHsKKyAgICBsZXQgc3VtID0g
MDsKKyAgICBmb3IgKHZhciBwIGluIHYpCisgICAgICAgIHN1bSArPSB2W3BdOworICAgIHJldHVy
biBzdW07Cit9CisKK051bWJlci5wcm90b3R5cGVbMl0gPSA0OworZm9yIChsZXQgaSA9IDA7IGkg
PCAxZTU7ICsraSkgeworICAgIGlmICh0ZXN0KDApICE9PSA0KQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoKTsKK30KKworU3RyaW5nLnByb3RvdHlwZVsyXSA9IDU7Citmb3IgKGxldCBpID0gMDsg
aSA8IDFlNTsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IHRlc3QoIiIpOworICAgIGlmIChyZXN1
bHQgIT09IDUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworCisgICAgcmVzdWx0ID0gdGVz
dCgiYSIpOworICAgIGlmIChyZXN1bHQgIT09ICIwYTUiKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcyBiL0pT
VGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwppbmRleCAyZTRkNmI4NDJhMjQyZWI3MTU5ODYw
MGVlNTI4YWUxNGI5Yzg5Y2U0Li42ODk2MDk4MTg1MWVlMzQ0ZTNhYTdmNTMyMzE1MWIyMjUxZjY1
ZDkwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMuanMKKysrIGIvSlNU
ZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCkBAIC0xMDUsNiArMTA1LDcgQEAgZnVuY3Rpb24g
c2hvdWxkVGhyb3dTeW50YXhFcnJvcihzY3JpcHQpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiYmFkIHJlc3VsdCIpOwogICAgIH0KIH0pKCk7CisKIChmdW5jdGlvbigpIHsKICAgICB2
YXIgZm9vID0gZnVuY3Rpb24oYSwgYikgewogICAgICAgICBmb3IgKHZhciBwIGluIGIpIHsKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1p
bi1sb29wLWNvcnJlY3RuZXNzLmpzIGIvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1z
dHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMKaW5kZXggOTljNTlhYzEwNTY4Y2U4
YTc5MDg1MjI5ODIwNmZkYzdlMGUwZjg5Yy4uZTBhZGUwNzFhMmU0YjhkMDI3OGQ5NWNjOTMzZTI0
ZjE4YmJlZTA1OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1z
dHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
aGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMKQEAg
LTEzMiw3ICsxMzIsMTAgQEAgZnVuY3Rpb24gdGVzdDUoKSB7CiAgICAgby5fX3Byb3RvX18gPSBw
OwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKLSAgICAgICAgYXNzZXJ0
KGNvdW50KG8pID09PSAwKTsKKyAgICAgICAgdmFyIGMgPSBjb3VudChvKTsKKyAgICAgICAgaWYg
KGMpCisgICAgICAgICAgICBwcmludChjKTsKKyAgICAgICAgYXNzZXJ0KGMgPT09IDApOwogICAg
IH0KIH0KIHRlc3Q1KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435008</attachid>
            <date>2021-08-05 10:57:08 -0700</date>
            <delta_ts>2021-08-05 13:36:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227989-20210805135706.patch</filename>
            <type>text/plain</type>
            <size>389190</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTUxZmJmZTMzNzc1YjQ4ZmUxMTczOWVmOGJhN2NkZWUwZmMyNGJlLi40OWExNmNhZmI2ZTI2ODMx
ZjgyMmRkOGFjNTM0ZmM1NDU3NDI3Y2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzMgQEAKKzIwMjEtMDgtMDUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgIFRoZXJlIGFyZSBmb3VyIG5ldyBvcGNvZGVzIHRoaXMg
cGF0Y2ggYWRkcywgd2hpY2ggcmVwbGFjZSB0aGUgdmFyaW91cyBvcGVyYXRpb25zIHdlIGhhZCBm
b3IgdGhlIHNwZWNpYWxpemVkIGxvb3BzIHByZXZpb3VzbHkuIFRoZSBuZXcgb3Bjb2RlcyBhcmUg
RW51bWVyYXRvckdldEJ5VmFsLCBFbnVtZXJhdG9ySW5CeVZhbCwgRW51bWVyYXRvckhhc093blBy
b3BlcnR5LCBhbmQgRW51bWVyYXRvck5leHQuIFRoZSBmaXJzdCB0aHJlZSBjb3JyZXNwb25kIHRv
IEdldEJ5VmFsLCBJbkJ5VmFsLCBhbmQgSGFzT3duUHJvcGVydHkgcmVzcGVjdGl2ZWx5LiBUaGUg
RW51bWVyYXRvck5leHQgb3Bjb2RlIGhhcyB0aHJlZSByZXN1bHRzIGluIGJ5dGVjb2RlLCB0aGUg
bmV4dCBlbnVtZXJhdGlvbiB2YWx1ZSdzIG1vZGUsIHRoZSBpbmRleCBvZiB0aGUgcHJvcGVydHkg
bmFtZSwgYW5kIHRoZSBwcm9wZXJ0eSBuYW1lIHN0cmluZyBpdHNlbGYuIFdoZW4gZW51bWVyYXRp
b24gaXMgZG9uZSBFbnVtZXJhdG9yTmV4dCByZXR1cm5zIEpTIG51bGwgYXMgdGhlIHByb3BlcnR5
IG5hbWUgc3RyaW5nLiBTaW5jZSB0aGUgREZHIGRvZXNuJ3Qgc3VwcG9ydCB0dXBsZXMgeWV0IHRo
aXMgb3Bjb2RlIGlzIHNwaWx0IGludG8gZm91ciBuZXcgbm9kZXMuIFRoZSBmaXJzdCBjb21wdXRl
cyB0aGUgdXBkYXRlZCBpbmRleCBhbmQgbW9kZSBmb3IgdGhlIG5leHQgZW51bWVyYXRpb24ga2V5
LCB3aGljaCBpcyBlbmNvZGVkIGludG8gYSBzaW5nbGUgSlMgbnVtYmVyLiBUaGVuIHRoZXJlIGFy
ZSB0d28gbm9kZXMgdGhhdCBleHRyYWN0IHRoZSBtb2RlIGFuZCBpbmRleC4gRmluYWxseSwgdGhl
IGxhc3QgbmV3IG5vZGUgcHJvZHVjZXMgdGhlIHByb3BlcnR5IG5hbWUgc3RyaW5nIG9yIG51bGwg
YmFzZWQgb24gdGhlIGV4dHJhY3RlZCBtb2RlIGFuZCBpbmRleC4KKworICAgICAgICBTaW5jZSwg
aW4gbW9zdCBiZW5jaG1hcmtzLCBhbnkgZ2l2ZW4gZW51bWVyYXRpb24gb3Bjb2RlIHRlbmRzIHRv
IHByb2ZpbGUgZXhhY3RseSBvbmUgZW51bWVyYXRpb24gbW9kZS4gVGhpcyBwYXRjaCBmb2N1c2Vz
IHByaW1hcmlseSBvbiByZWltcGxlbWVudGluZyBhbGwgdGhlIG9wdGltaXphdGlvbnMgd2UgaGF2
ZSBmb3IgYW55IG9uZSBzcGVjaWZpYyBtb2RlLiBUaGlzIG1lYW5zIHRoZXJlIGFyZSBzdGlsbCBw
b3RlbnRpYWwgb3B0aW1pemF0aW9ucyBmb3IgdGhlIG11bHRpLW1vZGUgZmxhdm9ycyBvZiBlYWNo
IG5ldyBvcGNvZGUuCisKKyAgICAgICAgVGhlIG1haW4gb3B0aW1pemF0aW9ucyBpbXBsZW1lbnRl
ZCBmb3IgZWFjaCBuZXcgb3Bjb2RlIGFyZToKKworICAgICAgICBFbnVtZXJhdG9yTmV4dDoKKyAg
ICAgICAgMSkgSW5kZXhlZE1vZGUgbG9vcHMgYXJlIGxvYWRlZCBhbmQgY2hlY2tlZCBmb3IgcHJl
c2VuY2UgaW5saW5lIChERkcvRlRMKS4KKyAgICAgICAgMikgTmFtZWRNb2RlIGlzIGNvbXB1dGVk
IGlubGluZSBhcyBsb25nIGFzIHRoZSBjYWNoZWQgc3RydWN0dXJlIG9uIHRoZSBlbnVtZXJhdG9y
IGNlbGwgbWF0Y2hlcyB0aGUgYmFzZSAoQmFzZWxpbmUrKS4gVGhpcyBjYW4gb25seSBkaWZmZXIg
aWYgdGhlcmUncyBhIHRyYW5zaXRpb24uCisgICAgICAgIDMpIHByb3BlcnR5IG5hbWVzIGFyZSBl
eHRyYWN0ZWQgZnJvbSB0aGUgY2FjaGVkIGJ1ZmZlciBpbmxpbmUgKEJhc2VsaW5lKykuCisKKyAg
ICAgICAgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBFbnVtZXJhdG9ySW5CeVZhbDoKKyAg
ICAgICAgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICAxKSBJbmRleGVkTW9kZSBo
YXMgYWxsIHRoZSBvcHRpbWl6YXRpb25zIG9mIGEgbm9ybWFsIFhCeVZhbCBvbiBpbmRleGVkIHBy
b3BlcnRpZXMgKERGRy9GVEwpLgorICAgICAgICAyKSBOYW1lZE1vZGUgd2lsbCBleHRyYWN0IHRo
ZSB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBpbmxpbmUvb3V0LW9mLWxpbmUgb2Zmc2V0IGlmIHRo
ZSBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgZW51bWVyYXRvcidzIChCYXNlbGluZSspLgorCisgICAg
ICAgIFRoZXJlIGFyZSBhbHNvIGEgZmV3IGludGVyZXN0aW5nIGNoYW5nZXMgd29ydGggbWVudGlv
bmluZyBoZXJlOgorICAgICAgICAxKSBJZiBhIGZvci1pbiBsb29wIHdvdWxkIHByb2R1Y2UgYW4g
ZW1wdHkgZW51bWVyYXRvciB3ZSBub3cgYWx3YXlzCisgICAgICAgIHJldHVybiB0aGUgVk1zIGVt
cHR5IGVudW1lcmF0b3IuIFRoaXMgaGFzIHR3byBiZW5lZml0cywgbW9zdCBpbXBvcnRhbnRseSwg
aXQgZGlzdGluZ2lzaGVzIGJldHdlZW4gYW4gdW5wcm9maWxlZCBmb3ItaW4gbG9vcCBhbmQgZW1w
dHkgZW51bWVyYXRpb24sIHdoaWNoIHByZXZlbnRzIE9TUiBleGl0IGxvb3BzLiBBbHNvLCBpdCBt
ZWFucyB0aGF0IHRoZSB2YXJpb3VzIEVudW1lcmF0b3Igb3Bjb2RlcyBubyBsb25nZXIgbmVlZCB0
byBoYW5kbGUgdW5kZWZpbmVkL251bGwgd2hlbiBgdG9PYmplY3RgaW5nIHRoZSBiYXNlIHZhbHVl
LgorCisgICAgICAgIDIpIFRoZSBlbnVtZXJhdG9yIG5vdyBjb250YWlucyBhIGJpdCBzZXQgb2Yg
YWxsIHRoZSBtb2RlcyBpdCB3aWxsIHByb2R1Y2UuIFRoaXMgcmVtb3ZlcyBhIGZldyBleHRyYSBi
cmFuY2hlcyB3aGVuIHNwZWN1bGF0aW5nIG9uIHRoZSBtb2RlcyB3ZSB3aWxsIHNlZSBpbiBFbnVt
ZXJhdG9yTmV4dC4KKworICAgICAgICAzKSBJbiB0aGUgREZHLCBlbnVtZXJhdG9yIEdldEJ5VmFs
IHJlbGllcyBvbiBjb21waWxlR2V0QnlWYWwgdG8gc2V0IHRoZSByZXN1bHQgaXQgYWxzbyBwYXNz
ZXMgYSBwcmVmaXggY2FsbGJhY2sgd2hpY2ggZW1pdHMgY29kZSBhZnRlciB0aGUgdmFyaW91cyBj
YXNlcyBzZXQgdXAgdGhlaXIgb3BlcmFuZHMgYnV0IGJlZm9yZSBjb2RlIGlzIGVtaXR0aW5nIHRv
IGhlbHAgc2F0aXNmeSB0aGUgYnJhbmNoIG92ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2YWxpZGF0
aW9uLiBBbHNvLCB0aGUgYXJyYXkgbW9kZSBicmFuY2ggaW4gY29tcGlsZUdldEJ5VmFsIHBhc3Nl
cyB0aGUgZGF0YSBmb3JtYXQgdGhhdCBpdCB3b3VsZCBwcmVmZXIsIHdoaWNoIGZvciBub3JtYWwg
R2V0QnlWYWwgaXMgcmV0dXJuZWQuIEZvciBFbnVtZXJhdG9yR2V0QnlWYWwsIHRoYXQgcHJlZmVy
ZW5jZSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYW5kIGl0IGFsd2F5cyByZXR1cm5zIERhdGFGb3Jt
YXRKUy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpvcjgpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBidWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGJ5dGVjb2RlL09w
Y29kZS5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9y
SW5Mb29wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvck5leHQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZSk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6
cmV3cml0ZU9wKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5kRm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5G
b3JJbkxvb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEdldEVudW1lcmFibGVMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
SGFzRW51bWVyYWJsZVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5
TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEluZGV4ZWRGb3JJblNjb3BlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hTdHJ1Y3R1cmVGb3JJ
blNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0
cnVjdHVyZUZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvcklu
Q29udGV4dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aW52YWxpZGF0
ZSk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bG9jYWwgY29uc3QpOgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OnByb3BlcnR5TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNv
bnRleHQ6OmVudW1lcmF0b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6Om1v
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OkZvckluQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Ym9keUJ5dGVjb2RlU3RhcnRPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzSW5kZXhlZEZvckluQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzSW5kZXhl
ZEZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6YXNT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6aW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnByb3BlcnR5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjplbnVtZXJhdG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpiYXNlVmFyaWFi
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6
OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ6OmFkZEluSW5zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29u
dGV4dDo6YWRkSGFzT3duUHJvcGVydHlKdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5k
ZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6YWRkR2V0SW5zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Okhhc093
blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNTYW5lQ2hhaW4g
Y29uc3QpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUp
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAg
ICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0
eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc1N0b3JhZ2VDaGlsZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
c3RvcmFnZUNoaWxkSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzRW51bWVyYXRvck1ldGFkYXRhIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjplbnVtZXJhdG9yTWV0YWRhdGEpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBTG93ZXJpbmdQaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRS
ZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3ltYm9sKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4
dEV4dHJhY3RJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFz
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51
bWVyYXRvckluQnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9w
ZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVUb0luZGV4U3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVtZXJh
dG9yUG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0RGlyZWN0UG5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VP
cGVyYW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJh
bmQ6On5TdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6
OmVtcGxhY2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVy
YXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNW
YWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRp
ZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVj
a0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAq
IGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUdldEJ5VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGZ0
bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFkZEluY29taW5nVG9Q
aGlJZlNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklU
T3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1l
cmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9k
aXJlY3RfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxl
X2luZGV4ZWRfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRC
eVZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2lu
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25f
cHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAg
ICogcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHA6CisgICAgICAgIChKU0M6OkZpbGVC
YXNlZEZ1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRp
bWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6RmlsZUJhc2Vk
RnV6emVyQWdlbnRCYXNlOjpvcGNvZGVBbGlhc0Zvckxvb2t1cEtleSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpp
bml0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRl
TmV4dCk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9Q
cmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwOgorICAgICAgICAoSlNDOjpQcmVk
aWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRlcm5hbCk6CisK
IDIwMjEtMDgtMDUgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAK
ICAgICAgICAgR0NDIDExIGJ1aWxkcyBzaG91bGQgdXNlIC1Xbm8tYXJyYXktYm91bmRzLCAtV25v
LW5vbm51bGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggN2I3ZDg0MTM0YTc0MDk5ZDJmYjE3NDM3MzViNjNmOGFj
NWY0OTE2Zi4uY2RlMzI3MGJhNjQwNmY1MmU5ZDQxYTJlZGFmYjk0NzhkOTNiZDM0YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgKQEAgLTEwNjksNiArMTA2OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0
YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJ
RCBzcmMsIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRk
cmVzcy5tX3B0ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsK
KyAgICAgICAgb3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICBzdG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQor
CiAgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3Mp
CiAgICAgewogICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1t
ZWRpYXRlOjpjcmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNDM1
Njg4ODhmYmYwNjUwNWNhZjE3OTA3NjE1MzNlN2E5Mjk2NGUzNS4uMTdiYjY2NGQ0YzBlNmU5YzJi
OTMwZWExMDZlOGFiMTEyZDRmYTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYy
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZv
aWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVy
KCkpOworICAgICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAg
fQorCiAgICAgdm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpA
QCAtNjY1LDYgKzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShz
dGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBv
cjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcigp
KTsKKyAgICAgICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0K
KwogICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4
IDk0MzdmZDNiZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlm
YzlhNTU5ZWNhNmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkp
KTsKICAgICB9CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1f
cHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0
Y2hSZWdpc3RlcigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1t
LCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lz
dGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4
IGIwMmU1NjAyMTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThm
MTgwMjkyY2JhOGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBtYWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRl
UHJpdmF0ZVN5bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxp
bmVSZWFjdGlvbkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAor
ICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3lt
Ym9scyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgppbmRleCAxODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5
NTIzNTczYWQxMmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMg
WwogICAgIDpEZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0
aEV4dGVuc2lvbiwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwK
ICAgICA6R2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1
NCw4OSArMTE1NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2lj
QmxvY2tMb2NhdGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2Vu
dW1lcmFibGVfbGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6
IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxS
ZWdpc3RlciwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAor
b3AgOmVudW1lcmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJl
Z2lzdGVyLAorICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdp
c3RlciwKKyAgICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAj
IFdpbGwgYWx3YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgor
ICAgICAgICBpbmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVy
eSB0aW1lIG1vZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFs
UmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVu
dW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRh
dGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1
Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmly
dHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAg
fQotCi1vcCA6aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAg
ICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAot
ICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBW
aXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAg
IGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJh
YmxlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1
YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0
b3JfZ2V0X2J5X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVy
LAogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJv
cGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVy
YXRvck1ldGFkYXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3Ag
OmVudW1lcmF0b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDpl
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmly
dHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAg
ICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
ZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRh
dGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitv
cCA6ZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0
OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxS
ZWdpc3RlciwKICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTog
RW51bWVyYXRvck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2
MTg5OWE2MjA5ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlh
OTZkOTQ4NTc1MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVy
LCBjb25zdCBJbnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMo
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVM
ZW5ndGgsIGJhc2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BO
ZXdHZW5lcmF0b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBz
Y29wZSkKLSAgICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0
ZUxleGljYWxFbnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAg
ICAgVVNFUyhPcENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xU
YWJsZSwgaW5pdGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAt
MjIxLDExICsyMTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRG
cm9tQXJndW1lbnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11
dGFibGVCdXR0ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFi
bGVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSwgZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmlj
UG5hbWUsIGVudW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJv
cGVydHkpCiAgICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBV
U0VTKE9wUHV0UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsy
NTgsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0
aFRoaXMsIGJhc2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZD
dXN0b20sIHZhbHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9w
SGFzT3duU3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAg
IFVTRVMoT3BJblN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikK
IAogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lk
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVn
aXN0ZXIsIGNvbnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhP
cEdldERpcmVjdFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAg
ICBVU0VTKE9wU3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIs
IHNjcnV0aW5lZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiAr
Mjg0LDExIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFy
Z3VtZW50KQogCisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwg
ZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBw
cm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBV
U0VTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUs
IGluZGV4LCBlbnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5
bWJvbENhbGwsIGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUp
OwpAQCAtNDI0LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleElt
cGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICBy
ZXR1cm47CiAgICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRo
ZSBmaXJzdCBhcmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERF
RlMoT3BUb0luZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgs
IGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAg
IERFRlMoT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9w
SGFzRW51bWVyYWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVBy
b3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBE
RUZTKE9wR2V0RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yLCBkc3QpCi0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAg
IERFRlMoT3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVu
dFNjb3BlLCBkc3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9w
Q3JlYXRlTGV4aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3du
VmFsdWUpCiAKKyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwg
aW5kZXgpCisgICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BF
bnVtZXJhdG9ySW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHksIGRzdCkKKwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYx
MDYwNTI1ZTM3ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODlj
NmU5NGQyMGU1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCkBAIC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAg
bV9ieXRlY29kZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRj
aCAob3Bjb2RlSUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpCi0KICAgICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5L
KE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3
YXJkQXJndW1lbnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElO
SyhPcEdldFByaXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQ
bmFtZSwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkK
ICAgICAgICAgTElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRC
eUlkRGlyZWN0LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGluawogCiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJ
TksoT3BFbnVtZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJ
bkJ5VmFsLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5
LCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQor
CiAgICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGws
IHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5
ODhhODYxZGIxNWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzky
ZmM0NTY3YWFmNDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xv
YmFsT2JqZWN0OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Q
cm9wZXJ0eUZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBu
dWxscHRyKSBcCisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwK
IAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0
MzBhMWQzMjRiNjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUy
YTk2ZDY4ZDBkMWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0
aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNy
byhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFy
YXJncykgXAogICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBu
YW1lKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdl
dEJ5SWQpIFwKICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5
R2V0QnlJZCkgXApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAg
ICAgbWFjcm8oT3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BU
YWlsQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykg
XApAQCAtMTM2LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRo
Rm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3Jv
KE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5
VmFsRGlyZWN0KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9w
RW51bWVyYXRvckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAor
ICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFj
cm8oT3BOZXdBcnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2Uy
MjZjOTUyMmY3YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJk
YmQ0YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25l
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3Bl
cnR5KFJlZ2lzdGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwog
fQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0
eUluRm9ySW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpyZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29u
dGV4dCwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghZ2VuZXJpY1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFz
T3duUHJvcGVydHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7Cisg
ICAgY29udGV4dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0
aC5sb2NhdGlvbigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9w
ZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0
cnVjdHVyZUZvckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3Ry
dWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVy
ZUZvckluQ29udGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bj
b2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250
ZXh0LmVudW1lcmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1f
bGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9w
RW51bWVyYXRvckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJh
c2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBj
b250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdElu
c3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBk
c3Q7CiAgICAgfQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2Us
IFIKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVk
Rm9ySW5Db250ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAo
T3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRo
aXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVt
aXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAo
T3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRo
aXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVt
aXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENv
bnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmlu
ZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFdlIGNhbm5vdCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJl
Y3RQbmFtZSA9PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFk
YXRhIElEIGFsbG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0
dXJlQ29udGV4dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAg
T3BHZXREaXJlY3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0
KSwgYmFzZSwgcHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29u
dGV4dC5lbnVtZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5z
dChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhh
dCBjYW4gcmVzaXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8
T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgp
LCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3Io
KSk7CisgICAgICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQo
KSwgcHJvcGVydHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAt
NDU1MiwzMyArNDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEdsb2JhbFByaXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBl
bWl0R2V0RnJvbVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVu
Z3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1l
cmFibGVMZW5ndGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQot
Ci1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0
KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1S
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHBy
b3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVy
SUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1
cm4gZHN0OworICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBt
b2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewot
ICAgIE9wSGFzRW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVy
dHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQotewotICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBi
YXNlLCBwcm9wZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blBy
b3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwg
ZW51bWVyYXRvcik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9y
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1l
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5k
ZXgpCi17Ci0gICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBl
bnVtZXJhdG9yLCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewot
ICAgIE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3Is
IGluZGV4KTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRl
eCkKLXsKLSAgICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAg
cmV0dXJuIGRzdDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0Nl
bGxXaXRoVHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUp
CiB7CiAgICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBA
IC00NjQ4LDIzICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJ
c0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7
CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdp
c3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAg
IGlmICghbG9jYWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5D
b250ZXh0U3RhY2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2Nh
bFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0K
LQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJ
RCogbG9jYWxSZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJl
dHVybjsKLSAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvcklu
Q29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2Rl
RW5kT2Zmc2V0KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGlj
YWxFbnZpcm9ubWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dG
dW5jdGlvbkNvbnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6
OkV4dGVuZHMgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VN
b2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAg
LTQ3NjgsMjAgKzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNU
b0Fycm93RnVuY3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxl
PiBiYXNlVmFyaWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShS
ZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvclJlZ2lzdGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFy
aWFibGU+IGJhc2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAg
IHJldHVybjsKICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0
aW9ucygpLnNpemUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigq
bmV3IFN0cnVjdHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBw
cm9wZXJ0eVJlZ2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5
dGVjb2RlU3RhcnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRv
cHRSZWYoKm5ldyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0
ZXIsIHByb3BlcnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lz
dGVyLCBiYXNlVmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAg
ICByZXR1cm47CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVy
ZUZvckluQ29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5
dGVjb2RlRW5kT2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxp
emUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAg
IG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzEx
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJ
RCogc3JjKQogICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1w
b3JhcnkoKSwgc3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsK
IH0KIAotdm9pZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJv
ZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZv
ckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYK
LSAgICAvLyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAg
Ly8KLSAgICAvLyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVk
IHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0
aW9uIHZhcmlhYmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5j
dGlvbi4KLSAgICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2ll
bnRseSByYXJlbHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAi
YW5hbHlzaXMiIHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8g
ZG8gdGhpcywgd2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxv
dy1zZW5zaXRpdmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZh
cmlhYmxlIHdhcwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8g
cnVudGltZSBjaGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJl
YXNzaWduZWQgZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9m
ZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVj
dGlvbi0+aXM8T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50
ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewot
ICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
LSAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFu
ZCkKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1l
IFR1cGxlVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5z
dEluZGV4ID0gc3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAg
QUxXQVlTX0lOTElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBUdXBsZVR5cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgog
ICAgIC8vIDMuIHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5
LgogCi0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVj
dFBuYW1lPjo6dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZh
bCkgPD0gc2l6ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1p
dDxPcGNvZGVTaXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29k
ZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNl
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3Bl
cnR5Pjo6dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8
PSBzaXplb2YoT3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1p
dDxPcGNvZGVTaXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29k
ZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoTmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBl
OjplbWl0KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSBy
ZW1haW5pbmcgYnl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkg
PCBlbmQpCiAgICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRv
cik7CiB9CiAKLXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2Nr
LCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6Zmlu
YWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAg
IEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZz
ZXQpOwotICAgIGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBG
b3JJbkNvbnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlm
CisgICAgLy8gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAg
IC8vCisgICAgLy8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25l
ZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJh
dGlvbiB2YXJpYWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVu
Y3Rpb24uCisgICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNp
ZW50bHkgcmFyZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8g
ImFuYWx5c2lzIiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRv
IGRvIHRoaXMsIHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZs
b3ctc2Vuc2l0aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2
YXJpYWJsZSB3YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRv
IHJ1bnRpbWUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyBy
ZWFzc2lnbmVkIGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0g
ZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dCgpOyAhZXNjYXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAg
ICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0
KTsKKyAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAg
IGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2tw
b2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+
dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBl
ZCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0g
aW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RP
cGNvZGVJRDsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rp
b24gPSBnZW5lcmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RUdXBsZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBu
YW1lPihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0
b3JHZXRCeVZhbCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9y
IChjb25zdCBhdXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxP
cEluU3RydWN0dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3
cml0ZU9wPE9wRW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVw
bGUpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEpt
cCkgPD0gc2l6ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3Ry
dWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBVbmxpbmtlZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAg
ICBCYXNlOjpmaW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zm
c2V0KTsKLSAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0
SW5kZXggPSBpbnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBp
bnN0UGFpci5zZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4
KS0+Y2FzdDxPcEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHlSZWdJbmRleCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0K
LX0KLQogdm9pZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8q
IGluc3RydWN0aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAs
MTQgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6
OmVtaXQodGhpcywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3Ry
dWN0dXJlRm9ySW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmZpbmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9y
IChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAg
ICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwog
ICAgICAgICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAg
IHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2Nj
YzdjZmRiNjg0ZGFlNTk5MTQuLmY1NGQ4NGZlZGUyM2Y1OWZhN2ExMzk0ODk4ZmVlZjFkNDM4ZjU0
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBKU0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAg
IGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250
ZXh0OworICAgIGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlv
biB7CiAgICAgICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVk
PEZvckluQ29udGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHZpcnR1YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlk
YXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6
IHVpbnQ4X3QgewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0
dXJlRm9ySW4KLSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3Ry
dWN0dXJlRm9ySW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRG
b3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9y
SW5Db250ZXh0KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4
ZWRGb3JJbkNvbnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZv
ckluQ29udGV4dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxSZWdpc3Rlci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRl
eHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVn
aXN0ZXIpCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0K
LQotICAgICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXpl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0
cnVlIH07Ci0gICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRl
Y29kZVN0YXJ0T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29u
dGV4dDsKICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVu
c2lnbmVkLCBpbnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1
c2luZyBIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWdu
ZWQ+OwogCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFy
aWFibGU+IGJhc2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0g
ICAgICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVG
b3JJbiwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdp
c3RlcihpbmRleFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJv
cGVydHlSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVy
YXRvclJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUp
Ci0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzVmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQg
PSBmYWxzZTsgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxSZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklE
KiBwcm9wZXJ0eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7
IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51
bWVyYXRvci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlLmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+
JiBiYXNlVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAg
ICAgIHZvaWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0lu
ZGV4KQpAQCAtMzM4LDM3ICsyODQsMzQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
X2hhc093blByb3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsg
YnJhbmNoSW5zdEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAg
ICAgIEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVt
ZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUsIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBt
X2xvY2FsUmVnaXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5h
bWUocHJvcGVydHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5
T2Zmc2V0KQorICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAg
ICAgICwgbV9tb2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJp
YWJsZSkKKyAgICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNv
ZGVTdGFydE9mZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVj
b2RlU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0
OyB9CisKICAgICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7
Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IG1fcHJvcGVydHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9m
ZnNldDsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJs
ZT4gbV9iYXNlVmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOwor
ICAgICAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5
Qnl0ZWNvZGVTdGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOwor
ICAgICAgICBWZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093
blByb3BlcnR5SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAot
ICAgIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAg
ICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIElu
ZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCog
aW5kZXhSZWdpc3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAg
ICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5k
ZXhSZWdpc3RlcikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCog
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAg
ICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFk
ZEdldEluc3QodW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldElu
c3RzLmFwcGVuZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAg
VmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAg
ICAgc3RydWN0IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAg
SGFuZGxlclR5cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MiwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwog
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9sZE9wVHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4K
ICAgICAgICAgZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVU
eXBlJik7CiAKICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0
IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250
ZXh0KiBmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAg
ICAgICAgRm9ySW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Np
b25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZW5kRGl2b3QpOwpAQCAtOTE3LDcgKzg1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFi
ZWwmIHRhcmdldCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVn
aXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRl
SnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYg
dGFyZ2V0KTsKLSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9y
SW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFi
ZWwmIGdlbmVyaWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9y
SW5Mb29wKEZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1w
T3A+CiAgICAgICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExh
YmVsJiB0YXJnZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzAs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAg
dm9pZCBlbWl0Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwg
UmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0Vu
dW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQq
IGVudW1lcmF0b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJh
dG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1l
cmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5n
dGgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRv
cihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwg
UmVnaXN0ZXJJRCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklE
KiBlbWl0RW51bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgp
OworICAgICAgICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNl
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5k
ZXgsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJ
c0NlbGxXaXRoVHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2Vu
ZXJhdG9yVHlwZSk7IH0KQEAgLTEwNTcsMTAgKzk5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlz
RGVsZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMp
OwogCi0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2Fs
LCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUo
UmVnaXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3Bl
KFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVy
dHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2Up
OwotICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwp
OworICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3Rl
cklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBi
YXNlKTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAog
ICAgICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
ICAgIExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApp
bmRleCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3
YmQ2Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMx
LDI0IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdz
LT5tX2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1f
bGlzdE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2Fy
Z3MtPm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNS
ZXNvbHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRl
eHQgPSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAg
VmFyaWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1l
bnRWYXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBh
cmd1bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5l
cmF0b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRl
eHQgPSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAg
YXV0byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVj
dHVyZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAg
ICAgICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFz
ZSktPmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFs
dWUoKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8
UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJp
YWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAg
ICAgICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52
b2tlZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRo
aXN8IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7
Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9u
VHlwZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7
CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9u
VHlwZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBS
ZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5l
cmF0b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdl
dCgpLCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0
dXJlUHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0
Tm9kZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgp
LCBiYXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVu
dCksIGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0
ZXJJRCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQo
KSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5G
b3JJbkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsK
KyAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRl
eHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBD
YWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBn
ZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsK
QEAgLTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0
b3Iuc2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQt
Pmhhc0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChk
c3QsIGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7
CiAgICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6
OlNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0
aW1pemF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6
SXNOZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBA
IHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9y
Lmlnbm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVu
Z3RoOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxv
Y2FsID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+
IGJhc2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5
LDEzNyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxl
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5h
bWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAg
IH0KIAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2gg
Zm9yLi5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7
Ci0KICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNl
dCgpOwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQo
KSArIChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9
IGdlbmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERa
U3RhY2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2so
cHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAg
IHsKLSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2Nv
cGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVy
YWJsZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwot
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9
IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDAp
KTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5n
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0
LmdldCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
SWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQo
KSk7Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1l
LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9m
aWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNj
b3BlKGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRz
dCwgbV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUo
bG9jYWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93
KHByb2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9u
IGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAo
bG9vcFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdl
bmVyYXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3Ry
dWN0dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2Nv
cGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAg
UmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVy
YXRvckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
anNOdW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0
b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFi
ZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwot
Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdl
bmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0
b3IucHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5n
ZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAg
IGdlbmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7Cisg
ICAgICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
bW92ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50
OjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVx
dWFsaXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUo
cHJvcGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFt
ZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3Np
Z25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BF
bmQuZ2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZl
ZFREWlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAg
ICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVs
U2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdl
bmVyaWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBl
bnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9v
cFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1
YWxseSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdl
dF9ieV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlz
IG9wY29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5h
bWUuZ2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9y
LmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShy
ZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFy
Z2V0KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxw
cyBwbGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5n
dWlzaCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3Is
IHByb3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29u
dHJvbEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hG
b3JJblNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBl
bnVtZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BG
b3JJblNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpz
Y29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNh
bFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5h
bWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNz
aWdubWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5n
ZXQoKSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAg
IGdlbmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmlu
ZGV4IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjJjZWFkOTBlZmI1
NzRjODlmOWMwMmM0Y2Y5NjJmYzQ1NjkyMzE0OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIx
NTEsNyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRv
ckdldEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIGRv
IGNvZGUgbW90aW9uIGZvciBPd25TdHJ1Y3R1cmVNb2RlIGJ1dCB3ZSdkIG5lZWQgdG8gdGVhY2gg
QUkgYWJvdXQgdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgc3RydWN0dXJlIGZvciB0aGF0IHRvIGJl
IHByb2ZpdGFibGUuCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBtYWtlSGVhcFRv
cEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgR2V0QnlW
YWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoKQEAgLTIxNjQs
MTAgKzIxNzEsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgQXRvbWljc1hv
cjogewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkgewogICAgICAgICAgICAg
YXV0byBmb2xkR2V0QnlWYWxPbkNvbnN0YW50UHJvcGVydHkgPSBbJl0gKEVkZ2UmIGFycmF5RWRn
ZSwgRWRnZSYgaW5kZXhFZGdlKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBl
eHBhbmQgdGhpcyBmb3Igbm9uIHg4NiBlbnZpcm9ubWVudHMuCi0gICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQotICAgICAgICAg
ICAgICAgIGlmICghaXNYODYoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1ZSA9IGZvck5vZGUoYXJy
YXlFZGdlKTsKIApAQCAtNDI0NCwyNSArNDI0Nyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1p
CiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgICAgIAotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxl
bmd0aDogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25s
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0
eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwot
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
SW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5Ogot
ICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CisKKyAgICBjYXNlIEhh
c0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5
TW9kZSgpOwogICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgpAQCAtNDI4MSwyNiArNDI2Nyw1MyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
bG9iYmVyV29ybGQoKTsKLSAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewogICAg
ICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQ2VsbCk7CiAgICAgICAgIGNsb2JiZXJXb3Js
ZCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0
dXJlUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcik7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAg
ICAgaWYgKGFycmF5TW9kZS5pc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUpOworICAgICAgICBlbHNlIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgfHwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOworCisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7
CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50
OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSAmJiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCkudXNl
S2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVt
YmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3Ry
dWN0dXJlTW9kZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
RkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
OiB7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CiAgICAg
ICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOworCisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTogeworICAgICAgICAvLyBGSVhN
RTogV2UgY2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBi
YXNlZCBvbiBhYnN0cmFjdAorICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KKyAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKaW5kZXggMTExMWY4OWY5ZDdiNWI5Nzc3OGMxNmM4ZDU0NjQwYmVh
Mzc0NDJiMi4uYTAyNmFhZDE4OTNiZjIzYzU3MTk2ZmNjNmM5MWZjMjAwMDNjNDU2NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCkBAIC0yODksNiArMjg5LDExIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91
bmRzU2FuZUNoYWluOwogICAgIH0KIAorICAgIGJvb2wgaXNTYW5lQ2hhaW4oKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSB8fCBpc091dE9mQm91bmRz
U2FuZUNoYWluKCk7CisgICAgfQorCiAgICAgYm9vbCBpc091dE9mQm91bmRzKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyB8
fCBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCmluZGV4IGRiMzdmNGRkZGJmODBjZDY2ZWI1Nzg3ZDdiYWEyYmY1M2FmODkwNzYu
LjlkYmQwYjQ3ZDlkZmY0Y2Y2MDM4YWY1MDAxNzkzNDhiZTBhZWEyOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcApAQCAtMzkwLDcgKzM5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyAmIH5Ob2RlQnl0ZWNvZGVOZWVkc05lZ1plcm8pOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCisgICAgICAgIGNh
c2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAg
ICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29k
ZVVzZXNBc1ZhbHVlKTsKICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkt
Pm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNlc0FzTnVtYmVyIHwgTm9kZUJ5dGVjb2RlVXNlc0Fz
T3RoZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNJbnQgfCBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUlu
ZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKaW5kZXggYTI5NmM0Yjg3Yzg1ODg2NGZiZGVkZDc0ZWY3MjdlNTRkOTVmZDY5NC4uZjc2ODhl
ZDE0Mjg3ZGU1NDRiMGM4ODdmZmM4MmUxNmU2OTM0ZmVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTgzODcsMTAzICs4Mzg3LDEz
NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3ByaXZhdGVfYnJhbmQpOwogICAgICAgICB9CiAK
LSAgICAgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKLSAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0
aD4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChHZXRFbnVt
ZXJhYmxlTGVuZ3RoLCBnZXQoYnl0ZWNvZGUubV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1
Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9H
cmFwaChIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksCi0gICAgICAgICAgICAgICAgZ2V0
KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0gICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkp
OworICAgICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51
bWVyYXRvcj4oKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChH
ZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7CisgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7CiAgICAgICAgIH0KIAot
ICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9w
ZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNF
bnVtZXJhYmxlUHJvcGVydHksIGdldChieXRlY29kZS5tX2Jhc2UpLCBnZXQoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3By
b3BlcnR5KTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfbmV4dDogewor
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRB
cnJheU1vZGUobWV0YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUq
IGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogZW51bWVy
YXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOworICAgICAgICAgICAgTm9kZSogbW9k
ZSA9IGdldChieXRlY29kZS5tX21vZGUpOwogCi0gICAgICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1
Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzT3duU3RydWN0dXJlUHJvcGVydHksCi0g
ICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Vu
dW1lcmF0b3IpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGE7CiAKLSAgICAgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1
cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgYWRkVG9HcmFwaChJblN0cnVjdHVyZVByb3BlcnR5LAotICAgICAgICAgICAg
ICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5t
X3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkp
OwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTsKLSAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgICAg
ICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwotICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7Ci0gICAgICAgICAgICBOb2RlKiBwcm9w
ZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOwotICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7Ci0gICAgICAgICAgICBOb2RlKiBoYXNJdGVy
YWJsZVByb3BlcnR5ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpKTsKLSAgICAgICAgICAgIG1f
ZXhpdE9LID0gZmFsc2U7IC8vIEhhc0luZGV4ZWRQcm9wZXJ0eSBtdXN0IGJlIHRyZWF0ZWQgYXMg
aWYgaXQgY2xvYmJlcnMgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSBpdCBn
ZW5lcmljLgotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBoYXNJdGVyYWJsZVByb3Bl
cnR5KTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVt
ZXJhdG9yKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBzdG9yYWdl
IGZvciBJbmRleGVkTW9kZSBvbmx5LgorICAgICAgICAgICAgTm9kZSogdXBkYXRlZEluZGV4QW5k
TW9kZSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzZWVuTW9kZXMpKTsK
KworICAgICAgICAgICAgTm9kZSogdXBkYXRlZE1vZGUgPSBhZGRUb0dyYXBoKEVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUsIHVwZGF0ZWRJbmRleEFuZE1vZGUpOworICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fbW9kZSwgdXBkYXRlZE1vZGUpOworCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVk
SW5kZXggPSBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCB1cGRhdGVkSW5k
ZXhBbmRNb2RlKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2luZGV4LCB1cGRhdGVkSW5k
ZXgpOworCisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUsIGFkZFRvR3Jh
cGgoRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIE9wSW5mbygpLCBPcEluZm8oc2Vl
bk1vZGVzKSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9kZSwgZW51bWVyYXRvcikpOworCisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX25leHQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NS
RXhpdCgpOwotICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFk
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gZ2V0UHJlZGljdGlv
bldpdGhvdXRPU1JFeGl0KCk7CisKICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNv
ZGUubV9iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1f
cHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHlOYW1lID0gZ2V0KGJ5dGVjb2Rl
Lm1fcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2Rl
Lm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogbW9kZSA9IGdldChieXRlY29kZS5tX21vZGUp
OwogICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0
b3IpOwogCisgICAgICAgICAgICBhdXRvIHNlZW5Nb2RlcyA9IE9wdGlvblNldDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3KG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFk
YXRhKTsKKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoRm9yY2VPU1JFeGl0KTsKKworICAgICAgICAgICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogYmFkTW9kZSA9IGFkZFRvR3JhcGgoQXJpdGhCaXRBbmQsIG1vZGUsIGpzQ29uc3RhbnQoanNO
dW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKKworICAgICAgICAgICAgICAgIC8v
IFdlIGtub3cgdGhlIEFyaXRoQml0QW5kIGNhbm5vdCBoYXZlIGVmZmVjdHMgc28gaXQncyBvayB0
byBleGl0IGhlcmUuCisgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tJc0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmcoanNOdW1iZXIoMCkp
KSwgYmFkTW9kZSk7CisKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAg
ICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7IC8vIFVzZSBpbmRleCBzbyB3ZSds
bCB1c2UgdGhlIG5vcm1hbCBpbmRleGVkIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNo
IEdldEJ5VmFsLgorICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFw
aChOb2RlOjpWYXJBcmcsIEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJ
bmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9t
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZW51
bWVyYXRvcik7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNraW5n
IGZvciBhIEJhZENvbnN0YW50VmFsdWUgY2F1c2VzIHVzIHRvIGFsd2F5cyB1c2UgdGhlIEdlbmVy
aWMgdmFyaWFudCBpZiB3ZSBzd2l0Y2hlZCBmcm9tIEluZGV4ZWRNb2RlIC0+IEluZGV4ZWRNb2Rl
ICsgT3duU3RydWN0dXJlTW9kZSBldmVuIHRob3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAg
ICAgICAgICBpZiAoIXNlZW5Nb2Rlcy5jb250YWluc0FueSh7IEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6R2VuZXJpY01vZGUsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0
cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAgICAgICAgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG1vZGVUZXN0ID0gYWRk
VG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhqc0Jvb2xlYW4oZmFsc2UpKSksIG1vZGVUZXN0KTsKKworICAgICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KGluZGV4KTsgLy8gVXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQgb3B0
aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8g
Rm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1v
ZGUpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVu
dW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVj
dWxhdGlvbikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNl
KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKKyAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChu
dWxscHRyKTsgLy8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCiAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChtb2RlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0RGly
ZWN0UG5hbWUsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9yR2V0
QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7
CiAKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9kaXJlY3RfcG5hbWUpOworICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKLSAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVt
ZXJhdG9yPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdl
dFByb3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLSAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOwor
ICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogCi0gICAgICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSwKLSAg
ICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsKLSAgICAgICAgfQorICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckluQnlWYWwsIE9w
SW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEpKSk7CiAKLSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6IHsK
LSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLAotICAgICAgICAgICAgICAgIGdl
dChieXRlY29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5t
X2luZGV4KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZW5lcmlj
X3BuYW1lKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3Ry
aW5nOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoVG9JbmRleFN0cmluZywgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAg
ICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOworCisgICAgICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKTsK
KyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRh
dGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0
KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVj
b2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckhhc093blByb3BlcnR5LCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSkp
OworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVy
dHkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKaW5kZXggY2MwZDAxNGRh
MjkzMWZmM2VjZGNlOTQyOWNjMjYyNTYxZTJmN2Y3Ni4uMDZkMTlkMTczOTczMDNmNzQxYmU2YjAy
YmYwMTA1N2Y3MjI1NjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGF0YUxvZygi
ICAgRm91bmQgbXVzdC1oYW5kbGUgYmxvY2s6ICIsICpibG9jaywgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBUaGlzIG1lcmdlcyBzbmFwc2hvdCBvZiBzdGFjayB2YWx1ZXMgd2hpbGUgQ0ZB
IHBoYXNlIHdhbnQgdG8gaGF2ZSBwcm92ZW4gdHlwZXMgYW5kIHZhbHVlcy4gVGhpcyBpcyBzb21l
d2hhdCB0cmlja3kuCi0gICAgICAgIC8vIEJ1dCB0aGlzIGlzIE9LIGFzIGxvbmcgYXMgREZHIE9T
UiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpwcm92ZW4qIEFic3RyYWNWYWx1ZSB2
YWx1ZXMuIEFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzCisgICAgICAgIC8vIEJ1dCB0aGlzIGlz
IE9LIGFzIGxvbmcgYXMgREZHIE9TUiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpw
cm92ZW4qIEFic3RyYWN0VmFsdWUgdmFsdWVzLiBBbmQgaXQgdHVybnMgb3V0IHRoYXQgdGhpcwog
ICAgICAgICAvLyB0eXBlIHdpZGVuaW5nIGlzIGNyaXRpY2FsIHRvIG5hdmllci1zdG9rZXMuIFdp
dGhvdXQgaXQsIG5hdmllci1zdG9rZXMgaGFzIG1vcmUgc3RyaWN0IGNvbnN0cmFpbnQgb24gT1NS
IGVudHJ5IGFuZAogICAgICAgICAvLyBmYWlscyBPU1IgZW50cnkgcmVwZWF0ZWRseS4KICAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKaW5kZXggYzcxNjRiMzBmNDY0ZWIwZDQzODJlMmNjYTQyZDU2OTk2
NGQxYmY2Ny4uYWM3ODJkOTliNDUzYzUwODI2MWE3ZjNhODc5NTU4ODAwZDAwNWY3NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMjU0LDE3
ICsyNTQsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29k
ZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfaGFzX3ByaXZh
dGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZToKLSAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKLSAgICBjYXNlIG9wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVyYWJs
ZV9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0
eToKLSAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKICAg
ICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgotICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWU6Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6
Ci0gICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoKICAg
ICBjYXNlIG9wX25ld19mdW5jX2V4cDoKICAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoK
QEAgLTI5OSw2ICsyODksMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNv
ZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9w
X3NldF9wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3BfY2hlY2tfcHJpdmF0ZV9icmFuZDoKICAg
ICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6Cisg
ICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9y
X2luX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eToKICAg
ICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX2NhbGxfZXZh
bDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOWQxMDA0
ZmU1M2YzZDQ0N2RmMTAzZmFjYTBkMmUxMGVjNGZmNWY0Ni4uNmNjZGEzYjllMGY4N2ZkOTI1YWMw
ZGVkODI3ZGFkMWE0NGY2MmI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBjYXNlIENoZWNrQXJyYXlPckVtcHR5Ogog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNl
IEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIEdldFZlY3Rvckxlbmd0aDoKQEAgLTE2NCw3
ICsxNjgsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIEFycmF5UG9w
OgogICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJv
cGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBBdG9taWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNh
c2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKQEAgLTMzNywyMSArMzQwLDgwIEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFk
LCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHdyaXRlKE1hdGhEb3RSYW5kb21TdGF0ZSk7CiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBy
ZWFkKEhlYXApOwotICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAg
Y2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgIGRlZihQdXJlVmFsdWUo
bm9kZSkpOworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAg
ICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBpZiAobm9kZS0+ZW51bWVy
YXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlICYmIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICByZWFkKE5hbWVkUHJvcGVydGllcyk7CisgICAgICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2Rl
LT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihI
YXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGdyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAg
ICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91
YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAg
ICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUo
bm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2xvYmJlclRv
cCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CisgICAgY2FzZSBI
YXNJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICBzd2l0
Y2ggKG1vZGUudHlwZSgpKSB7CkBAIC03MDUsNiArNzY3LDggQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdy
aXRlRnUKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgVG9Qcm9wZXJ0eUtleToKICAg
ICBjYXNlIEluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEluQnlJZDoKICAgICBjYXNlIEhhc1By
aXZhdGVOYW1lOgogICAgIGNhc2UgSGFzUHJpdmF0ZUJyYW5kOgpAQCAtNzE2LDEyICs3ODAsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgUmVzb2x2ZVNjb3BlRm9ySG9pc3Rp
bmdGdW5jRGVjbEluRXZhbDoKICAgICBjYXNlIFJlc29sdmVTY29wZToKICAgICBjYXNlIFRvT2Jq
ZWN0OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OgotICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5OgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVt
ZXJhdG9yOgotICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3Vz
dG9tOgogICAgIGNhc2UgVG9OdW1iZXI6CiAgICAgY2FzZSBUb051bWVyaWM6CkBAIC05MDYsNiAr
OTY1LDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAg
ICAgICAgY2xvYmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlN
b2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZl
YTkxZGYyMjRiZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZk
NTUxNTBjNjY1M2MzN2UxOGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcApAQCAtMjA1LDcgKzIwNSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAg
IGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVu
Z3RoOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAg
IGNhc2UgQ2hlY2tCYWRWYWx1ZToKQEAgLTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNl
IEdldEJ5SWRXaXRoVGhpczoKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBH
ZXREaXJlY3RQbmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBC
dWNrZXQ6CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJh
YmxlSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJv
cGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3Ry
dWN0dXJlUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAg
IGNhc2UgSGFzUHJpdmF0ZU5hbWU6CkBAIC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2Fz
ZSBUaHJvd1N0YXRpY0Vycm9yOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAg
IGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRv
ckdlbmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJh
dG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVy
aWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dD
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZToKICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgogICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxE
aXJlY3Q6CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJh
ZDkxYzc2ZjU5NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li5kNTFkOTNmZWE0ZGIzYmU5YWJlOWQ5YjEx
NDY4ZjYwOWMwNWQwNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKQEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDMpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAg
ICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+
cHJlZGljdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKQEAgLTEwNjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5h
cnJheU1vZGUoKS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0
IGZvcmNlIE9TUiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE93blN0cnVjdHVyZU1vZGUuCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdFIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byBk
byB0aGlzLi4uCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdl
dEJ5VmFsKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUobm9kZS0+YXJy
YXlNb2RlKCkud2l0aFR5cGUoQXJyYXk6OkdlbmVyaWMpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMDk2LDcgKzExMTIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5v
dyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KICAgICAgICAgICAgICAgICAgICAgLy8gb3V0
LW9mLWJvdW5kcyBzbG93IHBhdGguIFdlIGNhbiBmaXggdGhhdCB3aXRoOgogICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4
Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJy
YXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCkBAIC0xMTExLDcgKzExMjcsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlNb2RlLnNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpICYm
IGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEhvbGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwgc28gaWYg
dGhlIHVzZXIgZG9lc24ndCBjYXJlCkBAIC0xMTIxLDcgKzExMzcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRl
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE3OCw3ICsxMTk0LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IGEgbm9uLUpTVmFs
dWUgcmVzdWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgYXMgdGhlIGluZGV4aW5nIG1vZGUgZG9l
c24ndCB0ZWxsIHVzIGFib3V0IHRoZSB0eXBlIG9mIE93blN0cnVjdHVyZQorICAgICAgICAgICAg
Ly8gcHJvcGVydGllcy4gVGhpcyBpc24ndCBhbiBpc3N1ZSBmb3IgSW5kZXhlZE1vZGUgb25seSBh
cyBCeXRlY29kZVBhcnNpbmcgd2lsbCBlbWl0IGEgbm9ybWFsIEdldEJ5VmFsIGlmIHdlJ3ZlIHBy
b2ZpbGVkIHRoYXQuCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0
QnlWYWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5
TW9kZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAg
ICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkKQEAgLTIyNzUsMjggKzIyOTUs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBj
YXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4o
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZp
eEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25TdHJpbmdVc2U+KG5vZGUtPmNo
aWxkMigpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7
CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAgICBub2RlLT5z
ZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLApAQCAtMjMxNSwzNiArMjMxNCw2NCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwg
QXJyYXk6OkluQm91bmRzU2FuZUNoYWluKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgICAgIEVkZ2UmIGJhc2Ug
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSYgcHJvcGVy
dHkgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSYgaW5k
ZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgRWRnZSYgZW51
bWVyYXRvciA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMyk7Ci0gICAgICAgICAgICBmaXhF
ZGdlPENlbGxVc2U+KGJhc2UpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KGluZGV4KTsKLSAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihlbnVtZXJhdG9yKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQogICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWU6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAg
ICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAg
ICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAg
ICBFZGdlJiBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3Rv
cmFnZUNoaWxkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0
YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS0+cHJlZGljdGlvbigpKSk7CisKKyAgICAgICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KGJhc2UpOworICAgICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oYmFz
ZSwgaW5kZXgsIHN0b3JhZ2VFZGdlKTsKKworICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LmJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2Fu
ZUNoYWluSWZQb3NzaWJsZShub2RlLCBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6
SW5Cb3VuZHMgPyBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6T3V0T2ZCb3VuZHNT
YW5lQ2hhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVy
YXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2Fj
aGUpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxL
bm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdl
bmVyaWNQbmFtZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJ
bnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDog
eworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNl
PihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsK
ICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRo
ZSBpbnN0cnVjdGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxU
eXBlU2V0LgogICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlz
IGNvbnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBm
b3IKQEAgLTM2OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFy
cmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAor
ICAgIHZvaWQgc2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9u
OworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsg
b24gYSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJu
IHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNo
YW5nZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAg
ICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBh
Y3R1YWxseSBoYWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBm
cm9tIGEgaG9sZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2Vs
eSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQg
b2YKKyAgICAgICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9y
IG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5h
TiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlv
biwgYW5kIGp1c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0
IGNhc2UuIFRoaXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRv
IGhhdmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0
byBVbmRlZmluZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3
YW50IHRvCisgICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIElu
dDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAv
LyBiYXNlZD8KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1w
bGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAg
ICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRo
ZSBob2xlIGNoZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQg
aGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAg
ICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2
NjgKKworICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFy
cmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5o
YXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAg
ICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1Nh
bmVDaGFpbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVu
dGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8v
IHJldHVybmVkIGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdl
IHN0aWxsIGRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJl
cXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAo
aXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5k
cyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZl
SW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5
OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1v
ZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAg
IHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAg
ICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVy
KSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUg
dXNlciBkb2Vzbid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZl
cmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAg
ICAgICAgICAvLyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxh
dGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZC
b3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdh
dGl2ZUluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBB
cnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAg
ICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7
CisgICAgfQorCiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFy
cmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5
ZmU2MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQx
OTJkMTc1MmQ0NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1B1dEJ5SWRTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJ
ZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0Jy
YW5jaCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2Vy
UmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQw
ZWY0MDMzMGMyMzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4
OTIyMTUxZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVn
ZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4
ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRy
YWN0SW5kZXguCiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0
UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAg
ICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4
NmQzOTNmZDg3YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0
ZjBkNmY0NjQ2NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNw
cApAQCAtMTExLDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBi
cmVhazsKIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAg
Y2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2
ZDBhNDM4ZTVlZDgxLi4yOTg1ZGZkMWIyNDY0ODNkNzc1YzM1NjhhNzczNjkzNDI0ZjkxZjUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1
ZGUgIkRlbGV0ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIK
ICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIK
ICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAg
ICAgICBjYXNlIEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAg
ICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNh
c2UgR2V0QnlJZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEdldEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoK
ICAgICAgICAgY2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZh
bDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlz
OgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzU3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Ao
KSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFy
Q29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVu
dW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWlj
c0FuZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNl
IEF0b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2Fz
ZSBBdG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0
b21pY3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1
c2g6CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2ln
bmVkIHN0b3JhZ2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdl
Q2hpbGQoKSk7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0No
YXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmlu
Z0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5
VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgor
ICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNo
YW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWlj
c0xvYWQ6CisgICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9y
ZToKKyAgICAgICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6Cisg
ICAgICAgICAgICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAg
IGNhc2UgQXJyYXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBB
cnJheVBvcDoKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVy
biAyOworCisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0
dXJuIDI7CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToK
KyAgICAgICAgICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAv
LyBGSVhNRTogQWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3Mg
dG8gZGV0ZXJtaW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiAr
MjI4MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0
QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAg
ICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0
OgpAQCAtMjIxNiw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgog
ICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBBdG9taWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0NvbXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAg
IH0KIAorICAgIGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5k
ZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1l
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJl
NTY1NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdl
bmVyYXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAg
ICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVy
ZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBt
YWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRv
SW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFw
IGFuZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3
ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLmEzN2U2NmY0OTI4NWViNDk3YjFiZWZhODc3MzQ5MGY1YjFm
OWI1YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNl
KTsKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFt
ZSkpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxP
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAg
ICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1v
ZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1l
U3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9i
amVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpO
dW1iZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5k
ZXgpOworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBt
b2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAg
fQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFt
ZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmpl
Y3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgSlNPYmplY3QqIG9iamVj
dCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOworfQorCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
YmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
SlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFzUHJv
cGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5h
bWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3BlcnR5
TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFz
ZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVy
KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICByZXR1cm4ganNT
dHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0g
SlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFzT3duUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3Vy
ZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7
CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50b0lkZW50aWZpZXIoZ2xvYmFs
T2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3RQcm90
b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIGlkZW50aWZpZXIpKSkpOwog
fQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJ
bmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogcmVn
ZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4KSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFmZWRlNTk1ZDBmYjhmYTgzNWVm
NzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQxM2JmMTg4MGNlNzYzNGVlMzEz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTM2LDYg
KzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5zdGFuY2U7CiBjbGFzcyBKU0Jp
Z0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsKK2NsYXNzIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTEwNCwxMiArMTA1LDE0IEBA
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvdG90eXBlT2YsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCkp
OwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgSlND
ZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNPd25TdHJ1Y3R1
cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpT
U3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JblN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNT
dHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5
RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpKTsK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9y
Q2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxP
YmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90LCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdWludDMyX3QsIGludDMyX3Qp
KTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJO
YW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
LCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOworCiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2VsbCosIChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3RydWN0dXJlKikpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3ZTMwNmJhYjg1MzdjMGU4OWUy
ZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1ZTM3NjQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIGlmICgh
Y2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMSk7
CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCkucmVm
aW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAgICAgICAgICAgICAgICAgY2hp
bGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAg
IHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCkBAIC01
MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAm
JiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpICYmIChub2Rl
LT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKSkK
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMy
T25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDUyQW55KTsKQEAg
LTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBBcnJheVBv
cDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKQEAg
LTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgog
ICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6
CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRD
YWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OiB7
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBJbkJ5VmFs
OgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAg
ICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNhc2UgSGFzT3duUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNF
bnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVBy
b3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZTogewotICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CisKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAgICAgLy8gVGhpcyBj
YW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJhbmNoIG9mIHRoYXQgY2FzZSBp
biB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aAorICAg
ICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3Bl
Y0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcp
OworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZhbHVlIHByb2ZpbGUgd2hldGhl
ciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3RyaW5nLgorICAgICAgICAgICAg
c2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDogewogICAgICAgICAgICAgLy8g
V2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHByb2R1Y2UgYW4gaW50MzIuIEhv
d2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0IHByb2R1Y2VzIE5hTiBvciBp
bnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBjOTYzN2ExZDEzZmFhZjllYzA0
NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJiZWFiMDJhZDBjNTEzZGRiNDlj
YTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2Vy
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJp
bmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91bmRzQ2hlY2sobV9ncmFwaC5j
aGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSksIG1fZ3JhcGguY2hpbGQo
bV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEVudW1lcmF0
b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbG93ZXJC
b3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJkMGI5YjQ2MGUyYzUwLi4xZTA0
NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2LDEwICsyOTYsNiBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2Ug
RmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51
bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
bmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgY2FzZSBUb0lu
ZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAv
LyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBpbiBjb250cm9sIGZsb3cgaGVy
ZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKQEAgLTQ5Niw2ICs0
OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgcmV0dXJuIGlzU2FmZTsK
ICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAg
IC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0cyBidXQgdGhleSdsbCBvbmx5
IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUgc28gd2UgbWln
aHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNl
IENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpAQCAtNTk1LDYgKzU5Nyw4IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAg
Y2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBIYXNQcml2
YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAgICBjYXNlIEhhc093blByb3Bl
cnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNh
c2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgTXVs
dGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxl
UHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIElu
U3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICBjYXNlIEdl
dFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2Fz
ZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1MThhNjA4NzEzNDJkNjQ0ZWQ5
NzhiMWU1YjguLjg5NzM1MjAzMmNiMzdlODA2MzE5MDUyMzZmYWU1Y2RmYzJlOWFhMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0x
NjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgR1BSUmVnIHNwZWNpZmlj
UGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFs
dWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0
LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCi0gICAgOiBtX2dwcihqaXQs
IFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0LCBzcGVjaWZpY1BheWxvYWQp
CiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1Zh
bHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFu
ZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1fcGF5bG9hZEdQUihqaXQsIHNw
ZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNlbmRpZgogewotICAgIGlmIChy
ZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRl
bXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwg
b3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogSlNWYWx1
ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQs
IFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAgLTI1OTUsNyArMjU4NSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUqIG5vZGUpCiAg
ICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlLCBj
b25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0
YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGguY2hpbGQobm9kZSwgMSkp
OwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0VGFnLmFkb3B0KHJlYWxSZXN1
bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgfQot
I2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1h
dDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6IERhdGFGb3JtYXRDZWxsKTsK
KyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOwogCiAgICAg
Ly8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRp
Y2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSks
IHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJpZ0NoYXJh
Y3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCBzY3JhdGNoUmVnLCAm
dm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKIAogICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsyNjUzLDIyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lz
dGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSk7
CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
bWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAg
ICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHNjcmF0Y2hSZWcpLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1h
a2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAg
ICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0
Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3Qp
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgb3V0T2ZC
b3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgb3V0
T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBn
bG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKLSAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3Ry
aW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNj
cmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmpl
Y3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9i
amVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJl
bnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBzY3Jh
dGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICBjZWxs
UmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChm
b3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9kZSk7CisgICAgfQogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqIG5vZGUpCkBAIC0z
MzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxvYWRGcm9tSW50VHlwZWRB
cnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnCiAgICAgfQogfQogCi12
b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiBub2Rl
LCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBib29sIGNhblNwZWN1bGF0
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUq
IG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGJvb2wg
Y2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBpZiAoZWxlbWVudFNpemUodHlw
ZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBpc1VJbnQzMiA9IGVsZW1lbnRT
aXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAgIEdQUlJlZyByZXN1bHRSZWcg
PSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChzaG91bGRCb3gpIHsKKyAgICAg
ICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZnJlc3VsdCh0aGlz
KTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFJlZywgZnJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFJl
ZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21w
aWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6OnR3b1RvVGhlMzIpLCBmcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzVUludDMyKSB7CisgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpOwogICAgICAg
ICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25l
ZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5T
cGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBy
ZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChy
ZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwgR1BSUmVnIHJlc3VsdFJl
ZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2Rl
LCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUp
KTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHQK
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRS
ZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7CisgICAgYm9vbCBzaG91bGRC
b3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1pdFR5cGVkQXJyYXlCb3VuZHND
aGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAgbG9hZEZyb21JbnRUeXBlZEFy
cmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcsIHR5cGUpOworICAgIGxvYWRG
cm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IHRydWU7
Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0UmVnLCB0eXBlLCBj
YW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3Vs
dFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKIH0KIAogYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKQEAgLTM2MzYsNyArMzYyNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
R1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUq
IG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIEFTU0VSVChpc0Zs
b2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFy
cmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
Zm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwogICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKICAgICBl
bWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKQEAg
LTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBkb3VibGVSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAg
ICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcwMyw3ICszNzA0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmlu
ZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlKQogICAg
IEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIu
Z3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3Vs
dFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCiAgICAgc3BlY3Vs
YXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGFyZzFHUFIpOwogICAgIHNw
ZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAog
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCBy
ZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZywgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIpOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmpl
Y3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZv
cm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBh
cmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMzczMSwxMiArMzcz
MywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAg
IEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBKU1ZhbHVl
UmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtODAz
OCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJh
eUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdCh2ZWN0b3JHUFIs
IG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6
dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0
KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgwODIsMjMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkK
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSog
bm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwog
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gyKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIuZ3ByKCk7CiAgICAg
CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CisKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9
IHByZWZpeChEYXRhRm9ybWF0SlMpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZTdG9yYWdlKCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CkBAIC0xMzQ0Miw0NCArMTM0
NDYsMzU0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUaHJvd1N0YXRpY0Vycm9yKE5v
ZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSogbm9kZSkK
IHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBlbnVtZXJhdG9yKTsK
KyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGUodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
ZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKworICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQUlJlZyBtb2RlR1BSID0gbW9kZS5n
cHIoKTsKICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7Ci0gICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgc3RyaWN0SW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLX0KKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFk
YXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMsIFJldXNlLCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSByZXN1bHQucmVncygpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFz
RW51bWVyYWJsZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENh
Y2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKDApKSk7CiAKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1
ZVJlZ3MoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGluY3JlbWVudExvb3A7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmU7CisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9k
ZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7CisKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoaW5kZXhHUFIsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IG1vZGVHUFIpOworCisgICAgICAgICAgICBpbmNyZW1lbnRMb29wID0gbV9qaXQubGFiZWwoKTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaC5ncHIoKSk7
CisKKyAgICAgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoLmdw
cigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
KyAgICAgICAgfSkpOworICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKS5saW5rVG8oaW5jcmVtZW50TG9vcCwgJm1f
aml0KTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSA8PCAzMiksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgbV9qaXQub3I2NChz
Y3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKworICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOworCisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGVudW1l
cmF0b3IuCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwg
bm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1
ZVNvdXJjZSgpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhH
UFIsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1v
ZGVHUFIpOworCisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICBpbml0TW9kZS5saW5r
KCZtX2ppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQub3I2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgPDwgMzIpLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQ
UigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UucmVncygpOwogCiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5k
TW9kZSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBp
bmRleEdQUiwgbW9kZUdQUiwgZW51bWVyYXRvckdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwg
bm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9kZSkKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleChOb2RlKiBub2Rl
KQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgSlNWYWx1ZU9wZXJh
bmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBh
aXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQ
UiA9IHBhaXJSZWdzLnBheWxvYWRHUFIoKTsKIAotICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKLSAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwot
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKworICAgIG1faml0LmFuZDMyKFRydXN0
ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXlsb2FkR1BS
LCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGUoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5q
c1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBwYWlyR1BSID0gaXM2NEJpdCgpID8gcGFpclJlZ3Mu
cGF5bG9hZEdQUigpIDogcGFpclJlZ3MudGFnR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIG1faml0LnJzaGlmdDY0KHBhaXJHUFIsIFRydXN0ZWRJbW0zMigz
MiksIHJlc3VsdEdQUik7CisjZWxzZQorICAgIG1faml0Lm1vdmUocGFpckdQUiwgcmVzdWx0R1BS
KTsKKyNlbmRpZgorICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spLCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0
SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqIG5vZGUpCit7Cisg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4T3BlcmFuZCh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGVPcGVyYW5kKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9y
T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
cmVzdWx0VGVtcCh0aGlzKTsKKworICAgIEdQUlJlZyBpbmRleCA9IGluZGV4T3BlcmFuZC5ncHIo
KTsKKyAgICBHUFJSZWcgbW9kZSA9IG1vZGVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyBlbnVt
ZXJhdG9yID0gZW51bWVyYXRvck9wZXJhbmQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdFRlbXAucmVncygpOworCisgICAgYXV0byBzZWVuTW9kZXMgPSBPcHRpb25T
ZXQ8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjo6ZnJvbVJhdyhub2RlLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2Vz
OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wZXJhdGlvbkNhbGw7CisKKyAgICBib29sIG5l
ZWRzT3BlcmF0aW9uID0gc2Vlbk1vZGVzLmNvbnRhaW5zKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGZsdXNoIG9uIGFsbCBjb2Rl
IHBhdGhzIGlmIHdlIGNvdWxkIGNhbGwgdGhlIG9wZXJhdGlvbi4KKyAgICBpZiAobmVlZHNPcGVy
YXRpb24pCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBpZiAoc2Vlbk1vZGVzLmNv
bnRhaW5zQW55KHsgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIH0pKSB7CisKKyAgICAgICAgaWYg
KG5lZWRzT3BlcmF0aW9uKQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbW9kZSwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKworICAgICAgICBhdXRvIG91dE9m
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworCisgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvciwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgaW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgZG9uZUNhc2VzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgbV9qaXQubW92ZVRydXN0ZWRWYWx1ZShqc051bGwoKSwgcmVzdWx0UmVncyk7CisgICAg
fQorCisgICAgaWYgKG5lZWRzT3BlcmF0aW9uKSB7CisgICAgICAgIGlmIChvcGVyYXRpb25DYWxs
LmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5h
bWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwg
ZW51bWVyYXRvcik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgfQorCisg
ICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckdldEJ5
VmFsKE5vZGUqIG5vZGUpCit7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoR1BSUmVnIGJhc2VDZWxsR1BS
KSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAg
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSOworICAgICAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlU2xvd1BhdGg7
CisKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7
CisgICAgICAgICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBp
ZiAoc3RvcmFnZUVkZ2UpCisgICAgICAgICAgICAgICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0
b3JhZ2VFZGdlKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRl
eCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgNCkpOworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDUpKTsKKworICAgICAgICAgICAgR1BSUmVnIG1v
ZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICAgICAgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsK
KyAgICAgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAg
ICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHJl
c3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgICAgICAgICAgYm9vbCBoYXZlU3RvcmFn
ZSA9ICEhc3RvcmFnZUVkZ2U7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZVRlbXBv
cmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKCFo
YXZlU3RvcmFnZSkgeworICAgICAgICAgICAgICAgIHN0b3JhZ2VUZW1wb3JhcnkgPSBHUFJUZW1w
b3JhcnkodGhpcywgUmV1c2UsIGVudW1lcmF0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VH
UFIgPSBzdG9yYWdlVGVtcG9yYXJ5LmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBub3RGYXN0TmFtZWRDYXNlczsKKworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlz
IG5vdCBhbiBvYmplY3QuCisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtb2RlR1BSLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKSk7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2UpLmlzVHlwZShTcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoYmFzZUNlbGxHUFIpKTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Uga25vdyB0aGVyZSdzIG9u
bHkgb25lIHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBlbWJlZCBpdCBoZXJlLgorICAg
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2Vs
bEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHJlcHJlc2Vu
dCBJbmRleGVkK05hbWVkPworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpLm5vZGUoKSA9PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpLm5vZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgYmFkU3RydWN0dXJlU2xvd1BhdGggPSBiYWRTdHJ1Y3R1cmU7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub3RGYXN0TmFtZWRD
YXNlcy5hcHBlbmQoYmFkU3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUg
dGhlIG9mZnNldAorICAgICAgICAgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nl
c3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAg
ICAgICAgICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7CisKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChiYXNlQ2VsbEdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKwor
ICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgICAgICAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
aWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWhhdmVTdG9yYWdlKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENh
c2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1
bHRSZWdzLCBEYXRhRm9ybWF0SlMpOworICAgICAgICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVs
eSBvbiBjb21waWxlR2V0QnlWYWwgdG8gY2FsbCBqc1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMga2luZGEgaGFja3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVy
YXRpb25JbmZvKG5vZGUpLmpzVmFsdWVSZWdzKCkgPT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9u
SW5mbyhub2RlKS5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAg
aWYgKGJhZFN0cnVjdHVyZVNsb3dQYXRoLmlzU2V0KCkpCisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmFkU3RydWN0dXJlU2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUNlbGxHUFIsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BS
KSk7CisKKyAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICB9OworCisgICAgaWYg
KGlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpKSB7CisgICAgICAgIC8vIFVzZSBtYW51YWwgb3Bl
cmFuZCBzcGVjdWxhdGlvbiBzaW5jZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQgYSBVc2VLaW5kIG1v
cmUgcmVzdHJpY3RpdmUgdGhhbiBDZWxsVXNlLgorICAgICAgICBzcGVjdWxhdGUobm9kZSwgYmFz
ZUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBi
YXNlRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFz
ZU9wZXJhbmQuZ3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2VPcGVyYW5kKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQu
Z3ByKCkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5
cGU+Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5v
ZGUqIG5vZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAg
RWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBn
ZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgNCkpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5TmFtZVJlZ3Mg
PSBwcm9wZXJ0eU5hbWUucmVncygpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gcmVzdWx0LnJlZ3MoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3Bl
cmF0aW9uQ2FzZXM7CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZSkubV90
eXBlICYgflNwZWNDZWxsKQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaElmTm90Q2VsbChiYXNlKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlzIG5vdCBhIGNlbGwuCisgICAg
ICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAg
bW92ZVRydWVUbyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMu
bGluaygmbV9qaXQpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBhdXRvIGJhc2VSZWdzID0gSlNWYWx1
ZVJlZ3MoYmFzZUNlbGxHUFIsIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2Vsc2UKKyAgICAgICAg
YXV0byBiYXNlUmVncyA9IGJhc2U7CisjZW5kaWYKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzbG93
UGF0aEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZVJlZ3MsIHByb3BlcnR5TmFtZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSKTsKKyAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAg
ICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7
CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2Vu
ZXJhdGUoYmFzZS5ncHIoKSwgYmFzZS5ncHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2Uu
cmVncygpLCBiYXNlLnJlZ3MoKS5wYXlsb2FkR1BSKCkpOworICAgIH0KK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAg
Y29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJhdG9ySW5C
eVZhbCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHkoTm9kZSogbm9kZSkKK3sKKyAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5
KG5vZGUsIG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkRmx1c2goTm9kZSogbm9kZSkKQEAgLTEzNjIyLDY3
ICsxMzkzNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHVyZShO
b2RlKiBub2RlKQogICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQot
ICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOwotICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB3cm9uZ1N0
cnVjdHVyZTsKLQotICAgIHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENl
bGwoYmFzZVJlZ3MpKTsKLQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICB3cm9uZ1N0cnVjdHVyZS5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5n
cHIoKSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOwotCi0gICAgbW92ZVRydWVUbyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9w
ZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUikpOwotICAgIGJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0aW9uPgotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVj
dHVyZVByb3BlcnR5SW1wbChOb2RlKiBub2RlLCBGdW5jdGlvbiBzbG93UGF0aCkKLXsKLSAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCB3cm9uZ1N0cnVjdHVyZTsKLQotICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0
b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKLQotICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0g
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlz
LCBzbG93UGF0aCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VH
UFIsIHByb3BlcnR5R1BSKSk7Ci0gICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0UmVncy5w
YXlsb2FkR1BSKCksIG5vZGUpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFz
T3duU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKLXsKLSAgICBjb21waWxlSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbXBsKG5vZGUsIG9wZXJhdGlvbkhhc093blN0cnVjdHVyZVByb3BlcnR5
KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluU3RydWN0dXJlUHJvcGVydHko
Tm9kZSogbm9kZSkKLXsKLSAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKG5v
ZGUsIG9wZXJhdGlvbkluU3RydWN0dXJlUHJvcGVydHkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CkBAIC0xMzcwOSwzOSArMTM5
NjIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9y
KE5vZGUqIG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYXRvclBuYW1lKE5vZGUqIG5vZGUpCi17
Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIHx8
IG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSk7Ci0gICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7
Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGluZGV4R1BSLAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCAobm9kZS0+b3AoKSA9PSBHZXRFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWUpCi0gICAgICAgICAgICA/IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpCi0gICAgICAgICAgICA6IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0g
ICAgbV9qaXQubW92ZVZhbHVlKGpzTnVsbCgpLCByZXN1bHRSZWdzKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluaygmbV9q
aXQpOwotCi0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0
b3JPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgotCi0gICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKLX0KLQogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUoTm9kZSogbm9kZSkKIHsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xNDkz
NCwyOCArMTUxNTQsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3
QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAgc2l6ZUdQ
Uiwgc3RvcmFnZUdQUikpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJh
dGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9k
ZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uLCBjb25zdCBTY29w
ZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4mIHByZWZpeCkKIHsKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
R1BSUmVnIGluZGV4R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
SW52YWxpZEdQUlJlZzsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICBzd2l0Y2ggKG1v
ZGUudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJ
bmRleCgpKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1
bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZC
b3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQpA
QCAtMTQ5ODMsMTIgKzE1MjAzLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgQVNTRVJU
KCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEFT
U0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgo
KSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBGUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNo
LmZwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKKyAg
ICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAg
ICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCkBAIC0xNTAxMiwxMyArMTUyMzQsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBT
X0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwog
CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4
R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICBpZiAobW9kZS5pc0luQm91
bmRzKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CkBAIC0xNTA0Nyw3MyArMTUyNzEsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2Rl
LCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIC8vIEZJWE1F
OiBPcHRpbWl6ZSBUeXBlZEFycmF5cyBpbiBIYXNJbmRleGVkUHJvcGVydHkgSUMKICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAg
ICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOwogICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9
CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlz
LCBzbG93UGF0aE9wZXJhdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgYmFzZUdQUiwgaW5kZXhHUFIpKTsKLQotICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVj
dFBuYW1lKE5vZGUqIG5vZGUpCi17Ci0gICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIHByb3BlcnR5RWRnZSk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotCi0gICAgRWRnZSYgZW51
bWVyYXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2UpOwotICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOwotICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgIEdQ
UlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3Vs
dC5yZWdzKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBzY3JhdGNoR1BS
LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAg
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9m
TGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
Ci0gICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKLQotICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VH
UFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9m
IGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOwotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIG1faml0Lm1vdmUoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOwotICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIp
OwotICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwot
ICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7Ci0gICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUu
bGluaygmbV9qaXQpOwotCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9w
ZXJ0eUdQUikpKTsKLQotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKiBub2Rl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4
IDk4Yzc2MTZiOGZkMmZiZjVjNGRkOGE1NzcxNTA4YWQyNjc5Zjk5ZDEuLmQxMjBiN2I0ZmI4NDQz
NjlkNzJjZDYwMTgxYmMwOGMwYjZjOTE3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR1BSVGVtcG9yYXJ5OworY2xhc3MgSlNWYWx1ZVJl
Z3NUZW1wb3Jhcnk7CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJh
dG9yOwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CkBAIC0yNDYsNiArMjQ3LDggQEAgcHVibGljOgog
ICAgIH0KICAgICBHUFJSZWcgYWxsb2NhdGUoR1BSUmVnIHNwZWNpZmljKQogICAgIHsKKyAgICAg
ICAgaWYgKHNwZWNpZmljID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0ZSgp
OwogI2lmIEVOQUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQogICAgICAg
ICBtX2ppdC5hZGRSZWdpc3RlckFsbG9jYXRpb25BdE9mZnNldChtX2ppdC5kZWJ1Z09mZnNldCgp
KTsKICNlbmRpZgpAQCAtMTM0NSwxMiArMTM0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS0+YXJyYXlNb2Rl
KCkpOwogICAgIH0KICAgICAKKyAgICAvLyBXZSB1c2UgYSBzY29wZWRMYW1iZGEgdG8gcGxhY2F0
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHZhbGlkYXRpb24uCisgICAgdm9pZCBjb21waWxlR2V0QnlW
YWwoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRh
Rm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworCiAgICAgdm9p
ZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiwg
Y29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERh
dGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRnJv
bUNoYXJDb2RlKE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJn
dW1lbnRzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRz
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUq
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KTsKIAogICAgIHZvaWQgY29tcGlsZUdldFByaXZhdGVOYW1lKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVHZXRQcml2YXRlTmFtZUJ5SWQoTm9kZSopOwpAQCAtMTQyNCwxMiArMTQz
MCwxMiBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlJ
c0RldGFjaGVkSWZPdXRPZkJvdW5kcyhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEpJVENvbXBpbGVy
OjpKdW1wIG91dE9mQm91bmRzKTsKICAgICB2b2lkIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2so
Tm9kZSosIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5kZXhHUFIpOwogICAgIHZvaWQgY29tcGls
ZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFy
cmF5VHlwZSk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2Rl
KiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYg
cHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKik7Ci0gICAgdm9pZCBj
b21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZv
cm1hdCk+JiBwcmVmaXgpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5
bWJvbChOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERh
dGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9p
ZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBF
ZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JD
ZWxsV2l0aFN5bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNo
aWxkMyk7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CkBAIC0xNDU4
LDcgKzE0NjQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgRWRnZSB2YWx1ZVVzZSk7CiAg
ICAgdm9pZCBsb2FkRnJvbUludFR5cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBw
cm9wZXJ0eVJlZywgR1BSUmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQg
c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVk
QXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSk7CisgICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5
TG9hZFJlc3VsdChOb2RlKiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5cGUs
IGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCk7CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENsYXNzVHlwZT4gdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVnLCBSZWdp
c3RlcmVkU3RydWN0dXJlLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmLCBzaXplX3QsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9k
ZSopOwpAQCAtMTUyNCwyMSArMTUzMCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVG9M
b3dlckNhc2UoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRocm93KE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVUaHJvd1N0YXRpY0Vycm9yKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVt
ZXJhYmxlTGVuZ3RoKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0
eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKik7CisKKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShOb2RlKik7CisgICAgdm9pZCBj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlPgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShO
b2RlKiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJ
bkJ5VmFsKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
Tm9kZSopOworCiAgICAgdm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVQdXRCeUlkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRGlyZWN0KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9kZSopOwotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwoTm9kZSosIEZ1bmN0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0
eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxl
R2V0RW51bWVyYXRvclBuYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxl
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUdldFNldHRlcihOb2RlKik7CkBAIC0xNTY4LDcgKzE1NzUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlQ2FsbE51bWJlckNvbnN0cnVjdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1No
YWRvd0NoaWNrZW5UYWlsKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoTm9kZSosIFNfSklUT3BlcmF0aW9uX0dDWik7CisgICAgdm9pZCBjb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1osIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVF
eHRyYWN0Q2F0Y2hMb2NhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ2xlYXJDYXRjaExvY2Fs
cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHJvZmlsZVR5cGUoTm9kZSopOwpAQCAtMTkyNiw2
ICsxOTMzLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9
CiAKKyAgICBKU1ZhbHVlUmVncyByZWdzKCkgeyByZXR1cm4ganNWYWx1ZVJlZ3MoKTsgfQorCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CkBAIC0xOTY1LDcgKzE5
NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5
bG9hZEdQUigpKTsKICAgICB9CiAKLSAgICBHUFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNo
KQorICAgIEdQUlJlZyBncHIoV2hpY2hWYWx1ZVdvcmQgd2hpY2ggPSBQYXlsb2FkV29yZCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBqc1ZhbHVlUmVncygpLmdwcih3aGljaCk7CiAgICAgfQpAQCAt
MjAwMywyMSArMjAxMiwyMCBAQCBwcml2YXRlOgogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIFN0b3JhZ2VPcGVyYW5kKCkg
PSBkZWZhdWx0OworCiAgICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQq
IGppdCwgRWRnZSBlZGdlKQogICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBtX2VkZ2Uo
ZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVu
dHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobm9kZSgpKSkKLSAgICAgICAgICAgIGdwcigpOworICAgICAgICBlbXBs
YWNlKGppdCwgZWRnZSk7CiAgICAgfQogICAgIAogICAgIH5TdG9yYWdlT3BlcmFuZCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAg
ICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOworICAgICAgICBpZiAobV9ncHJPcklu
dmFsaWQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJP
ckludmFsaWQpOwogICAgIH0KICAgICAKICAgICBFZGdlIGVkZ2UoKSBjb25zdApAQCAtMjAzNiw2
ICsyMDQ0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQt
PmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAg
ICB9CisKKyAgICB2b2lkIGVtcGxhY2UoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgbV9qaXQgPSBqaXQ7CisgICAgICAgIG1fZWRnZSA9IGVkZ2U7CisgICAg
ICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgQVNT
RVJUKG1faml0KTsKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Ug
fHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobm9kZSgpKSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0KICAgICAKICAgICB2b2lk
IHVzZSgpCiAgICAgewpAQCAtMjA0Myw5ICsyMDYyLDkgQEAgcHVibGljOgogICAgIH0KICAgICAK
IHByaXZhdGU6Ci0gICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OworICAgIFNwZWN1bGF0aXZlSklU
KiBtX2ppdCB7IG51bGxwdHIgfTsKICAgICBFZGdlIG1fZWRnZTsKLSAgICBHUFJSZWcgbV9ncHJP
ckludmFsaWQ7CisgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkIHsgSW52YWxpZEdQUlJlZyB9Owog
fTsKIAogCkBAIC0yMTM0LDExICsyMTUzLDE5IEBAIGNsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
IHsKIHB1YmxpYzoKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIEpTVmFsdWVSZWdz
VGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKik7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3Bl
Y3VsYXRpdmVKSVQqLCBHUFJSZWcgc3BlY2lmaWNQYXlsb2FkKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNw
ZWNpZmljUGF5bG9hZCwgR1BSUmVnIHNwZWNpZmljVGFnKTsKKyNlbmRpZgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBS
ZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0UmVnV29yZCA9IFBheWxv
YWRXb3JkKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFJldXNl
VGFnLCBKU1ZhbHVlT3BlcmFuZCYpOwogICAgIH5KU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAg
IAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiAhIXJlZ3MoKTsgfQorCisg
ICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmIG9wZXJhdG9yPShKU1ZhbHVlUmVnc1RlbXBvcmFyeSYm
KSA9IGRlZmF1bHQ7CisKICAgICBKU1ZhbHVlUmVncyByZWdzKCk7CiAKIHByaXZhdGU6CkBAIC0y
MTUwLDYgKzIxNzcsMjYgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorI2lmIFVTRShKU1ZBTFVF
NjQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVS
ZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBX
aGljaFZhbHVlV29yZCkKKyAgICA6IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCit7Cit9Cisj
ZWxzZQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVl
UmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwg
V2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKK3sKKyAgICBpZiAocmVzdWx0V29yZCA9PSBQYXls
b2FkV29yZCkgeworICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVz
ZSwgb3BlcmFuZCk7CisgICAgICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAg
ICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgIH0K
K30KKyNlbmRpZgorCiBjbGFzcyBGUFJUZW1wb3JhcnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOWQ0MDM2OTYxMGQ4OWU0MWU1MTZmNmM0YTQy
NWU1ZmQ3MTAyYTFiZS4uYWJjOGQxOGFhMzk3NjRhMmY5YzBjMDc0MWNmZDFlOWE1OGRkYzQyNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkBAIC0xODEyLDYgKzE4MTIsMzM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSogbm9kZSwgQmFzZU9wZXJhbmRUeXBlJiBiYXNl
CiAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsgICAgCiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25z
dCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZv
cm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
czoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjaWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NP
REUpCisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3Zl
cmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBH
UFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVm
aXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAg
IGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNl
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNl
S2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVm
aXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3Vs
YXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgorICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBKU1ZhbHVl
UmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIs
IHByb3BlcnR5UmVncyk7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHBy
b3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUp
ID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JO
b2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50
YWdHUFIoKSkpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIGJh
c2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOworCisgICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYg
KG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3Bl
Y1N5bWJvbCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAg
ICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVs
bHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlW
YWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdU
Rk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQg
Zm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZp
eChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdElu
dDMyIDogRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAg
ICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SW50MzIpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7CisKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0Lmxv
YWQzMigKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3Vs
dChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAg
ICAgICAgICAgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVD
aGFpbigpKSB7CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1f
aml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVn
cygpLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJl
c3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKwor
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6
dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWRWYWx1
ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZ3MpOworICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSkpOworCisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0
UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0
LmZwcigpKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAg
ICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHQuZnByKCksIHJlc3VsdFJlZ3MpOworICAgICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJs
ZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
KworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBG
UFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4
KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAg
ICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAg
ICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHBy
b3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
KworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOwor
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAw
LCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJl
Z3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigp
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3Vu
ZHMpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAg
ICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5
TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRB
cnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0gfQorfQorCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgp
OwpAQCAtMjIzMyw3ICsyNTYyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgIC8vIFJlbGllcyBv
biBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBiYXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwK
LSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CisgICAgICAgIEpTVmFsdWVS
ZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9k
ZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkg
eworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAg
ICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQp
OworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjI2NSwzMjYgKzI1
OTksMjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoK
LSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFC
TEVfQ09ERSkKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRl
cXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2Us
IGluZGV4KTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwot
Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1
c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2Uo
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIp
OwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRH
UFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmpl
Y3RVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJv
bFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN5bWJvbChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KTsgLy8gU2F2ZSBhIHJlZ2lzdGVyLCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUg
cmlnaHQuCi0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVn
cyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBq
c1ZhbHVlUmVzdWx0OworICAgICAgICBHUFJUZW1wb3Jhcnkgb25lUmVnUmVzdWx0OworICAgICAg
ICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICAgICAgICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLQotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIHByb3BlcnR5LCBUYWdXb3JkKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwg
UGF5bG9hZFdvcmQpOwotCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2Uu
anNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHBy
b3BlcnR5LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRl
RXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNp
emUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNl
ZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOwotCi0gICAg
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgIGJhc2VSZWdz
LCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwotCi0gICAgICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1Bh
dGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAg
ICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBi
YXNlUmVncywgcHJvcGVydHlSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQu
YWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czog
ewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBh
eWxvYWQodGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFBheWxvYWRPZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJl
c3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRhZy5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zm
c2V0KSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewot
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJh
bmNoSWZOb3RFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWcuZ3By
KCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFs
dWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0g
ICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwg
cmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlz
SW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3Vs
dC5mcHIoKSkpOwotICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5v
ZGUpOworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6CisgICAgICAgICAgICBjYXNl
IERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAgICAgIG9uZVJlZ1Jlc3VsdCA9IEdQUlRlbXBv
cmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KG9uZVJlZ1Jlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXls
b2FkKHRoaXMpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAg
ICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1w
UmVnKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVt
cFJlZykpOwotICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFRhZ1JlZywgcmVz
dWx0UGF5bG9hZFJlZyk7Ci0KLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTog
ewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFBheWxvYWQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAs
IG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAg
ICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1h
dCA9PSBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQgPSBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0ganNW
YWx1ZVJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1
bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3Vs
dFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
OwotCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBo
b2xlID0gbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91
bmRzKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJ
bnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0
UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAg
ICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
blNjb3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQp
OworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxMTIsNTEg
KzQxNDcsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAg
ICAgICAgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgobm9kZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAg
ICBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAg
Y29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShub2RlKTsKKyAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eTogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihp
bmRleC5ncHIoKSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eShub2RlKTsKKworICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7
CisgICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29t
cGlsZUluU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0
ZUluZGV4QW5kTW9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFz
SW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9k
ZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5l
eHRFeHRyYWN0TW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9k
ZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOworCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldERp
cmVjdFBuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZShub2RlKTsKKworICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKLSAgICAgICAgY29tcGls
ZUdldFByb3BlcnR5RW51bWVyYXRvcihub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckdldEJ5
VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAg
ICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgY29tcGlsZUdldEVu
dW1lcmF0b3JQbmFtZShub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsKKyAg
ICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgIGNvbXBpbGVUb0luZGV4U3Ry
aW5nKG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorCiAgICAgY2FzZSBQcm9maWxlVHlwZTogewogICAgICAgICBjb21waWxlUHJvZmls
ZVR5cGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggYjVlMWNjM2U0MmQyZmI0YzlkNGYx
MzEwN2U5OGVmZTBiMjA1ZTVjNy4uODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZhOGYx
MGE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCkBAIC0yMjQ2LDYgKzIyNDYsMzcwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSogbm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2Fz
ZSBBcnJheTo6QW55VHlwZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAg
Y2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6CisgICAgY2FzZSBBcnJheTo6U2VsZWN0
VXNpbmdQcmVkaWN0aW9uczoKKyAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBE
RkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
c3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRSZWdz
LmdwcigpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKKyAgICBj
YXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Cisg
ICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAg
ICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2Jq
ZWN0VXNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9k
ZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkg
PSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworCisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdHViSW5mbzsKKyAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQp
KSB7CisgICAgICAgICAgICBzdHViSW5mbyA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAg
ICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8uZ3ByKCk7CisgICAgICAgIH0KKworICAgICAgICBz
cGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIHNw
ZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0g
bV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElm
TmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CisK
KyAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9qaXQuY29k
ZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0
YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQz
Mk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgobV9qaXQpOworCisgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRG
R0pJVCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsK
KyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAg
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAg
IH0KKworICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOworCisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHQgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1v
ZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQsIG5vZGUs
IGZvcm1hdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVz
dWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1
bHRSZWcpOworCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2Fu
ZUNoYWluKCkpIHsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5jaElmTm90RW1w
dHkocmVzdWx0UmVnKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51
bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZF
bXB0eShyZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKKyAgICAgICAgfQorCisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsK
KyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KERhdGFGb3JtYXREb3VibGUpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVz
dWx0UmVnKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1Nh
bmVDaGFpbigpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xl
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHRSZWcpKTsK
KyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICAg
ICAgYm94RG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlICYmICFyZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCByZXN1bHRJc1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNo
YWluKCkgJiYgIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOworCisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcg
dGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IGZvcm1hdCkgPSBwcmVmaXgocmVzdWx0SXNVbmJveGVkID8gRGF0YUZvcm1hdERvdWJsZSA6IERh
dGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7Cisg
ICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZl
SW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
KSk7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQTmFOOworICAg
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJl
Zyk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJl
Zywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgICAgIGJv
eERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpT
VmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7
CisgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVncy5ncHIoKSk7CisgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MuZ3ByKCksIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKworICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdEdQUikpOworCisgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7
CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRh
Rm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwg
cmVzdWx0UmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdFJlZykpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5v
ZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3Vt
ZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSwgcHJl
Zml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgor
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJh
eTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJy
YXk6OlVpbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Cisg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eTogeworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUs
IHR5cGUsIHByZWZpeCk7CisgICAgfSB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CkBAIC0yNzEz
LDcgKzMwNzcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
CiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6IHsKICAgICAgICAgLy8gUmVsaWVzIG9uIFN0cmluZ0No
YXJBdCBub2RlIGhhdmluZyBzYW1lIGJhc2ljIGxheW91dCBhcyBHZXRCeVZhbAotICAgICAgICBj
b21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBzY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEFT
U0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9
PSBEYXRhRm9ybWF0Q2VsbCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVz
dWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTI3NDYsMzQ1ICszMTE1LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkFueVR5cGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAg
ICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBt
b2RlIHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVbmRl
Y2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKLSAgICAgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgbm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDApKSk7Ci0KLSAgICAgICAgICAgIHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
LSAgICAgICAgICAgIGluZGV4LnVzZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpCaWdV
aW50NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdp
dGhTeW1ib2wobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdC5ncHIoKSwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RkOjpvcHRpb25h
bDxHUFJUZW1wb3Jhcnk+IHN0dWJJbmZvOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHByb3BlcnR5KTsKLQotICAg
ICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgc3R1YkluZm9HUFIg
PSBzdHViSW5mby0+Z3ByKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLQotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljOwotICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0
LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRl
ZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUu
Zm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICAgICAgICAgIGlmICht
X3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNT
dHJpbmcpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5n
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAgICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTeW1ib2wpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzU3ltYm9sID0gdHJ1ZTsKLQotICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9q
aXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpERkdKSVQpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPiBzbG93UGF0aDsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0Nh
bGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCks
IHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBz
dHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LAotICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0
dWJJbmZvKCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0
aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQ
YXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgot
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29u
dGlndW91cyk7Ci0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUg
PSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFs
dWVSZWdzKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdC5ncHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0
QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAg
ICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3Jt
YXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0g
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSwgcmVzdWx0UmVnKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0
T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0
LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJ
bmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkp
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgICAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBGUFJSZWcgcmVz
dWx0UmVnID0gcmVzdWx0LmZwcigpOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
LQotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kc1NhbmVDaGFpbigpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZOYU4o
cmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9k
ZSk7CisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNW
YWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IHJl
c3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRP
ZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNB
c090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJSZWc+
IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmVn
ID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJv
eGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVn
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1
bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAqcmVzdWx0UmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwg
KnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
ICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAg
Ym94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1f
aml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRS
ZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgICAgICAgICBtX2ppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkp
LCByZXN1bHRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdFJlZykpOwotICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmlu
Zyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RB
cmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMy
QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OiB7Ci0gICAgICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwg
dHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU4MSw3ICszNjI1LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gZmFsc2U7Ci0gICAg
ICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdEdQUiwgdHlwZSwgY2Fu
U3BlY3VsYXRlKTsKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQm94ID0gZmFsc2U7Cisg
ICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKQEAgLTUyNjksNTIgKzUzMTQsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgR2V0RW51bWVyYWJs
ZUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChub2RlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkobm9k
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0
eTogewotICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KG5vZGUpOworCisgICAg
Y2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHks
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4g
c3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBj
b21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEdldFByb3Bl
cnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5
OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxlRW51
bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CisKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNl
IEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsK
KworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgY29tcGls
ZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5h
bWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7
Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CisKKyAgICBjYXNl
IEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFs
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAg
ICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0
b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBj
b21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckhhc093blBy
b3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAg
ICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CmluZGV4IDExNzZkM2U3YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBiZWYxZDAzOGIuLjVmNTFmMjI1
MTA0ZjliYTUyMjY5OGRkMDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMjcz
LDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1
dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5
VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKQEAgLTM1Miw2ICszNTMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAg
ICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAg
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5kZXggMmUyZjA3ZGZjN2U4YzEz
ZGRiMGVkZDVhMmQwN2E1ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcyMzBlMGUxYmQ0NDVmMzA2MjM0
MzdmY2Q2MzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTExNCw2ICsxMTQsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2Vu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVy
aWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
aW5kZXhlZExlbmd0aE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yX21vZGVTZXQsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSBc
CiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmxh
Z3MoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19sZW5ndGgsIEpTUm9wZVN0cmluZzo6b2Zm
c2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcjAsIEpTUm9wZVN0
cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGExYTVmZDI0NGNmMjExMDMyNjQxOTdhNzZhZTMwYzdm
NjBmNzllNjQuLjAzZjg2NTJjNmNiODJjNjIwMjBkMWU2NmJiNTlmNDY1OTFkODNlNGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTI4Niwx
OCArMjg2LDE1IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKICAg
ICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6CiAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNh
c2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdl
bmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHk6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBjYXNlIFBoYW50b21OZXdPYmpl
Y3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNmZlMjlkOTlmYTQ0MTQ5YzE0NmIyMWFi
NDEwNGM0MDgwMzY5ZjM3MS4uYzYzZTNmOTE4N2ZlMWRlMjgwYzA1NWQwYjY4ZDZlNGQ1MjFmOWJm
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApA
QCAtMTUyMyw0MCArMTUyMywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29tcGlsZVN0b3Jl
QmFycmllcigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFBy
b3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHkpOworICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkob3BlcmF0
aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBj
b21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21w
aWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eSgpOworICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoK
KyAgICAgICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBj
b21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0eSgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRE
aXJlY3RQbmFtZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZSgpOworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICAgICAgY29tcGlsZUVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmFi
bGVMZW5ndGgoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAg
ICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZSgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
KyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSgpOworICAgICAgICBjYXNlIEVudW1l
cmF0b3JJbkJ5VmFsOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgotICAgICAgICAg
ICAgY29tcGlsZVRvSW5kZXhTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHk6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKICAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOwpAQCAtNTAy
MCw3ICs1MDExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gd2UgZG9taW5hdGUgdGhlbS4KICAg
ICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIExWYWx1ZSBjb21waWxl
R2V0QnlWYWxJbXBsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAg
IHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTUwNDcsOCArNTAzOCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxp
dmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgaWYg
KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAg
ICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGZhc3RDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUwODAsOCArNTA3MCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBr
ZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgIGlmIChtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cykKICAgICAgICAgICAgICAgICBl
bnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVz
dWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZTogewpAQCAtNTEwMCw4ICs1MDg5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChyZXN1bHQsIHJlc3VsdCkpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbV9ub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkgJiYgIShtX25vZGUtPmZsYWdz
KCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcik7CkBAIC01MTQxLDE4ICs1MTMwLDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdElzVW5ib3hlZCkKLSAgICAg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jl
c3VsdCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUobV9v
dXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShEb3VibGUsIGZhc3RSZXN1bHQs
IHNsb3dSZXN1bHQpOworCisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OlVu
ZGVjaWRlZDogewogICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKIAogICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91
bmRzLCBub1ZhbHVlKCksIG1fbm9kZSwgbV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMy
WmVybykpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm4gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKQEAg
LTUxNjksOCArNTE1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE91
dE9mQm91bmRzLCBub1ZhbHVlKCksIG51bGxwdHIsIGlzT3V0T2ZCb3VuZHMpOwogICAgICAgICAg
ICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAg
ICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBtX291dC56
ZXJvRXh0UHRyKGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2Fk
NjQoYWRkcmVzcykpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQubG9hZDY0KGFkZHJlc3MpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01MTkyLDggKzUx
NzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVz
dWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhp
KEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogewpAQCAtNTI0Niw4ICs1MjMx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1
bHQsIG92ZXJmbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQucGhpKEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToK
QEAgLTUyNTYsMjQgKzUyNDAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG1fbm9kZSkpIHsKICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3Ry
aW5nLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvd09iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTdHJpbmco
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTdHJpbmcobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKSksIGxvd1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAg
ICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAx
KSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93SlNWYWx1ZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fbm9kZTsKQEAgLTUzNzMsOCArNTM1NCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgc2V0SlNWYWx1
ZShwYXRjaHBvaW50KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBw
YXRjaHBvaW50OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgpAQCAtNTM5MCw4ICs1MzcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KHJlc3Vs
dCkpOwogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtl
ZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5u
ZXdCbG9jaygpOwpAQCAtNTQxNywxMyArNTM5NiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2
ZS4KICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0KCk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmluZ0No
YXJBdEltcGwoKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKQEAgLTU0NDgsOSArNTQyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb2FkRnJvbUludFR5cGVkQXJyYXkocG9pbnRlciwgdHlw
ZSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNp
bmNlIHRoYXQga2VlcHMgc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICAgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29s
IGNhblNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KHJlc3VsdCwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0
KHR5cGUpKTsKQEAgLTU0NjksOCArNTQ0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhh
dCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKQEAgLTU0ODAsOCArNTQ1NCwyNCBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5
OjpVbnByb2ZpbGVkOgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJh
ZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBjb21waWxlR2V0QnlWYWxJbXBsKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBl
IHR5cGUgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlm
IChpc0ludCh0eXBlKSkgeworICAgICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRl
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KHJlc3VsdCwg
dHlwZSwgY2FuU3BlY3VsYXRlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisg
ICAgICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBEb3VibGUpCisgICAgICAgICAgICBzZXREb3Vi
bGUocmVzdWx0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAt
ODU3MSw3ICs4NTYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
SW50NjQsIGZhc3RSZXN1bHQsIGVtcHR5UmVzdWx0LCBzbG93UmVzdWx0KSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJBdCgpCisgICAgTFZhbHVlIGNvbXBpbGVTdHJp
bmdDaGFyQXRJbXBsKCkKICAgICB7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93U3RyaW5nKG1f
Z3JhcGguY2hpbGQobV9ub2RlLCAwKSk7CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMy
KG1fZ3JhcGguY2hpbGQobV9ub2RlLCAxKSk7CkBAIC04Njc5LDcgKzg2NjksMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAg
ICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMgc3RvcmFn
ZSBhbGl2ZS4KICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKEludDY0LCByZXN1bHRzKSk7CisgICAgICAgIHJldHVybiBtX291
dC5waGkoSW50NjQsIHJlc3VsdHMpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZVN0cmluZ0No
YXJBdCgpCisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBs
KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCkKQEAg
LTEyOTA2LDE3ICsxMjkwMSwxNiBAQCBwcml2YXRlOgogICAgICAgICBlbWl0U3RvcmVCYXJyaWVy
KGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJh
cnJpZXIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
U19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQorICAgIExWYWx1ZSBjb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5SW1wbChMVmFsdWUgaW5kZXgsIFNfSklUT3BlcmF0aW9uX0dDWiBz
bG93UGF0aE9wZXJhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkp
OwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMSkpOwogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCk7
CiAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewot
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAyKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2Uo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkp
OwogCiAgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbW9kZS50eXBlKCkg
PT0gQXJyYXk6OkludDMyID8KICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlBy
b3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKQEAgLTEyOTUx
LDExICsxMjk0NSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVS
ZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAg
ICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzOwogICAgICAgICAgICAgCkBAIC0xMjk4OSwxMiArMTI5ODIsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0g
ICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBz
bG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9v
dXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAg
ICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMzAyNiwxOTYgKzEz
MDE4LDMyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQs
IHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQog
CiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVy
bzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9i
amVjdCksIGJhc2UsIGluZGV4KSkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSk7CiAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpCisg
ICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAg
ICAgIHNldEJvb2xlYW4oY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwoaW5kZXgsIG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFBy
b3BlcnR5RW51bWVyYXRvcigpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5KSk7CisgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQorICAgICAgICAgICAgc2V0SlNW
YWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlv
bkdldFByb3BlcnR5RW51bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBTbG93UGF0aENhbGw+Ci0gICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHlJbXBs
KExWYWx1ZSBiYXNlLCBTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKQorICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKCkKICAgICB7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdp
bi5zZW1hbnRpYyk7Ci0gICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd1N0cmluZyhtX25vZGUt
PmNoaWxkMigpKTsKLSAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0g
bG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwogCi0gICAgICAgIExCYXNp
Y0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9j
ayBjb3JyZWN0U3RydWN0dXJlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBpZiAobV9ub2RlLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291
dC5ub3RaZXJvMzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSkpOwogCi0gICAgICAgIG1fb3V0
LmJyYW5jaChpc0NlbGwoYmFzZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAg
ICAgICAgICB1c3VhbGx5KGlzQ2VsbENhc2UpLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGluY3JlbWVudCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjaGVja0hhc1Byb3BlcnR5ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBj
b3JyZWN0U3RydWN0dXJlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRl
eCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0
aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjaGVja0hhc1Byb3Bl
cnR5KSwgdW5zdXJlKGluY3JlbWVudCkpOwogCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5u
b3RFcXVhbCgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFw
cy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSwKLSAgICAgICAg
ICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoY29ycmVjdFN0cnVjdHVyZSkpOworICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaW5jcmVtZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRl
eFBoaSA9IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4KTsKKyAgICAgICAgICAgIExWYWx1
ZSBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYWRkKGluZGV4UGhpLCBtX291dC5pbnQzMk9uZSk7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNyZW1lbnRlZEluZGV4UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
ZmluYWxJbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKGluY3JlbWVudGVkSW5kZXgpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lmxlc3NUaGFuKGluY3JlbWVudGVkSW5kZXgs
IG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cl9pbmRleExlbmd0aCkpLCB1bnN1cmUoY2hlY2tIYXNQcm9wZXJ0eSksIHVuc3VyZShjb250aW51
YXRpb24pKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb3JyZWN0U3RydWN0dXJlLCBzbG93
UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvcnJlY3RTdHJ1Y3R1cmVSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0hhc1Byb3BlcnR5KTsK
KyAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0
aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSwgaW5jcmVtZW50ZWRJbmRleFJlc3VsdCk7CisgICAgICAg
ICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4UGhpLCBtX291dC5hbmNob3IocHJvcGVy
dHlJbmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmluYWxQcm9wZXJ0eUluZGV4
ID0gbV9vdXQuYW5jaG9yKHByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgTFZhbHVlIGhhc1By
b3BlcnR5ID0gY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwocHJvcGVydHlJbmRleCwgb3Bl
cmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goaGFzUHJvcGVydHksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50
KSk7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAg
ICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIAotICAgICAgICAgICAgICAgIHZtQ2Fs
bChJbnQ2NCwgc2xvd1BhdGhDYWxsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBw
cm9wZXJ0eSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIExWYWx1ZSBmaW5h
bEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBmaW5hbEluY3JlbWVudGVkSW5kZXgsIGZpbmFsUHJv
cGVydHlJbmRleCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmJpdE9yKG1fb3V0Lnpl
cm9FeHQoZmluYWxJbmRleCwgSW50NjQpLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Ok51bWJl
clRhZyB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCwgc2xvd1Bh
dGhSZXN1bHQpKTsKKyAgICAgICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMCk7CisgICAgICAgIGlmIChtX25vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSAmJiBiYXNlRWRnZS51
c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxs
KGJhc2VFZGdlKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBt
X25vZGUsIG1fb3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCksIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpKTsKKworICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZENhY2hlLCBub1ZhbHVlKCksIG1fbm9kZSwgbV9vdXQubm90RXF1YWwobV9vdXQubG9h
ZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQp
LCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1f
b3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJv
MzIobW9kZSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwg
bV9vdXQuaW50MzJPbmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAg
IGluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVkSW5kZXgp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGluZGV4
LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
PDwgMzIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBMVmFs
dWUgYmFzZSA9IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7CiAg
ICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KCkK
KyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCgpCiAgICAgewotICAg
ICAgICBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSksIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSk7CisgICAgICAgIExWYWx1
ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIHNl
dEludDMyKG1fb3V0LmNhc3RUb0ludDMyKGJveGVkUGFpcikpOwogICAgIH0KIAotICAgIHZvaWQg
Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KCkKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJh
dG9yTmV4dEV4dHJhY3RNb2RlKCkKICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9uSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHkpOworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMVmFsdWUgaGlnaEJpdHMgPSBtX291dC5jYXN0
VG9JbnQzMihtX291dC5sU2hyKGJveGVkUGFpciwgbV9vdXQuY29uc3RJbnQzMigzMikpKTsKKyAg
ICAgICAgc2V0SW50MzIobV9vdXQuYml0QW5kKGhpZ2hCaXRzLCBtX291dC5jb25zdEludDMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKICAgICB9CiAK
LSAgICB2b2lkIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KCkKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHByb2JhYmx5IGhhdmUgYSBtZXRob2Qgb2YgdmFsdWUgcmVjb3ZlcnkgZm9yIHRoaXMg
bm9kZSBzaW5jZSBpdCdzICJlZmZlY3QiIGZyZWUgYnV0IGFsd2F5cyBsaXZlIGluIGJ5dGVjb2Rl
LgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKCkKICAg
ICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwobG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9uSW5TdHJ1Y3R1cmVQcm9wZXJ0eSk7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29y
aWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDMo
KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0aW9uQmxvY2sgPSBudWxscHRyOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBudWxscHRyOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG91dE9mQm91bmRzUmVzdWx0OworICAgICAgICBWYWx1ZUZyb21CbG9jayBjYWNo
ZWROYW1lUmVzdWx0OworCisgICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gT3B0aW9uU2V0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT46OmZyb21SYXcobV9ub2RlLT5lbnVtZXJhdG9yTWV0
YWRhdGEoKSk7CisKKyAgICAgICAgaWYgKHNlZW5Nb2Rlcy5jb250YWluc0FueSh7IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSB9KSkgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJbmRl
eCA9IG51bGxwdHI7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kc0Jsb2NrID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvYWRQcm9wZXJ0eU5h
bWVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzLmNvbnRhaW5zKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKSB7CisgICAgICAgICAgICAgICAg
Y2hlY2tJbmRleCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9u
QmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC50ZXN0SXNaZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSksIHVuc3VyZShjaGVja0luZGV4KSwgdW5zdXJlKG9wZXJh
dGlvbkJsb2NrKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY2hlY2tJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y2hlY2tJbmRleCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIG91dE9mQm91bmRzID0gbV9vdXQu
YWJvdmVPckVxdWFsKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5icmFuY2gob3V0T2ZCb3VuZHMsIHVuc3VyZShvdXRPZkJvdW5kc0Jsb2Nr
KSwgdW5zdXJlKGxvYWRQcm9wZXJ0eU5hbWVCbG9jaykpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHNCbG9j
ayk7CisgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9hZFByb3BlcnR5TmFtZUJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbmFtZXNWZWN0b3IgPSBtX291dC5sb2FkUHRyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3IpOworICAgICAgICAgICAgICAgIGNhY2hlZE5hbWVSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuemVyb0V4dFB0cihtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hl
YXBzLldyaXRlQmFycmllckJ1ZmZlcl9idWZmZXJDb250ZW50cy5hdEFueUluZGV4KCksIG5hbWVz
VmVjdG9yLCBtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlUHRyKSkpKTsKKyAgICAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBWYWx1ZUZyb21CbG9jayBvcGVyYXRpb25SZXN1bHQ7CisKKyAgICAg
ICAgaWYgKHNlZW5Nb2Rlcy5jb250YWlucyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlKSkgeworICAgICAgICAgICAgaWYgKG9wZXJhdGlvbkJsb2NrKQorICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG9wZXJhdGlvbkJsb2NrKTsKKyAgICAgICAgICAgIG9wZXJhdGlv
blJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBpbmRleCwg
bW9kZSwgZW51bWVyYXRvcikpOworICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY29udGludWF0aW9uKQorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uKTsKKworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKEludDY0KTsKKyAgICAg
ICAgQVNTRVJUKG91dE9mQm91bmRzUmVzdWx0IHx8IGNhY2hlZE5hbWVSZXN1bHQgfHwgb3BlcmF0
aW9uUmVzdWx0KTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaUlmU2V0KHJlc3VsdCwg
b3V0T2ZCb3VuZHNSZXN1bHQsIGNhY2hlZE5hbWVSZXN1bHQsIG9wZXJhdGlvblJlc3VsdCk7Cisg
ICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRE
aXJlY3RQbmFtZSgpCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKCkKICAgICB7
Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2Vs
bChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwotICAgICAgICBMVmFsdWUgcHJvcGVy
dHkgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7Ci0gICAgICAgIExW
YWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Ci0g
ICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMykpOworICAgICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApOworICAgICAgICBFZGdlIHByb3BlcnR5TmFtZUVkZ2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMSk7CisgICAgICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMik7CisgICAgICAgIEVkZ2UgaW5kZXhFZGdlID0gbV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDMpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrT2Zmc2V0
ID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lTG9hZCA9IG1f
b3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mTGluZUxvYWQgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExWYWx1ZSBiYXNlID0gREZHOjppc0NlbGwoYmFzZUVkZ2UudXNlS2lu
ZCgpKSA/IGxvd0NlbGwoYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikgOiBsb3dK
U1ZhbHVlKGJhc2VFZGdlKTsKKworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IHN0b3JhZ2VFZGdl
ID8gbG93U3RvcmFnZShzdG9yYWdlRWRnZSkgOiBudWxscHRyOworICAgICAgICAvLyBXZSBoYXZl
IHRvIG1hdGVyaWFsaXplIHRoZSBwcm9wZXJ0eU5hbWUgaGVyZSBpbiBjYXNlIGl0IHJlcXVpcmVz
IGJveGluZyBzaW5jZSB0aGUgSUMgcGF0aCB3b24ndCBkb21pbmF0ZSBzdWJzZXF1ZW50IHVzZXMg
aW4gc3Vic2VxdWVudCBub2Rlcy4KKyAgICAgICAgLy8gSWYgaXQncyBhbiBJbnQzMiBhbmQgd2Ug
dXNlIGl0IGFzIHN1Y2ggdGhpcyBib3hpbmcgd2lsbCBiZSBEQ0UnZCBieSBiMyBsYXRlciBhbnl3
YXkuCisgICAgICAgIGxvd0pTVmFsdWUocHJvcGVydHlOYW1lRWRnZSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKworCisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKGluZGV4RWRn
ZSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDQpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCA1KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJc0Nl
bGxCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrU3Ry
dWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjaGVj
a0lubGluZU9yT3V0T2ZMaW5lQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBpbmxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBvdXRPZkxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBnZW5lcmljSUNCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2Us
IG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1
cmVJRCkpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNl
dCkpOworICAgICAgICBMVmFsdWUgaXNOb3ROYW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9k
ZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
IHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgICAgICBtX291
dC5icmFuY2goaXNOb3ROYW1lZCwgdW5zdXJlKGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNr
SXNDZWxsQmxvY2spKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGNoZWNrT2Zmc2V0LCBpbmxpbmVMb2FkKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSksCi0gICAgICAg
ICAgICB1bnN1cmUob3V0T2ZMaW5lTG9hZCksIHVuc3VyZShpbmxpbmVMb2FkKSk7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNoZWNrSXNDZWxsQmxvY2spOworICAgICAgICBtX291dC5icmFuY2go
aXNDZWxsKGJhc2UsIHByb3ZlblR5cGUoYmFzZUVkZ2UpKSwgdXN1YWxseShjaGVja1N0cnVjdHVy
ZUJsb2NrKSwgcmFyZWx5KGdlbmVyaWNJQ0Jsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY2hlY2tTdHJ1Y3R1cmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRDsKKyAg
ICAgICAgYXV0byBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2Uubm9kZSgpKS5t
X3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpCisgICAg
ICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFz
ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworCisgICAgICAgIExWYWx1ZSBoYXNFbnVt
ZXJhdG9yU3RydWN0dXJlID0gbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1
cmVJRCkpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVz
dWx0OworICAgICAgICBpZiAoaW5kZXhFZGdlLm5vZGUoKSA9PSBwcm9wZXJ0eU5hbWVFZGdlLm5v
ZGUoKSkgeworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5s
aW5lT3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhiYWRTdHJ1Y3R1cmVTbG93UGF0aCk7CisgICAgICAgICAgICBi
YWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9w
ZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBiYXNlLCBpbmRleCwgZW51bWVyYXRvcikpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNo
ZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOwogCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlubGluZUxvYWQsIG91dE9mTGluZUxvYWQpOworICAgICAg
ICBtX291dC5hcHBlbmRUbyhjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spOworICAgICAgICBM
VmFsdWUgaW5saW5lQ2FwYWNpdHkgPSBudWxscHRyOworICAgICAgICBib29sIGhhc05vT3V0T2ZM
aW5lUHJvcGVydGllcyA9IGZhbHNlOworICAgICAgICBpZiAoc3RydWN0dXJlKSB7CisgICAgICAg
ICAgICBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOworICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpbmxp
bmVDYXBhY2l0eSkKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQubG9hZDMyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNh
cGFjaXR5KTsKKyAgICAgICAgTFZhbHVlIGlzSW5saW5lID0gaGFzTm9PdXRPZkxpbmVQcm9wZXJ0
aWVzID8gbV9vdXQuaW50MzJPbmUgOiBtX291dC5iZWxvdyhpbmRleCwgaW5saW5lQ2FwYWNpdHkp
OworICAgICAgICBtX291dC5icmFuY2goaXNJbmxpbmUsIHVuc3VyZShpbmxpbmVMb2FkQmxvY2sp
LCB1bnN1cmUob3V0T2ZMaW5lTG9hZEJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
aW5saW5lTG9hZEJsb2NrKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCisgICAgICAgICAgICBtX291dC5sb2Fk
NjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLAogICAg
ICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgU2NhbGVFaWdo
dCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSkpOwogICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9h
ZCwgc2xvd0Nhc2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFz
ZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhv
dXRPZkxpbmVMb2FkQmxvY2spOworICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICBz
dG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7
CisKICAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0LnNpZ25FeHQzMlRvNjQoCi0gICAg
ICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkp
KSkpOworICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgaW5saW5lQ2FwYWNp
dHkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJl
c3VsdCA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNl
SW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRl
eCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOwogICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dDYXNlUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKAotICAgICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRCeVZhbCwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhnZW5lcmljSUNC
bG9jayk7CisgICAgICAgIExWYWx1ZSBnZW5lcmljUmVzdWx0ID0gY29tcGlsZUdldEJ5VmFsSW1w
bCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50
eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAg
IGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpCisgICAgICAgICAg
ICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveEludDMyKGdlbmVyaWNSZXN1bHQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBzdHJpY3RJbnQ1MlRvSlNW
YWx1ZShnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmIChnZW5lcmljUmVzdWx0LT50
eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveERvdWJsZShn
ZW5lcmljUmVzdWx0KTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGlubGluZVJlc3Vs
dCwgb3V0T2ZMaW5lUmVzdWx0LCBzbG93Q2FzZVJlc3VsdCkpOwotICAgIH0KKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdlbmVyaWNSZXN1bHQp
OworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICB2b2lkIGNvbXBpbGVH
ZXRFbnVtZXJhYmxlTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMy
KGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3Ro
KSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJQ1Jlc3VsdCwgb3V0T2ZMaW5lUmVz
dWx0LCBpbmxpbmVSZXN1bHQpOworICAgICAgICBpZiAoYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1
bHQpCisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHJlc3VsdCwgYmFkU3RydWN0
dXJlU2xvd1BhdGhSZXN1bHQpOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9y
SGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xvd1BhdGhGdW5jdGlvbikKICAgICB7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51
bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApOworICAgICAgICBMVmFsdWUgYmFzZSA9IGJhc2VFZGdlLnVzZUtpbmQoKSA9PSBD
ZWxsVXNlID8gbG93Q2VsbChiYXNlRWRnZSkgOiBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAgICAg
ICAgTFZhbHVlIHByb3BlcnR5TmFtZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9
IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsKIAotICAgICAgICBMQmFz
aWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IG91dE9mQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNO
YW1lZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxs
QmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBtYXRjaGVzU3Ry
dWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvcGVy
YXRpb25CbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkpLAotICAgICAgICAgICAg
dXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpLCB1bnN1cmUoaXNOYW1lZEJsb2Nr
KSwgdW5zdXJlKG9wZXJhdGlvbkJsb2NrKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzTmFt
ZWRCbG9jayk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpbkJvdW5kcywgb3V0T2ZCb3VuZHMpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0
LmxvYWRQdHIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91bmRz
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5i
YXNlSW5kZXgobV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKGJhc2VFZGdlKSks
IHVuc3VyZShpc0NlbGxCbG9jayksIHVuc3VyZShvcGVyYXRpb25CbG9jaykpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbEJsb2NrKTsKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlE
ID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51
bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJl
SUQpKSwKKyAgICAgICAgICAgIHVzdWFsbHkobWF0Y2hlc1N0cnVjdHVyZUJsb2NrKSwgcmFyZWx5
KG9wZXJhdGlvbkJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obWF0Y2hlc1N0cnVj
dHVyZUJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmFtZWRSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuYm9vbGVhblRydWUpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHMsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVOdWxsKSk7CisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG9wZXJhdGlvbkJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3BlcmF0aW9u
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbih2bUNhbGwoSW50NjQsIHNsb3dQYXRo
RnVuY3Rpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5TmFtZSwg
aW5kZXgsIG1vZGUpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91
bmRzUmVzdWx0KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIG5hbWVkUmVzdWx0LCBvcGVyYXRpb25S
ZXN1bHQpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1Bu
YW1lKCkKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbCgpCiAgICAgewotICAgICAg
ICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIExC
YXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgb3V0T2ZCb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC5iZWxvdyhpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSksCi0gICAgICAgICAg
ICB1c3VhbGx5KGluQm91bmRzKSwgcmFyZWx5KG91dE9mQm91bmRzKSk7Ci0KLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgb3V0T2ZCb3VuZHMp
OwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoZW51bWVyYXRvciwgbV9o
ZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAot
ICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5iYXNlSW5kZXgobV9oZWFwcy5KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9y
YWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRzLCBjb250aW51
YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkJvdW5kc1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlTnVsbCkpOwotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
SW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRPZkJvdW5kc1Jlc3VsdCkpOworICAgICAgICBjb21w
aWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsKTsKICAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZygpCisKKyAgICB2b2lkIGNv
bXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoKQogICAgIHsKLSAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25Ub0luZGV4U3Ry
aW5nLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBpbmRleCkpOworICAgICAgICBjb21waWxl
RW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCkK
QEAgLTE3MzQ0LDcgKzE3NDY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldEludDMyKHJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgaWYgKG1fbm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsK
ICAgICAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1
ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihyZXN1bHQsIG1fb3V0LmludDMyWmVybykpOwpA
QCAtMjAyOTYsNiArMjA0MjEsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKICAgICB9CiAKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGludHMgcmlnaHQgbm93
LgorICAgIFBhdGNocG9pbnRWYWx1ZSogZGF0YUxvZ0ZvckRlYnVnZ2luZyhjb25zdCBjaGFyKiBw
cmVmaXgsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcmVz
dWx0ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgcmVzdWx0LT5lZmZlY3RzLndy
aXRlc0xvY2FsU3RhdGUgPSB0cnVlOworICAgICAgICByZXN1bHQtPmFwcGVuZCh2YWx1ZSwgVmFs
dWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBUeXBlIHZhbHVlVHlwZSA9IHZh
bHVlLT50eXBlKCk7CisgICAgICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAg
ICAgICAgICAgaml0LnByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gSW50MzIpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPGludDMyX3Q+KEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
cHJlZml4LCBjb250ZXh0LmdwcjxKU1ZhbHVlPihHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAg
ICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJp
bGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KICAgICAKICAgICBWTSYgdm0oKSB7IHJl
dHVybiBtX2dyYXBoLm1fdm07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmlu
ZGV4IDJkZmRlODZmNzJiZWQ3M2Q3M2RjOGFlYjVkNGIyYjM2YzhiMjA1MGUuLmFiODI1Y2Q3ZTRl
YjAyZjg1YTAwNGFkMDVhMjBjNTEzMjVmMmE4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0NSw2ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRJbmNv
bWluZ1RvUGhpKExWYWx1ZSBwaGksIFZhbHVlRnJvbUJsb2NrKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBQYXJhbXM+CiAgICAgdm9pZCBhZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGksIFZh
bHVlRnJvbUJsb2NrLCBQYXJhbXMuLi4gdGhlUmVzdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gUGFyYW1zPgorICAgIHZvaWQgYWRkSW5jb21pbmdUb1BoaUlmU2V0KExWYWx1ZSBwaGksIFBh
cmFtcy4uLiB0aGVSZXN0KTsKICAgICAKICAgICBMVmFsdWUgb3BhcXVlKExWYWx1ZSk7CiAKQEAg
LTQ5Myw2ICs0OTUsMTYgQEAgaW5saW5lIHZvaWQgT3V0cHV0OjphZGRJbmNvbWluZ1RvUGhpKExW
YWx1ZSBwaGksIFZhbHVlRnJvbUJsb2NrIHZhbHVlLCBQYXJhbXMuLi4KICAgICBhZGRJbmNvbWlu
Z1RvUGhpKHBoaSwgdGhlUmVzdC4uLik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFBhcmFt
cz4KK2lubGluZSB2b2lkIE91dHB1dDo6YWRkSW5jb21pbmdUb1BoaUlmU2V0KExWYWx1ZSBwaGks
IFBhcmFtcy4uLiB2YWx1ZXMpCit7CisgICAgYXV0byBhZGRQaGkgPSBbJl0gKFZhbHVlRnJvbUJs
b2NrIHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIGFkZEluY29taW5n
VG9QaGkocGhpLCB2YWx1ZSk7CisgICAgfTsKKyAgICAoYWRkUGhpKHZhbHVlcyksLi4uKTsKK30K
KwogQUxMT1dfVU5VU0VEX1BBUkFNRVRFUlNfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNzMxNzEwMDk2Y2YzZTI0OThh
ZTQ1ZGRhMjZhYTgyZTc5Y2Q0NmE0ZS4uNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRm
NTE5YjA2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wu
cmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTEzOCw2
ICsxMzgsNyBAQCBtb2R1bGUgRFNMCiAjaW5jbHVkZSAiR2V0QnlWYWxIaXN0b3J5LmgiCiAjaW5j
bHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJJdGVyYXRpb25Nb2RlTWV0YWRhdGEuaCIK
KyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGNvZGUu
aCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJZFN0
YXR1cy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaApp
bmRleCA0NDQ2MzVlOTgwZDkwYWY4MzdlYmQ2M2I5NjJmYWVkZTJlYzUzNTAzLi5kODc5YzkwYmUz
MTE3ODYyMzNmNTI2YjE4M2VkZjFjYjNjN2JiMzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KENhbGxGcmFtZSop
OwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ29kZUJsb2NrKik7
CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU1Njb3BlKik7Ci0g
ICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU09iamVjdCopOworICAg
ICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNDZWxsKik7CiAgICAgICAg
IEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShFbmNvZGVkSlNWYWx1ZSk7CiAKICAg
ICAgICAgaW50MzJfdCBpKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKaW5kZXggYzU2ZWY1ZTQ1NTRjYjEwM2FiZWJl
NzJlNjI5OGY4YzQ4YWFkOTg2MC4uNTkzZWY2NjY4ZGUyZTAzYTY1OWIzOWYzMWFmNjBmODhjMjc4
Mzk4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlcklubGluZXMuaApAQCAtNjMsNyArNjMsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBS
ZWdpc3Rlcjo6b3BlcmF0b3I9KENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHJldHVybiAqdGhp
czsKIH0KIAotQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShKU09i
amVjdCogb2JqZWN0KQorQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9y
PShKU0NlbGwqIG9iamVjdCkKIHsKICAgICB1LnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUob2JqZWN0KSk7CiAgICAgcmV0dXJuICp0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggYWM4YjUxMzdkODUzNTQ1MDZhZWVkY2VkYmQxYzVi
ZDc3MjU3OWMwMS4uMGI0YzJiOWJlMGY1ZmZmMTUxYTNiMDdlOWFhMjRmY2NmOTA1MDM5OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xODgsNyAr
MTg4LDcgQEAgcHVibGljOgogICAgICAgICBzdG9yZTMyKHJlZ3MudGFnR1BSKCksIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBUYWdPZmZzZXQp
KTsKICNlbmRpZgogICAgIH0KLSAgICAKKwogICAgIHZvaWQgbG9hZFZhbHVlKEFkZHJlc3MgYWRk
cmVzcywgSlNWYWx1ZVJlZ3MgcmVncykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTg4
OSw3ICs4ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAg
ICAgQmVsb3csIEFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0
aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBpbmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUo
R1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJhbmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCA0MmI4Y2FmNWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0
Li5jOWIwMWMwZDA1YTVkNmYwYzExZDBhMzczODFjMmQ5OGVmYTQ3MTMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC0zMDgsMTAgKzMwOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3By
ZWFkKQogICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBE
RUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJh
YmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpCiAgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAg
ICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCiAgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfc2NvcGVkX2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25l
ZF9hcmd1bWVudHMpCkBAIC0zNjUsNiArMzYyLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV9pZF93aXRoX3RoaXMpCiAg
ICAgICAgIERFRklORV9PUChvcF9nZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICBERUZJTkVfT1Ao
b3BfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfbmV4dCkKKyAg
ICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5F
X09QKG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3ByaXZhdGVf
bmFtZSkKICAgICAgICAgREVGSU5FX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAgICBE
RUZJTkVfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTQ3MywxNCArNDc0LDYgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0
X2Zyb21fYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX2FyZ3VtZW50cykK
IAotICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkK
LSAgICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkK
LSAgICAgICAgREVGSU5FX09QKG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAg
ICBERUZJTkVfT1Aob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfT1Ao
b3BfZ2V0X2RpcmVjdF9wbmFtZSkKLSAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3Jfc3Ry
dWN0dXJlX3BuYW1lKQotICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lKQotICAgICAgICAgICAgCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNr
ZW5fcHJvbG9ndWUpCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bCkKIApAQCAtNTc4LDYgKzU3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9nZXRfcHJpdmF0ZV9uYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc2V0
X3ByaXZhdGVfYnJhbmQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja19wcml2
YXRlX2JyYW5kKQpAQCAtNjA5LDcgKzYwMyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3Bfc3ViKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2VudW1l
cmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgpAQCAt
NjQyLDExICs2MzUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChub3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKHN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuc3Ry
aWN0ZXEpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9kaXJlY3RfcG5hbWUp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9wcm90b3R5cGVfb2YpCi0gICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluX3N0cnVjdHVyZV9w
cm9wZXJ0eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCmluZGV4IDQ4N2E1YWM1YjhlNWQ4YTlkODBiMmM2ZDMwNmUwODE1MjFiODI4MTQuLjRkYTdh
MmZkNjZmMTUwY2ZjZDM1OTAyZmU5M2U1NGZlZDJhNWFkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaApAQCAtNDUzLDYgKzQ1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJl
Z2lzdGVyLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJh
bWVSZWdpc3Rlcik7CiAKICAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYyk7CiAgICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CkBAIC00NjksNyArNDcwLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0
YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFn
MiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKICAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklE
IGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1
YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKICAg
ICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMiBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKICAgICAgICAgdm9pZCBlbWl0U3Rv
cmVDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXND
ZWxsID0gZmFsc2UpOwpAQCAtNjcwLDIxICs2NzAsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1
cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2lu
X3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CisgICAgICAgIHZvaWQgZ2VuZXJhdGVHZXRC
eVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVu
YW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgorICAgICAgICB2b2lkIGVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgT3Bjb2RlVHlwZSYsIFNs
b3dQYXRoRnVuY3Rpb25UeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaW5f
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJh
dG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTczNSw3ICs3MzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAg
dm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmNmRiM2Y1OWM0YWE0ZTAyN2Ex
NTYxMWVkYmJhMjYxY2FkOGVmZWQ2Li45YmExMGVkNjc3MmZhZWMzZjIwZTYzNGJhYmUxNGFkZDlh
MTA4OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTE2
OTIsNDYgKzE2OTIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wQ29kZVR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9vcF9o
YXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q29kZVR5cGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1
Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzRW51bWVyYWJsZVN0
cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8
T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
SW1wbDxPcEluU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIo
KTsKLSAgICAKKwogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICAKKwogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgogICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKQEAgLTE3MzksNyAr
MTcwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0CiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtC
dWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICAKKwogICAgIHBhdGNoQnVmZmVyLmxp
bmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogCkBAIC0xNzQ4LDcg
KzE3MTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBtX2NvZGVCbG9jaywgcGF0
Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUgaGFzX2lu
ZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAg
IAorCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsK
ICAgICAgICAgYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpOwogICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWM7CkBAIC0xNzU4LDE3MSArMTcyNCw2IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVy
YWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29k
ZUluZGV4KTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwg
cHJvcGVydHksIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMSk7
Ci0KLSAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAtIHdlJ3JlIHplcm8tZXh0
ZW5kaW5nIGFuIGludDMyLiBPbiB0aGUgaG90IHBhdGggdGhpcyBkb2Vzbid0IG1hdHRlci4KLSAg
ICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWludDMyIGFnYWluc3QgdGhl
IG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBpZgotICAgIC8vIG51bWJl
ciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5cyBsZXNzIHRoYW4gaW50
bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlvbgotICAgIC8vIHNpemUgaXMgYWx3YXlzIGxl
c3MgdGhhbiA0R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwgaGF2ZSBiZWVuIGNvcnJl
Y3QgKGFuZCBleHRlbmRpbmcgdGhlIHZhbHVlCi0gICAgLy8gdG8gNjQtYml0cyBpcyBuZWNlc3Nh
cnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0aW9uLiBXZSB6ZXJvIGV4
dGVuZCByYXRoZXIgdGhhbiBzaWduCi0gICAgLy8gZXh0ZW5kaW5nIHNpbmNlIGl0IG1ha2VzIGl0
IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNhc2UuCi0gICAgemVyb0V4
dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1No
YXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlN
b2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLQotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1l
bnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0
LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLQot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0g
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlW
YWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwg
cHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotCi0g
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQ7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihieVZhbEluZm8pLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0KT4o
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBCeVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGJ5VmFsSW5mbyk7Ci0KLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBj
YWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERp
cmVjdFBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBi
YXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICAvLyBD
aGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0
ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
LQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwot
ICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQs
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleE9mZnNldCgpKSk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91
bmRzLmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEp
OwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBp
bkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7Ci0KLSAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOwot
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0KLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRp
bWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCA0ZDc0MTI2
YmUxZTNkZTQzMGQzYTZkOWNiN2ZkZGI2ZGM4NmY3ZWI0Li5jYTMyZGMxYzU2ZTYyN2FiNmUwZTYy
NjllNTM5ODEzY2VlZTdkMGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCkBAIC0xMTQyLDQ3ICsxMTQyLDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IE9wQ29kZVR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1w
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ29kZVR5cGU+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICBlbWl0TG9hZFBh
eWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19vd25fc3RydWN0
dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0cnVjdHVyZVBy
b3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5TdHJ1Y3R1cmVQ
cm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAorCiAgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJh
eU1vZGUsIGJhZFR5cGUsIG51bGxwdHIpOwpAQCAtMTE5MCw3ICsxMTU1LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHQKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5s
aW5lQ2FjaGUpOwotICAgIAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbElu
Zm8tPnNsb3dQYXRoVGFyZ2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlW
YWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAKQEAgLTExOTksMTcwICsxMTY0LDExIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREVfRk9SX1NUVUIoCiAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1
YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0
YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5B
ZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRC
eVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKLQotICAg
IGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SW50MzIocmVnVDMpKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3Jy
ZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlz
IGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMg
YSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBm
YWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMg
YWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0gICAg
Ly8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcg
d2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAgICAvLyB0
byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2Fs
Y3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAvLyBleHRlbmRp
bmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNs
b3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLQotICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJs
ZUp1bXAgYmFkVHlwZTsKLQotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlw
ZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9
IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSwg
YnlWYWxJbmZvKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotCi0gICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVn
VDApOwotCi0gICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUs
IGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIGJ5VmFsSW5mbyk7Ci0KLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNs
b3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwot
Ci0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0g
ICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9y
LCByZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRM
b2FkUGF5bG9hZChpbmRleCwgcmVnVDIpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0
aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGlu
ZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIGxvYWQzMihCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwg
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDIpOwotICAgIG5lZzMyKHJlZ1QyKTsK
LSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFt
ZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRMb2FkUGF5
bG9hZChpbmRleCwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdU
MSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNW
ZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVn
VDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCByZWdUMik7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJp
Y1BuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdExv
YWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3Is
IHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUlu
ZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcp
LCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwg
cmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZWdUMik7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDE1
ZTFkMzQ1NzliNmQ0YzhjMTcwZDIzNTBjNmMzNjQ0M2ZmZWE0MTUuLmYwNTM5NWM4MjBjNGM0OGYw
MTNjODk5ZGIwNTcxZDVmNmE3Y2IxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5j
bHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCkBAIC04NiwxMCArODcsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgordm9pZCBKSVQ6OmdlbmVyYXRlR2V0
QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKQEAgLTEzNiw2ICsxMzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICB9CiB9
CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9i
eV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQogewpAQCAtMjk3Nyw2ICsyOTgzLDE5
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwogCit2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JOZXh0PigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisKKyAgICBKdW1wTGlzdCBk
b25lOworICAgIEp1bXBMaXN0IG9wZXJhdGlvbkNhc2VzOworCisgICAgR1BSUmVnIG1vZGVHUFIg
PSByZWdUMDsKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSByZWdUMTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QyOworCisgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2Ug
dGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBM
TEludC4KKyAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgICAgIEdQUlJlZyBlbnVt
ZXJhdG9yR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgZW51bWVyYXRvckdQUik7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFu
Y2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBpbmRleEdQUik7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RF
cXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgbW9kZUdQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAg
ICAgSnVtcCBub3RJbml0ID0gYnJhbmNoVGVzdDMyKFplcm8sIG1vZGVHUFIpOworICAgICAgICAv
LyBOZWVkIHRvIHVzZSBhZGQ2NCBzaW5jZSB0aGlzIGlzIGEgSlNWYWx1ZSBpbnQzMi4KKyAgICAg
ICAgYWRkNjQoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUik7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgbm90SW5pdC5saW5rKHRoaXMp
OworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90
PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSwgYWRkcmVzc0Zv
cihtb2RlKSk7CisKKyAgICAgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgZW51bWVyYXRvckdQUik7CisgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGhpZ2ggYml0cyBmcm9tIHRoZSBudW1iZXIgZW5jb2Rp
bmcuCisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigtMSksIGluZGV4R1BSKTsKKyAgICAgICAg
bG9hZFB0cihCYXNlSW5kZXgoZW51bWVyYXRvckdQUiwgaW5kZXhHUFIsIFNjYWxlUHRyKSwgZW51
bWVyYXRvckdQUik7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5h
bWUsIGVudW1lcmF0b3JHUFIpOworICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAg
ICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
TnVsbCgpLCBhZGRyZXNzRm9yKHByb3BlcnR5TmFtZSkpOworICAgICAgICBkb25lLmFwcGVuZChq
dW1wKCkpOworICAgIH0KKworICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsodGhpcyk7CisKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2VudW1lcmF0b3JfbmV4dCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKworICAg
IGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+
KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHlOYW1lOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKKworICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKKworICAgIGF1dG8gcmVzdWx0
R1BSID0gcmVnVDA7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworCisgICAgb3I4KHJlZ1QyLCBBYnNv
bHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAvLyBUaGlzIGlzIGFsd2F5cyBh
biBpbnQzMiBlbmNvZGVkIHZhbHVlLgorICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0g
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJp
Y01vZGUpKTsKKworICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOworICAgIEp1bXAgc3RydWN0dXJl
TWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAg
Ly8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVzdWx0
R1BSKTsKKworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlc3VsdEdQUik7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAg
c3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVN
aXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisKKyAgICBpc05vdE93
blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpKTsKKyAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5k
ZXguCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworCisgICAgaXNO
b3RJbmRleGVkLmxpbmsodGhpcyk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHJlZ1QyKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKKworICAgIGRvbmVDYXNlcy5saW5r
KHRoaXMpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJ
VDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlIGdlbmVyYWxDYXNlKQoreworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKworICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwor
ICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRh
ZGF0YSkpOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
KSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgc2xvd0Nhc2VzLmxpbmsodGhpcyk7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZ2VuZXJhbENhc2UpOworICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3Vy
cmVudEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckluQnlW
YWw+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eT4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7
Cit9CisKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCA1OGU1ZDUyZmU1YjA4YWUyOWUzZTVkZGRlM2Q3
NDY3OTY3ZjIzMDE5Li43NWQwYmQ3ZjZlZjM1Yzc2MjczMTNmMjZiYTY1YTE2OGQ4M2I5NDU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKQEAgLTE1MDUsNiArMTUwNSwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50
ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdGVt
cGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0
cnVjdGlvbiopOwogCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3Jf
bmV4dCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKKyAgICBzbG93
UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19v
d25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxV
RTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNhMDAxYTU2NTVlYTFiYjFkYjU5NTczY2Y2
MDguLmU3MTgzYTcyYTM2OGYxYTI4MDQ2ODRkMmIwNzY0N2YyMjA2OGYxMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAg
LTE5OTIsMTkgKzE5OTIsMTQgQEAgc2xvd1BhdGhPcChjcmVhdGVfZ2VuZXJhdG9yKQogc2xvd1Bh
dGhPcChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQogc2xvd1BhdGhPcChkZWZpbmVfYWNjZXNzb3Jf
cHJvcGVydHkpCiBzbG93UGF0aE9wKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotc2xvd1BhdGhPcChl
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCi1zbG93UGF0aE9wKGVudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKQogc2xvd1BhdGhPcChnZXRfYnlfdmFsX3dpdGhfdGhpcykKLXNsb3dQYXRoT3AoZ2V0
X2RpcmVjdF9wbmFtZSkKLXNsb3dQYXRoT3AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQogc2xvd1Bh
dGhPcChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLXNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCitz
bG93UGF0aE9wKGVudW1lcmF0b3JfbmV4dCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9nZXRfYnlf
dmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2luX2J5X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KQogCiBpZiBub3QgSlNWQUxVRTY0Ci0gICAgc2xvd1BhdGhP
cChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xvd1BhdGhPcChoYXNf
b3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICBzbG93UGF0aE9wKGluX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKICAgICBzbG93UGF0aE9wKGdldF9wcm90b3R5cGVfb2YpCiBlbmQKIApAQCAtMjAyMSw3
ICsyMDE2LDYgQEAgc2xvd1BhdGhPcChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2Rl
Y2xfaW5fZXZhbCkKIHNsb3dQYXRoT3Aoc3ByZWFkKQogc2xvd1BhdGhPcChzdHJjYXQpCiBzbG93
UGF0aE9wKHRocm93X3N0YXRpY19lcnJvcikKLXNsb3dQYXRoT3AodG9faW5kZXhfc3RyaW5nKQog
c2xvd1BhdGhPcCh0eXBlb2YpCiBzbG93UGF0aE9wKHR5cGVvZl9pc19vYmplY3QpCiBzbG93UGF0
aE9wKHR5cGVvZl9pc19mdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggYmQ4ODU1ZWJmZDZmYzE5YjE1
YzFiNTg4NmQ0ZmE1NTY0MzgyZDg3ZC4uOGE1ZjdkMjNlNjQ3NjNiYTI1OWUxYjJjNWQ4N2Y4ZDE2
YjgyOWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTMxNDEsMzQgKzMxNDEsNiBAQCBsbGludE9wKG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsLCBPcExvZ1NoYWRvd0NoaWNrZW5UYWlsLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaQogICAgIGRpc3BhdGNoKCkKIGVuZCkKIAotbWFjcm8gaGFzU3RydWN0dXJlUHJv
cGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybiwgc2xvd1BhdGhDYWxsKQotICAg
IGdldChtX2Jhc2UsIHQwKQotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQx
KQotICAgIGJ0cW56IHQxLCBub3RDZWxsTWFzaywgLnNsb3dQYXRoCi0KLSAgICBsb2FkVmFyaWFi
bGUoZ2V0LCBtX2VudW1lcmF0b3IsIHQwKQotICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJ
RFt0MV0sIHQxCi0gICAgYmluZXEgdDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bV9jYWNo
ZWRTdHJ1Y3R1cmVJRFt0MF0sIC5zbG93UGF0aAotCi0gICAgcmV0dXJuKFZhbHVlVHJ1ZSkKLQot
LnNsb3dQYXRoOgotICAgIGNhbGxTbG93UGF0aChzbG93UGF0aENhbGwpCi0gICAgZGlzcGF0Y2go
KQotZW5kCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9w
cm9wZXJ0eSwgT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUs
IGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0
dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9wV2l0aFJldHVybihvcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eSwgT3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0aF9oYXNfb3duX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4ob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5
LCBPcEluU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1
cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICBy
ZXR1cm4sIF9zbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCiBvcChmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50LCBtYWNybyAoKQogICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCB0MAogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDBdLCB0
MApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKaW5kZXggMTEyOTU0YmI5YjZlNTAxMzY4ODNiNzQ1NmNiMWU4MzE4ZmI1YTUxMS4uMDdhNzQ1
ZGQ0MTBkNTE3MzUzYWFiY2M0ZDU0MzY0YjE0YTk3NDRlNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05NjIsMTYxICs5NjIs
MTM5IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJvcGVydHlf
a2V5KQogICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5tX3NyYykuanNWYWx1ZSgpLnRvUHJvcGVy
dHlLZXlWYWx1ZShnbG9iYWxPYmplY3QpKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCitKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQogewogICAgIEJFR0lO
KCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCk7
Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdG9yVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpz
VmFsdWUoKTsKLSAgICBpZiAoZW51bWVyYXRvclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRv
cigpKTsKIAotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2Fz
dDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihlbnVtZXJhdG9yVmFsdWUuYXNDZWxsKCkpOwor
ICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Cisg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNOdW1iZXIoZW51bWVyYXRvci0+
aW5kZXhlZExlbmd0aCgpKSk7CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xv
YmFsT2JqZWN0LCBiYXNlKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KQogewogICAgIEJFR0lOKCk7Ci0g
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+
KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBKU09i
amVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgbWV0YWRhdGEubV9h
cnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5zdHJ1Y3R1cmUodm0pKTsKLSAgICBB
U1NFUlQocHJvcGVydHkuaXNVSW50MzJBc0FueUludCgpKTsKLSAgICBSRVRVUk4oanNCb29sZWFu
KGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5LmFzVUlu
dDMyQXNBbnlJbnQoKSkpKTsKLX0KKyAgICBSZWdpc3RlciYgbW9kZVJlZ2lzdGVyID0gR0VUKGJ5
dGVjb2RlLm1fbW9kZSk7CisgICAgUmVnaXN0ZXImIGluZGV4UmVnaXN0ZXIgPSBHRVQoYnl0ZWNv
ZGUubV9pbmRleCk7CisgICAgUmVnaXN0ZXImIG5hbWVSZWdpc3RlciA9IEdFVChieXRlY29kZS5t
X3Byb3BlcnR5TmFtZSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
aGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0gICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4o
KTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgp
LnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNW
YWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1
ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS0+c3RydWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVt
ZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRy
dWUpKTsKLSNlbmRpZgotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7
Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmpl
Y3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+
aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOwotfQor
ICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9k
ZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICB1aW50MzJfdCBpbmRl
eCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMyKCk7CiAKLUpTQ19ERUZJTkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi17Ci0g
ICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzT3duU3RydWN0dXJl
UHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5q
c1ZhbHVlKCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihH
RVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlmIChi
YXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51
bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0
cnVlKSk7Ci0jZW5kaWYKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3Ig
PSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVy
YXRvcikuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVChieXRlY29kZS5t
X2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQoIWJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmpl
Y3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
Lm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlLT5zdHJ1Y3R1cmVJRCgpKTsKIAotICAgIEpTVmFsdWUg
cHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBh
c1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIEpTU3RyaW5nKiBuYW1lID0gZW51bWVyYXRvci0+
Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9kZSk7CiAgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNCb29sZWFuKG9iamVjdFByb3RvdHlwZUhhc093
blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpOworICAgIG1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOwor
ICAgIG1vZGVSZWdpc3RlciA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpKTsK
KyAgICBpbmRleFJlZ2lzdGVyID0ganNOdW1iZXIoaW5kZXgpOworICAgIG5hbWVSZWdpc3RlciA9
IG5hbWUgPyBuYW1lIDoganNOdWxsKCk7CisgICAgRU5EKCk7CiB9CiAKLUpTQ19ERUZJTkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQorSlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCiB7CiAg
ICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5TdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKTsKLSAgICBKU1ZhbHVlIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFs
dWUoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlmIChiYXNlLmlz
Q2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRv
ci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7
Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAg
ICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVj
dCwgYmFzZSwgYXNTdHJpbmcocHJvcGVydHkpKSkpOwotfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBH
RVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1Zh
bHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0g
c3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5
dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IEdF
VChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNJbnQzMigpOworICAgIHN3aXRjaCAobW9k
ZSkgeworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTogewor
ICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkpCisgICAgICAgICAgICBtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQo
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpKSk7CisgICAgfQorICAg
IGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlOiB7CisgICAg
ICAgIEFTU0VSVChiYXNlVmFsdWUuaXNDZWxsKCkpOworICAgICAgICBpZiAoYmFzZVZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkp
IHsKKyAgICAgICAgICAgIC8vIFdlJ2xsIG9ubHkgbWF0Y2ggdGhlIHN0cnVjdHVyZSBJRCBpZiB0
aGUgYmFzZSBpcyBhbiBvYmplY3QuCisgICAgICAgICAgICBBU1NFUlQoaW5kZXggPCBlbnVtZXJh
dG9yLT5lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkpOworICAgICAgICAgICAgUkVUVVJOX1BS
T0ZJTEVEKGJhc2VWYWx1ZS5nZXRPYmplY3QoKS0+Z2V0RGlyZWN0KGluZGV4IDwgZW51bWVyYXRv
ci0+Y2FjaGVkSW5saW5lQ2FwYWNpdHkoKSA/IGluZGV4IDogaW5kZXggLSBlbnVtZXJhdG9yLT5j
YWNoZWRJbmxpbmVDYXBhY2l0eSgpICsgZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0
aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1NlZW5Pd25TdHJ1
Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9
CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVf
cHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9w
SGFzRW51bWVyYWJsZVByb3BlcnR5PigpOwotICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVD
S19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAg
SlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhD
RVBUSU9OKCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSk7Ci19CisgICAgY2FzZSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOiB7CisgICAgICAgIGlmIChiYXNlVmFsdWUuaXND
ZWxsKCkgJiYgbW9kZSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpCisgICAgICAgICAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJl
SUQoYmFzZVZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgp
KTsKKyAgICAgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9i
YWxPYmplY3QpOworICAgICAgICAvLyBUT0RPIERvZXMgdGhpcyBhY3R1YWxseSBldmVyIHRocm93
PyBJc24ndCBzdHJpbmcgYmFja2VkIGJ5IGEgVVVJRD8KKyAgICAgICAgQ0hFQ0tfRVhDRVBUSU9O
KCk7CisgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9iamVjdCwg
cHJvcGVydHlOYW1lKSk7CisgICAgfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX2dldF9kaXJlY3RfcG5hbWUpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5
ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQocHJvcGVy
dHkuaXNTdHJpbmcoKSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5
KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9i
amVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJOKGJhc2VWYWx1ZS5nZXQo
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9OworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCitKU0NfREVGSU5FX0NPTU1P
Tl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKQogewogICAgIEJFR0lO
KCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldFByb3BlcnR5RW51bWVyYXRvcj4o
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckluQnlWYWw+KCk7CiAg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsK
LSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIFJFVFVSTih2
bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0
PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9kZSkuanNW
YWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOwogCi0gICAgSlNPYmplY3QqIGJhc2UgPSBiYXNl
VmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKKyAg
ICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsK
KyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3QoKSkgeworICAgICAgICBp
ZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgJiYg
YmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQor
ICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAKLSAgICBSRVRVUk4ocHJvcGVy
dHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2UpKTsKLX0KLQotSlNDX0RFRklORV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLXsK
LSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9y
ID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1l
cmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBHRVQoYnl0
ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICAgICAgaWYg
KG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAgICAgICAg
ICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBHRVQo
Ynl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkpKSk7CisgICAgfQogCi0gICAg
SlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IG51bGxwdHI7Ci0gICAgaWYgKGluZGV4IDwgZW51bWVy
YXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKQotICAgICAgICBwcm9wZXJ0eU5hbWUg
PSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKLSAgICBSRVRVUk4ocHJv
cGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkpOworICAgIEpTU3RyaW5nKiBzdHJp
bmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7Cisg
ICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW5CeVZhbChnbG9iYWxPYmpl
Y3QsIGJhc2VWYWx1ZSwgc3RyaW5nLCAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGUpKSk7CiB9CiAK
LUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9nZW5lcmlj
X3BuYW1lKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9y
X2hhc19vd25fcHJvcGVydHkpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0g
cGMtPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4o
R0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICB1aW50
MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzJBc0Fu
eUludCgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2Up
LmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVC
bG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIoKSk7Cisg
ICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4o
bW9kZSk7CiAKLSAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gbnVsbHB0cjsKLSAgICBpZiAo
ZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpIDw9IGluZGV4ICYmIGluZGV4
IDwgZW51bWVyYXRvci0+ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKSkKLSAgICAgICAgcHJvcGVy
dHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7Ci0gICAgUkVU
VVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVsbCgpKTsKLX0KKyAgICBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICBp
ZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3QoKSkgeworICAgICAgICBpZiAobW9k
ZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgJiYgYmFzZS0+
c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQorICAgICAg
ICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQotewotICAgIEJFR0lOKCk7Ci0gICAgYXV0
byBieXRlY29kZSA9IHBjLT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgSlNWYWx1ZSBpbmRl
eFZhbHVlID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQoaW5k
ZXhWYWx1ZS5pc1VJbnQzMkFzQW55SW50KCkpOwotICAgIFJFVFVSTihqc1N0cmluZyh2bSwgSWRl
bnRpZmllcjo6ZnJvbSh2bSwgaW5kZXhWYWx1ZS5hc1VJbnQzMkFzQW55SW50KCkpLnN0cmluZygp
KSk7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc093blByb3BlcnR5
KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMigp
KSkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNv
ZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBz
dHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQVElPTigp
OworICAgIFJFVFVSTihqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xv
YmFsT2JqZWN0LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSkpKTsKIH0KIAogSlNDX0RFRklORV9D
T01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVfY2xlYXJfbG9nKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAppbmRleCBkOGQx
NTAxZmIzNWJhYzI3OTRjNmQ5NDEwMjcxYmI2OGY0Y2MwNTdlLi5hNWUwMTVkNTNhNjllNjA1M2Fm
NGRiYjMxYjJjOGYyNTdjMGRiMWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db21tb25TbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaApAQCAtMjU0LDE3ICsyNTQsMTEgQEAgSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaXNfY29uc3RydWN0b3IpOwogSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfc3RyY2F0KTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0eV9rZXkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKLUpTQ19ERUNMQVJFX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
OwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVf
c3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci1KU0NfREVD
TEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsKIEpTQ19E
RUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9y
KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3Ry
dWN0dXJlX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF90b19pbmRleF9zdHJpbmcpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChz
bG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01NT05fU0xP
V19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkpOwogSlND
X0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfcHJvZmlsZV90eXBlX2NsZWFyX2xv
Zyk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF91bnJlYWNoYWJsZSk7
CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
aWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
aWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKaW5kZXggZTJjYTE2MmUwYjU0ZTI1Y2YwNjllZWE4Yzg3
ZTFlZWEyZTRjZDViZS4uMWIwMzEzMGYwYTVjMDdjMzM1Y2M1ODU2ODNiYjY0NWVlNTNlMDhiZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVy
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1
enplckFnZW50LmNwcApAQCAtOTAsNyArOTAsNiBAQCBTcGVjdWxhdGVkVHlwZSBGaWxlQmFzZWRG
dXp6ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbkludGVybmFsKENvZGVCbG9jayogY29kZUJsb2NrLAog
ICAgICAgICBicmVhazsKIAogICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6Ci0gICAg
Y2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfY29uc3RydWN0OgogICAgIGNh
c2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2Vu
dEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVy
QWdlbnRCYXNlLmNwcAppbmRleCBmMTM5ZDRhNDQ3YjI3MGY5ZWQzM2Y3ZGZkMzVlMDJhZmZjMzFj
NzAzLi4xNzBmMWE2MGRhYmIyNTY3MWMwZWQ2Y2QzNzVjMGI5YjEyOGQxNjY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFn
ZW50QmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxOS0yMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBPcGNvZGVJRCBGaWxlQmFzZWRGdXp6ZXJBZ2VudEJh
c2U6Om9wY29kZUFsaWFzRm9yTG9va3VwS2V5KGNvbnN0IE9wY29kZUlEJiBvcGNvZAogewogICAg
IGlmIChvcGNvZGVJZCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSWQgPT0gb3BfY2FsbF9l
dmFsIHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJZCA9PSBvcF90YWlsX2Nh
bGxfdmFyYXJncykKICAgICAgICAgcmV0dXJuIG9wX2NhbGw7Ci0gICAgaWYgKG9wY29kZUlkID09
IG9wX2dldF9kaXJlY3RfcG5hbWUgfHwgb3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93aXRoX3Ro
aXMpCisgICAgaWYgKG9wY29kZUlkID09IG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCB8fCBvcGNv
ZGVJZCA9PSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcykKICAgICAgICAgcmV0dXJuIG9wX2dldF9i
eV92YWw7CiAgICAgaWYgKG9wY29kZUlkID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQogICAgICAg
ICByZXR1cm4gb3BfY29uc3RydWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDI0ZmNmMDgxNWUyNTA0OTVlMDMxNzk0YTA2ZTRi
MzEwNWM3ODRmYjQuLjE1ZjViMDY0ZWNiZmM2NThhOTkwZDJlYjU5NjM1YmYyYmRiZTg4ODIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
QEAgLTE0NjEsNiArMTQ2MSwxMCBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3RvciogbG93ZXJO
YW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAgICAgICB9
KTsKICNlbmRpZgogCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oTGlua1RpbWVDb25zdGFudDo6ZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKV0uaW5pdExh
dGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CisgICAgICAgIGluaXQu
c2V0KGluaXQudm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpOworICAgIH0pOworCiAg
ICAgaWYgKE9wdGlvbnM6OmV4cG9zZVByb2ZpbGVyc09uR2xvYmFsT2JqZWN0KCkpIHsKICNpZiBF
TkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0
aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiX19lbmFibGVTYW1wbGluZ1Byb2Zp
bGVyIiksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIGVuYWJsZVNh
bXBsaW5nUHJvZmlsZXIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmNwcAppbmRleCAyMWM3MGEyN2I2OTFiZTA1NjkwYTJmYWU3N2M2OTkxMmFlZWMx
MTlkLi45ODJhYTQ3YzY1NjM3MzM2OTRiMzBmMTk2Yjg5MWI0NTlmZjIzZTM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5jcHAKQEAgLTQ5LDEzICs0OSwxOSBAQCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdAog
CiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1aW50MzJfdCBpbmRleGVkTGVuZ3RoLCB1aW50MzJf
dCBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+KiBwcm9w
ZXJ0eU5hbWVzQnVmZmVyLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWVzU2l6ZSkKICAgICA6IEpTQ2Vs
bCh2bSwgdm0ucHJvcGVydHlOYW1lRW51bWVyYXRvclN0cnVjdHVyZS5nZXQoKSkKLSAgICAsIG1f
cHJvcGVydHlOYW1lcyh2bSwgdGhpcywgcHJvcGVydHlOYW1lc0J1ZmZlcikKICAgICAsIG1fY2Fj
aGVkU3RydWN0dXJlSUQoc3RydWN0dXJlID8gc3RydWN0dXJlLT5pZCgpIDogMCkKICAgICAsIG1f
aW5kZXhlZExlbmd0aChpbmRleGVkTGVuZ3RoKQogICAgICwgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4KG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMpCiAgICAgLCBtX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KHByb3BlcnR5TmFtZXNTaXplKQogICAgICwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0
eShzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkgOiAwKQorICAgICwgbV9w
cm9wZXJ0eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5hbWVzQnVmZmVyKQogeworICAgIGlmICht
X2luZGV4ZWRMZW5ndGgpCisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlOworICAgIGlmIChtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgp
CisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVj
dHVyZU1vZGU7CisgICAgaWYgKG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXggLSBtX2VuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAgIG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkdlbmVyaWNNb2RlOwogfQogCiB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBSZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiYm
IGlkZW50aWZpZXJzKQpAQCAtMTQ4LDQgKzE1NCw3MCBAQCB2b2lkIGdldEVudW1lcmFibGVQcm9w
ZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQ
cgogICAgIH0KIH0KIAorSlNTdHJpbmcqIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y29tcHV0
ZU5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIHVpbnQz
Ml90JiBpbmRleCwgTW9kZSYgbW9kZSwgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3Ry
aW5nKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBBU1NFUlQoaW5kZXhlZExlbmd0aCgp
IHx8IHNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisKKyAgICBpbmRleCsrOworICAgIHN3aXRjaCAo
bW9kZSkgeworICAgIGNhc2UgSW5pdE1vZGU6IHsKKyAgICAgICAgbW9kZSA9IEluZGV4ZWRNb2Rl
OworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKworICAg
IGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTogeworICAgICAgICB3
aGlsZSAoaW5kZXggPCBpbmRleGVkTGVuZ3RoKCkgJiYgIWJhc2UtPmhhc0VudW1lcmFibGVQcm9w
ZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KSkgeworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9Cisg
ICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisKKyAgICAgICAgaWYgKGluZGV4IDwg
aW5kZXhlZExlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHNob3VsZEFsbG9jYXRlSW5kZXhl
ZE5hbWVTdHJpbmcgPyBqc1N0cmluZyh2bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLnN0
cmluZygpKSA6IG51bGxwdHI7CisKKyAgICAgICAgaWYgKCFzaXplT2ZQcm9wZXJ0eU5hbWVzKCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBtb2RlID0gT3duU3RydWN0
dXJlTW9kZTsKKyAgICAgICAgaW5kZXggPSAwOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9
CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZToK
KyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsKKyAgICAg
ICAgSlNTdHJpbmcqIG5hbWUgPSBudWxscHRyOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgaWYgKGluZGV4ID49IHNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIG5hbWUgPSBwcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4
KTsKKyAgICAgICAgICAgIGlmICghbmFtZSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGlmIChpbmRleCA8IGVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSAmJiBiYXNlLT5z
dHJ1Y3R1cmVJRCgpID09IGNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBhdXRvIGlkID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFt
ZS0+dmFsdWUoZ2xvYmFsT2JqZWN0KSk7CisgICAgICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2Vw
dGlvbigpOworICAgICAgICAgICAgaWYgKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIGlkKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIG51bGxwdHIpOworICAgICAgICAgICAgbmFtZSA9IG51bGxw
dHI7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgICAgIHNjb3BlLmFzc2Vy
dE5vRXhjZXB0aW9uKCk7CisKKyAgICAgICAgaWYgKGluZGV4ID49IGVuZFN0cnVjdHVyZVByb3Bl
cnR5SW5kZXgoKSAmJiBpbmRleCA8IHNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAg
IG1vZGUgPSBHZW5lcmljTW9kZTsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuaAppbmRleCAwMjAxMWQ0MWM3ZjY2ZGFkODgzYWU4ZDc3MGI1ZDNkMjg2Y2Q1
MDg3Li5kNDY4NTA0OWFhMzkwMGMwMTVlMDQ0MzYzMTUyNDliYTgwMjg1ZjhlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaApAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkpTQ2FzdC5oIgogI2luY2x1ZGUg
Ik9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUNoYWluLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0zNyw2ICszNywxNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQmFzZSA9IEpTQ2Vs
bDsKICAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6
U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCisgICAgZW51bSBNb2RlIDog
dWludDhfdCB7CisgICAgICAgIEluaXRNb2RlID0gMCwKKyAgICAgICAgSW5kZXhlZE1vZGUgPSAx
IDw8IDAsCisgICAgICAgIE93blN0cnVjdHVyZU1vZGUgPSAxIDw8IDEsCisgICAgICAgIEdlbmVy
aWNNb2RlID0gMSA8PCAyLAorICAgICAgICAvLyBQcm9maWxpbmcgT25seQorICAgICAgICBIYXNT
ZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoID0gMSA8PCAzLAorICAgIH07CisK
KyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQ4X3QgZW51bWVyYXRpb25Nb2RlTWFzayA9IChHZW5l
cmljTW9kZSA8PCAxKSAtIDE7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDZWxsVHlwZSwgU3Vi
c3BhY2VBY2Nlc3MgbW9kZT4KICAgICBzdGF0aWMgSXNvU3Vic3BhY2UqIHN1YnNwYWNlRm9yKFZN
JiB2bSkKICAgICB7CkBAIC03NCwxNiArODUsMjAgQEAgcHVibGljOgogICAgIHVpbnQzMl90IGVu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9lbmRHZW5lcmljUHJvcGVy
dHlJbmRleDsgfQogICAgIHVpbnQzMl90IGNhY2hlZElubGluZUNhcGFjaXR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWNoZWRJbmxpbmVDYXBhY2l0eTsgfQogICAgIHVpbnQzMl90IHNpemVPZlByb3Bl
cnR5TmFtZXMoKSBjb25zdCB7IHJldHVybiBlbmRHZW5lcmljUHJvcGVydHlJbmRleCgpOyB9Cisg
ICAgdWludDMyX3QgbW9kZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZVNldDsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3QgY2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2NhY2hlZFN0cnVjdHVyZUlEKTsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3QgaW5kZXhlZExlbmd0aE9mZnNldCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1faW5kZXhlZExlbmd0aCk7
IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQo
KSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2Vu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBlbmRHZW5l
cmljUHJvcGVydHlJbmRleE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2FjaGVkSW5saW5lQ2FwYWNp
dHkpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBtb2RlU2V0T2Zmc2V0KCkgeyByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9tb2RlU2V0KTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3QgY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpCiAgICAg
ewogICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciwgbV9wcm9wZXJ0eU5hbWVzKTsKICAgICB9CiAKKyAgICBKU1N0cmluZyogY29tcHV0ZU5leHQo
SlNHbG9iYWxPYmplY3QqLCBKU09iamVjdCogYmFzZSwgdWludDMyX3QmIGN1cnJlbnRJbmRleCwg
TW9kZSYsIGJvb2wgc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0cmluZyA9IHRydWUpOworCiAg
ICAgREVDTEFSRV9WSVNJVF9DSElMRFJFTjsKIAogcHJpdmF0ZToKQEAgLTkyLDEzICsxMDcsMTQg
QEAgcHJpdmF0ZToKICAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IoVk0mLCBTdHJ1Y3R1cmUq
LCB1aW50MzJfdCwgdWludDMyX3QsIFdyaXRlQmFycmllcjxKU1N0cmluZz4qLCB1bnNpZ25lZCk7
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURh
dGE+JiYpOwogCi0gICAgQXV4aWxpYXJ5QmFycmllcjxXcml0ZUJhcnJpZXI8SlNTdHJpbmc+Kj4g
bV9wcm9wZXJ0eU5hbWVzOwotICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmVDaGFpbj4gbV9wcm90
b3R5cGVDaGFpbjsKICAgICBTdHJ1Y3R1cmVJRCBtX2NhY2hlZFN0cnVjdHVyZUlEOwogICAgIHVp
bnQzMl90IG1faW5kZXhlZExlbmd0aDsKICAgICB1aW50MzJfdCBtX2VuZFN0cnVjdHVyZVByb3Bl
cnR5SW5kZXg7CiAgICAgdWludDMyX3QgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleDsKICAgICB1
aW50MzJfdCBtX2NhY2hlZElubGluZUNhcGFjaXR5OworICAgIHVpbnQzMl90IG1fbW9kZVNldCB7
IDAgfTsKKyAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3By
b3BlcnR5TmFtZXM7CisgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlw
ZUNoYWluOwogfTsKIAogdm9pZCBnZXRFbnVtZXJhYmxlUHJvcGVydHlOYW1lcyhKU0dsb2JhbE9i
amVjdCosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJyYXkmLCB1aW50MzJfdCYgaW5kZXhlZExl
bmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5Q291bnQpOwpAQCAtMTM0LDcgKzE1MCwx
MCBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9w
ZXJ0aWVzID0gMDsKICAgICB9CiAKLSAgICBlbnVtZXJhdG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMsIGlu
ZGV4ZWRMZW5ndGgsIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMsIFdURk1vdmUocHJvcGVydHlO
YW1lcykpOworICAgIGlmICghaW5kZXhlZExlbmd0aCAmJiAhcHJvcGVydHlOYW1lcy5zaXplKCkp
CisgICAgICAgIGVudW1lcmF0b3IgPSB2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKTsK
KyAgICBlbHNlCisgICAgICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNyZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExl
bmd0aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7
CiAgICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmIHN1Y2Nlc3NmdWxseU5vcm1hbGl6ZWRDaGFpbiAm
JiBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzID09IHN0cnVjdHVyZSkgewogICAg
ICAgICBlbnVtZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5cGVDaGFpbih2bSwgc3RydWN0dXJlLT5w
cm90b3R5cGVDaGFpbihnbG9iYWxPYmplY3QsIGJhc2UpKTsKICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKHZtKSkKQEAgLTE0Myw0ICsxNjIsNiBA
QCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJldHVybiBlbnVtZXJhdG9yOwogfQogCit1
c2luZyBFbnVtZXJhdG9yTWV0YWRhdGEgPSBzdGQ6OnVuZGVybHlpbmdfdHlwZV90PEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6TW9kZT47CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1
enplckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25G
aWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAKaW5kZXggY2RjZmE5OWQ0OWE2OTE3NDAxZDY4MzE2
OGJhMTlhYmRlYmFlOWE0ZC4uYzdhOGUzMWY3ZTQ3YmQ2OTExZmU0YWM0NWZkZjc3ZDY4Mzk2NDEw
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZp
bGVDcmVhdGluZ0Z1enplckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAg
U3BlY3VsYXRlZFR5cGUgUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50OjpnZXRQcmVk
aWN0aW9uSW50ZXJuYWwoQ29kZUJsb2MKICAgICBjYXNlIG9wX2dldF9ieV9pZDoKICAgICBjYXNl
IG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhp
czoKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9y
X2dldF9ieV92YWw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2FzZSBvcF9jb25zdHJ1
Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGw6CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5n
ZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc1ZDQwNTkwMWRkMjNiYTMzMjhmN2YyMWFl
NjRmZmY2ZjkxMjM1NDMuLjc4OGIxZjExZGVhMmE1NzhhMzBmMDZjOTRlZWJkMzM1ZTAwNzA3ODYg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMjEtMDgtMDUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBh
cHBsZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4g
Ynl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyNzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1kb3VibGUtYXJyYXktd2l0aC1vd24tbmFtZWQuanM6
IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1kb3VibGUtYXJyYXkuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogbWlj
cm9iZW5jaG1hcmtzL2Zvci1pbi1nZXR0ZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgor
ICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXktd2l0aC1vd24tbmFt
ZWQuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtz
L2Zvci1pbi1pbnQzMi1hcnJheS5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAg
KiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC1hbmQt
Z2V0dGVycy5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNo
bWFya3MvZm9yLWluLWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC5qczogQWRkZWQuCisgICAg
ICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLW9iamVjdC13aXRo
LW93bi1uYW1lZC5qczogQWRkZWQuCisgICAgICAgIChzdW0pOgorICAgICAgICAob3BhcXVlU2V0
KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLXN0cmluZy1hcnJheS5qczogQWRk
ZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLW9mLWl0
ZXJhdGUtYXJyYXktbWFwLXNldC5qczogQWRkZWQuCisgICAgICAgIChzdW0pOgorICAgICAgICAo
bGV0LmdlbmVyYXRvcik6CisgICAgICAgICogc3RyZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzOgor
ICAgICAgICAodGVzdCk6CisgICAgICAgICogc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQt
bGF0ZXIuanM6CisgICAgICAgICogc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlv
bi5qczoKKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLXByaW1pdGl2ZS1pbmRleC1vbi1wcm90b3R5
cGUuanM6IEFkZGVkLgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tdGVzdHMuanM6CisgICAgICAg
ICogc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3Ru
ZXNzLmpzOgorICAgICAgICAodGVzdDUpOgorCiAyMDIxLTA4LTAyICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gWWFyciBCb3llck1vb3JlIHNlYXJj
aCBzaG91bGQgc3VwcG9ydCBjaGFyYWN0ZXItY2xhc3MKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2Zvci1pbi1kb3VibGUtYXJyYXktd2l0aC1vd24tbmFtZWQuanMgYi9KU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5LXdpdGgtb3duLW5hbWVkLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY1OGJmNDNmZTVhZjBmZjFkMzAxMzhiYTc3ZTM3MzgwNDc0MzVjOTUKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFy
cmF5LXdpdGgtb3duLW5hbWVkLmpzCkBAIC0wLDAgKzEsMTQgQEAKK2Z1bmN0aW9uIHRlc3Qob2Jq
ZWN0KSB7CisgICAgc3VtID0gMDsKKyAgICBmb3IgKHZhciBpIGluIG9iamVjdCkKKyAgICAgICAg
c3VtICs9IG9iamVjdFtpXTsKKyAgICByZXR1cm4gc3VtOworfQorbm9JbmxpbmUodGVzdCk7CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICB2YXIgbyA9IEFycmF5KDEwMCku
ZmlsbCgxLjEyMzIxNDIzMSk7CisgICAgby5hID0gMDsKKyAgICBvLmIgPSAic3VycHJpc2Ugc3Ry
aW5nIjsKKyAgICB0ZXN0KG8pOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFy
a3MvZm9yLWluLWRvdWJsZS1hcnJheS5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1kb3VibGUtYXJyYXkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRhMGMzYzcxZDZlNjkxMDU4YTMxZGFjYmI1
MDY2ZmYyNGE0MDViYgotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2Zvci1pbi1kb3VibGUtYXJyYXkuanMKQEAgLTAsMCArMSwxMCBAQAorZnVuY3Rpb24gdGVzdChv
YmplY3QpIHsKKyAgICBzdW0gPSAwOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAg
ICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0KTsK
KworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0KEFycmF5KDEwMCkuZmls
bCgxLjEyMzEyNDEpKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1nZXR0ZXJzLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWdldHRlcnMuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjRmYTM2NDg2MGE2YjAwOWRhMzE4ODk1MjMwOGM1MzBlMDAyYjFmYQotLS0g
L2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1nZXR0ZXJzLmpz
CkBAIC0wLDAgKzEsMTUgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsK
KyAgICBmb3IgKHZhciBpIGluIG9iamVjdCkKKyAgICAgICAgc3VtICs9IG9iamVjdFtpXTsKKyAg
ICByZXR1cm4gc3VtOworfQorbm9JbmxpbmUodGVzdCk7CisKK2xldCBvID0geyB9OworT2JqZWN0
LmRlZmluZVByb3BlcnR5KG8sICJwcm90b1ZhbHVlIiwgeyBnZXQoKSB7IHJldHVybiAic3RyaW5n
IjsgfSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCAicHJv
dG9WYWx1ZTIiLCB7IGdldCgpIHsgcmV0dXJuICJzdHJpbmcxIjsgfSwgZW51bWVyYWJsZTogdHJ1
ZSB9KTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCAicHJvdG9WYWx1ZTMiLCB7IGdldCgpIHsg
cmV0dXJuICJzdHJpbmcyIjsgfSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKKworZm9yIChsZXQgaSA9
IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0KG8pOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvZm9yLWluLWludDMyLWFycmF5LXdpdGgtb3duLW5hbWVkLmpzIGIvSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLWFycmF5LXdpdGgtb3duLW5hbWVkLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRlMmRkYmQyZjA1ZGI0ZWNjZTlmZDliYTQ1NjlmNmIwNjI0YWExMzcKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXkt
d2l0aC1vd24tbmFtZWQuanMKQEAgLTAsMCArMSwxNCBAQAorZnVuY3Rpb24gdGVzdChvYmplY3Qp
IHsKKyAgICBzdW0gPSAwOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0g
Kz0gb2JqZWN0W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9y
IChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHZhciBvID0gQXJyYXkoMTAwKS5maWxs
KDEpOworICAgIG8uYSA9IDA7CisgICAgby5iID0gMjsKKyAgICB0ZXN0KG8pOworfQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLWFycmF5LmpzIGIvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLWFycmF5LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjky
YWU1YzFiNDI1ODk0NjYwZDk2OTgzNWU0ZjRjZDZhODFlZWQ1MTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXkuanMKQEAgLTAsMCAr
MSwxNSBAQAorCit2YXIgY291bnQgPSAwOworZnVuY3Rpb24gdGVzdChvYmplY3QpIHsKKyAgICBz
dW0gPSAwOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0gKz0gb2JqZWN0
W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0KTsKKworCit2YXIgYXJyYXkg
PSBuZXcgQXJyYXkoMTAwKTsKK2FycmF5LmZpbGwoMSk7Citmb3IgKGxldCBpID0gMDsgaSA8IDFl
NTsgKytpKQorICAgIHRlc3QoYXJyYXkpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvZm9yLWluLWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC1hbmQtZ2V0dGVycy5qcyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1vYmplY3Qtd2l0aC1vd24tbmFt
ZWQtYW5kLWdldHRlcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjVlZjdlYmRkMjQzMjk0NGZkZWIxNGZhZmY4
YjQyNmRjNDQ2M2FjOQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2Zvci1pbi1pbnQzMi1vYmplY3Qtd2l0aC1vd24tbmFtZWQtYW5kLWdldHRlcnMuanMKQEAgLTAs
MCArMSwxNSBAQAorZnVuY3Rpb24gdGVzdChvYmplY3QpIHsKKyAgICBzdW0gPSAwOworICAgIGZv
ciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJldHVy
biBzdW07Cit9Citub0lubGluZSh0ZXN0KTsKKworT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVj
dC5wcm90b3R5cGUsICJwcm90b1ZhbHVlIiwgeyBnZXQoKSB7IHJldHVybiAic3RyaW5nIjsgfSwg
ZW51bWVyYWJsZTogdHJ1ZSB9KTsKK3ZhciBvID0geyBsZW5ndGg6IDEwMCB9CitBcnJheS5wcm90
b3R5cGUuZmlsbC5jYWxsKG8sIDEpOworby5hID0gMDsKK28uYiA9IDI7Citmb3IgKGxldCBpID0g
MDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3Qobyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzIGIvSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43NTcwZmQwZjUxNmRjZDU3NTViM2YyZWI5NjljOTg5YjUxNWQ3NmM0Ci0tLSAv
ZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLW9iamVj
dC13aXRoLW93bi1uYW1lZC5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiB0ZXN0KG9iamVj
dCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpIHsKKyAgICAgICAg
dmFyIHYgPSBvYmplY3RbaV07CisgICAgICAgIHN1bSArPSB2OworICAgIH0KKyAgICByZXR1cm4g
c3VtOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kp
IHsKKyAgICB2YXIgbyA9IHsgbGVuZ3RoOiAxMDAgfTsKKyAgICBBcnJheS5wcm90b3R5cGUuZmls
bC5jYWxsKG8sIDEpOworICAgIG8uYSA9IDA7CisgICAgby5iID0gMjsKKyAgICB0ZXN0KG8pOwor
fQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLW9iamVjdC13aXRo
LW93bi1uYW1lZC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vYmplY3Qtd2l0
aC1vd24tbmFtZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDVmNGUwZjQ2MDAyZWE4ODA0MjRhODg0ZTIyYzQw
YWMyMzhhZmU1YQotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zv
ci1pbi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanMKQEAgLTAsMCArMSwxNyBAQAorZnVuY3Rpb24g
c3VtKG8pIHsKKyAgICBsZXQgc3VtID0gMDsKKyAgICBmb3IgKGxldCBwIGluIG8pCisgICAgICAg
IHN1bSArPSBvW3BdOworICAgIHJldHVybiBzdW07Cit9CisKK2Z1bmN0aW9uIG9wYXF1ZVNldChv
KSB7CisgICAgby56ID0gMzsKK30KKworbGV0IG9iamVjdCA9IHsgeDogMSwgeTogMiB9Oworb3Bh
cXVlU2V0KG9iamVjdCk7Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgaWYg
KHN1bShvYmplY3QpICE9PSA2KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCBzdW0iKTsK
K30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1zdHJpbmctYXJy
YXkuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tc3RyaW5nLWFycmF5LmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjY3Mjc0ZmJjMTM5MDJhNjkxYTIyOGVlN2ZjNjNmNzUwMmViOGE4YWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tc3RyaW5nLWFycmF5
LmpzCkBAIC0wLDAgKzEsMTAgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0g
IiI7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07
CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsg
aSA8IDFlNTsgKytpKQorICAgIHRlc3QoQXJyYXkoMTAwKS5maWxsKCJhIikpOwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLW9mLWl0ZXJhdGUtYXJyYXktbWFwLXNldC5q
cyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1vZi1pdGVyYXRlLWFycmF5LW1hcC1zZXQu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNDVkNGEwMjQ0Mjg5YzcyZWFjOGE2YWIzMmQwOTcwZjU4MmZlZjU2Ngot
LS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1vZi1pdGVyYXRl
LWFycmF5LW1hcC1zZXQuanMKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gc3VtKG9iaikgewor
ICAgIGxldCByZXN1bHQgPSAwOworICAgIGZvciAobGV0IHggb2Ygb2JqKSB7CisgICAgICAgIGlm
ICh0eXBlb2YgeCA9PSAibnVtYmVyIikKKyAgICAgICAgICAgIHJlc3VsdCArPSB4OworICAgICAg
ICBlbHNlCisgICAgICAgICAgICByZXN1bHQgKz0geFswXTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KK25vSW5saW5lKHN1bSk7CisKK2xldCBhcnJheSA9IFsxLDIsMyw0LDVdOworbGV0
IHNldCA9IG5ldyBTZXQoYXJyYXkpOworbGV0IG1hcCA9IG5ldyBNYXAoYXJyYXkubWFwKHggPT4g
W3gsIHhdKSk7CitsZXQgZ2VuZXJhdG9yID0gZnVuY3Rpb24qIChhcnJheSkgeworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyArK2kpCisgICAgICAgIHlpZWxkIGFycmF5W2ld
OworfQorCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgaWYgKHN1bShzZXQp
ICE9PSAxNSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CisgICAgaWYgKHN1bShnZW5lcmF0
b3IoYXJyYXkpKSAhPT0gMTUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMgYi9KU1Rlc3RzL3N0cmVz
cy9mb3ItaW4tYXJyYXktbW9kZS5qcwppbmRleCA5MDAyYjk0MGFkNTk2Yjc1NDgxZjAyNTQwZTUw
YWM5ZTljYmI1MDg4Li4zZDJkYTYzOWQ4MTBmOGFiOTdhM2UyNjlmYWUxMDcyMTBiNWNlNzVjIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcworKysgYi9KU1Rl
c3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcwpAQCAtMjYsOCArMjYsOSBAQAogdmFyIGZ1
bmNBcmdBbmRCb2R5U3RyID0KICIoYXJyKSB7IiArICJcbiIgKwogIiAgICB2YXIgc3VtID0gMDsi
ICsgIlxuIiArCi0iICAgIGZvciAodmFyIGkgaW4gYXJyKSIgKyAiXG4iICsKKyIgICAgZm9yICh2
YXIgaSBpbiBhcnIpIHsiICsgIlxuIiArCiAiICAgICAgICBzdW0gKz0gYXJyW2ldOyIgKyAiXG4i
ICsKKyIgICAgfSAiICsKICIgICAgcmV0dXJuIHN1bTsiICsgIlxuIiArCiAifSI7CiAKQEAgLTc1
LDYgKzc2LDcgQEAgZnVuY3Rpb24gdGVzdChuYW1lLCBkYXRhKSB7CiAKICAgICAgICAgaWYgKChh
Y3R1YWwgIT0gZXhwZWN0ZWQpICYmIChhY3R1YWwgIT0gcHJldmlvdXNSZXN1bHQpKSB7CiAgICAg
ICAgICAgICBwcmludCgiRkFJTDogIiArIG5hbWUgKyAiOiBleHBlY3RlZDogIiArIGV4cGVjdGVk
ICsgIiwgYWN0dWFsOiAiICsgYWN0dWFsICsgIiwgc3RhcnRpbmcgQCBsb29wIGl0ZXJhdGlvbiAi
ICsgaSk7CisgICAgICAgICAgICAkdm0uYnJlYWtwb2ludCgpOwogICAgICAgICAgICAgcHJldmlv
dXNSZXN1bHQgPSBhY3R1YWw7CiAgICAgICAgICAgICBmYWlsZWQgPSB0cnVlOwogICAgICAgICAg
ICAgbnVtYmVyT2ZGYWlsdXJlcysrOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWlu
LWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJl
YXNzaWduZWQtbGF0ZXIuanMKaW5kZXggODMxMTViNDk3M2M4MzdjYTZkM2ZmMDZlYTZmZjEzMWMz
NDUxMWU2Mi4uMDlmODFkOTU2NTNiYWExNTA2ZTVkZGEwNjJmYTJlMzVmMTU4YmYzMSAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qcworKysg
Yi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCkBAIC0xNCw1
ICsxNCw1IEBAIG5vSW5saW5lKGZvbyk7CiBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKICAgICB2YXIgcmVzdWx0ID0gZm9vKHswOjAsIDE6MSwgYToyLCBiOjN9KTsKICAgICBpZiAo
cmVzdWx0ICE9IDcpCi0gICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKIH0K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlv
bi5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcwpp
bmRleCA1YWQzNTY2ZmQwZDM2MTAyNWExZTVmMzM2NWQwYmFkMzc0ZDUxMjAyLi5kMTE0NjkzMWIx
NDc1ZDg4YzQ3Mzk0OWVhZGEyZGRhMGZkMzkzMGE1IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVz
cy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
Zm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCkBAIC0xMiw4ICsxMiw5IEBACiAgICAg
fTsKICAgICBub0lubGluZShmb28pOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgewotICAgICAgICBpZiAoZm9vKCkgIT09ICIxMjM1IikKLSAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiYmFkIHJlc3VsdCIpOworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09ICIxMjM1IikKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
YmFkIHJlc3VsdCBnb3Q6ICIgKyByZXN1bHQpOwogICAgIH0KICAgICBmb28obnVsbCk7CiB9KSgp
OwpAQCAtMzYsOCArMzcsOSBAQAogICAgIH07CiAgICAgbm9JbmxpbmUoZm9vKTsKICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAgaWYgKGZvbygpICE9PSAieHoi
KQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0Iik7CisgICAgICAgIHZh
ciByZXN1bHQgPSBmb28oKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gInh6IikKKyAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiAgICAgfQogfSko
KTsKIChmdW5jdGlvbigpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1wcmlt
aXRpdmUtaW5kZXgtb24tcHJvdG90eXBlLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXByaW1p
dGl2ZS1pbmRleC1vbi1wcm90b3R5cGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGVhM2QyOTM0MjFiZjM0ODY5
MWVmNzBjOTY5NWI2ODljNTlhZmJmZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNz
L2Zvci1pbi1wcmltaXRpdmUtaW5kZXgtb24tcHJvdG90eXBlLmpzCkBAIC0wLDAgKzEsMjMgQEAK
K2Z1bmN0aW9uIHRlc3QodikgeworICAgIGxldCBzdW0gPSAwOworICAgIGZvciAodmFyIHAgaW4g
dikKKyAgICAgICAgc3VtICs9IHZbcF07CisgICAgcmV0dXJuIHN1bTsKK30KKworTnVtYmVyLnBy
b3RvdHlwZVsyXSA9IDQ7Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgaWYg
KHRlc3QoMCkgIT09IDQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQorCitTdHJpbmcu
cHJvdG90eXBlWzJdID0gNTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICB2
YXIgcmVzdWx0ID0gdGVzdCgiIik7CisgICAgaWYgKHJlc3VsdCAhPT0gNSkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCk7CisKKyAgICByZXN1bHQgPSB0ZXN0KCJhIik7CisgICAgaWYgKHJlc3Vs
dCAhPT0gIjBhNSIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOworfQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRl
c3RzLmpzCmluZGV4IDJlNGQ2Yjg0MmEyNDJlYjcxNTk4NjAwZWU1MjhhZTE0YjljODljZTQuLjY4
OTYwOTgxODUxZWUzNDRlM2FhN2Y1MzIzMTUxYjIyNTFmNjVkOTAgMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVz
dHMuanMKQEAgLTEwNSw2ICsxMDUsNyBAQCBmdW5jdGlvbiBzaG91bGRUaHJvd1N5bnRheEVycm9y
KHNjcmlwdCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0Iik7CiAg
ICAgfQogfSkoKTsKKwogKGZ1bmN0aW9uKCkgewogICAgIHZhciBmb28gPSBmdW5jdGlvbihhLCBi
KSB7CiAgICAgICAgIGZvciAodmFyIHAgaW4gYikgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJl
c3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMg
Yi9KU1Rlc3RzL3N0cmVzcy9oYXMtb3duLXByb3BlcnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1j
b3JyZWN0bmVzcy5qcwppbmRleCA5OWM1OWFjMTA1NjhjZThhNzkwODUyMjk4MjA2ZmRjN2UwZTBm
ODljLi5lMGFkZTA3MWEyZTRiOGQwMjc4ZDk1Y2M5MzNlMjRmMThiYmVlMDU4IDEwMDY0NAotLS0g
YS9KU1Rlc3RzL3N0cmVzcy9oYXMtb3duLXByb3BlcnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1j
b3JyZWN0bmVzcy5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9oYXMtb3duLXByb3BlcnR5LXN0cnVj
dHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qcwpAQCAtMTMyLDcgKzEzMiwxMCBAQCBmdW5j
dGlvbiB0ZXN0NSgpIHsKICAgICBvLl9fcHJvdG9fXyA9IHA7CiAKICAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7ICsraSkgewotICAgICAgICBhc3NlcnQoY291bnQobykgPT09IDApOworICAg
ICAgICB2YXIgYyA9IGNvdW50KG8pOworICAgICAgICBpZiAoYykKKyAgICAgICAgICAgIHByaW50
KGMpOworICAgICAgICBhc3NlcnQoYyA9PT0gMCk7CiAgICAgfQogfQogdGVzdDUoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435019</attachid>
            <date>2021-08-05 13:36:27 -0700</date>
            <delta_ts>2021-08-07 13:20:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227989-20210805163626.patch</filename>
            <type>text/plain</type>
            <size>389183</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTUxZmJmZTMzNzc1YjQ4ZmUxMTczOWVmOGJhN2NkZWUwZmMyNGJlLi40OWExNmNhZmI2ZTI2ODMx
ZjgyMmRkOGFjNTM0ZmM1NDU3NDI3Y2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzMgQEAKKzIwMjEtMDgtMDUgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggcmVkZXNpZ25zIGhvdyB3ZSBpbXBsZW1lbnQgZm9yLWluIGxvb3BzLiBCZWZvcmUg
dGhpcyBwYXRjaCB3ZSB3b3VsZCBlbWl0IHRocmVlIGNvcGllcyBvZiB0aGUgZm9yLWluIGxvb3Ag
Ym9keS4gT25lIGZvciB0aGUgaW5kZXhlZCBwcm9wZXJ0aWVzLCBvbmUgZm9yIHRoZSBuYW1lZC1v
d24gcHJvcGVydGllcywgYW5kIG9uZSBmb3IgZ2VuZXJpYyBwcm9wZXJ0aWVzIChhbnl0aGluZyBl
bHNlKS4gVGhpcyBoYWQgYSBjb3VwbGUgb2YgcHJvYmxlbXMuIEZpcnN0bHksIGl0IG1lYW50IGJ5
dGVjb2RlIHNpemUgZ3JldyBleHBvbmVudGlhbGx5IHRvIG51bWJlciBvZiBuZXN0ZWQgZm9yLWlu
IGxvb3BzLiBUaGlzIGluIHR1cm4gbWVhbnQgREZHL0ZUTCBjb21waWxhdGlvbiB0b29rIG11Y2gg
bG9uZ2VyLgorCisgICAgICAgIEdvaW5nIG9mZiBvdXIgZXhwZXJpZW5jZSB3aXRoIGZhc3QgZm9y
LW9mLCB0aGlzIHBhdGNoIHR1cm5zIGZvci1pbiBsb29wcyBzcGVjaWFsaXphdGlvbnMgaW50bwor
ICAgICAgICBhICJmdXNlZCIgb3Bjb2RlIHRoYXQgaW50ZXJuYWxseSBzd2l0Y2hlcyBvbiB0aGUg
ZW51bWVyYXRpb24gbW9kZSBpdCBjdXJyZW50bHkgc2Vlcy4gRm9yIGV4YW1wbGUsIGlmIHdlIGFy
ZSBlbnVtZXJhdGluZyBhbiBvd24tbmFtZWQgcHJvcGVydHksIHRoZSBuZXcgZW51bWVyYXRvcl9n
ZXRfYnlfdmFsIGJ5dGVjb2RlIHdpbGwgY2hlY2sgdGhlIGVudW1lcmF0b3IgY2VsbCdzIGNhY2hl
ZCBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgYmFzZSdzIHRoZW4gbG9hZCB0aGUgcHJvcGVydHkgb2Zm
c2V0IGRpcmVjdGx5LgorCisgICAgICAgIFRoZXJlIGFyZSBmb3VyIG5ldyBvcGNvZGVzIHRoaXMg
cGF0Y2ggYWRkcywgd2hpY2ggcmVwbGFjZSB0aGUgdmFyaW91cyBvcGVyYXRpb25zIHdlIGhhZCBm
b3IgdGhlIHNwZWNpYWxpemVkIGxvb3BzIHByZXZpb3VzbHkuIFRoZSBuZXcgb3Bjb2RlcyBhcmUg
RW51bWVyYXRvckdldEJ5VmFsLCBFbnVtZXJhdG9ySW5CeVZhbCwgRW51bWVyYXRvckhhc093blBy
b3BlcnR5LCBhbmQgRW51bWVyYXRvck5leHQuIFRoZSBmaXJzdCB0aHJlZSBjb3JyZXNwb25kIHRv
IEdldEJ5VmFsLCBJbkJ5VmFsLCBhbmQgSGFzT3duUHJvcGVydHkgcmVzcGVjdGl2ZWx5LiBUaGUg
RW51bWVyYXRvck5leHQgb3Bjb2RlIGhhcyB0aHJlZSByZXN1bHRzIGluIGJ5dGVjb2RlLCB0aGUg
bmV4dCBlbnVtZXJhdGlvbiB2YWx1ZSdzIG1vZGUsIHRoZSBpbmRleCBvZiB0aGUgcHJvcGVydHkg
bmFtZSwgYW5kIHRoZSBwcm9wZXJ0eSBuYW1lIHN0cmluZyBpdHNlbGYuIFdoZW4gZW51bWVyYXRp
b24gaXMgZG9uZSBFbnVtZXJhdG9yTmV4dCByZXR1cm5zIEpTIG51bGwgYXMgdGhlIHByb3BlcnR5
IG5hbWUgc3RyaW5nLiBTaW5jZSB0aGUgREZHIGRvZXNuJ3Qgc3VwcG9ydCB0dXBsZXMgeWV0IHRo
aXMgb3Bjb2RlIGlzIHNwaWx0IGludG8gZm91ciBuZXcgbm9kZXMuIFRoZSBmaXJzdCBjb21wdXRl
cyB0aGUgdXBkYXRlZCBpbmRleCBhbmQgbW9kZSBmb3IgdGhlIG5leHQgZW51bWVyYXRpb24ga2V5
LCB3aGljaCBpcyBlbmNvZGVkIGludG8gYSBzaW5nbGUgSlMgbnVtYmVyLiBUaGVuIHRoZXJlIGFy
ZSB0d28gbm9kZXMgdGhhdCBleHRyYWN0IHRoZSBtb2RlIGFuZCBpbmRleC4gRmluYWxseSwgdGhl
IGxhc3QgbmV3IG5vZGUgcHJvZHVjZXMgdGhlIHByb3BlcnR5IG5hbWUgc3RyaW5nIG9yIG51bGwg
YmFzZWQgb24gdGhlIGV4dHJhY3RlZCBtb2RlIGFuZCBpbmRleC4KKworICAgICAgICBTaW5jZSwg
aW4gbW9zdCBiZW5jaG1hcmtzLCBhbnkgZ2l2ZW4gZW51bWVyYXRpb24gb3Bjb2RlIHRlbmRzIHRv
IHByb2ZpbGUgZXhhY3RseSBvbmUgZW51bWVyYXRpb24gbW9kZS4gVGhpcyBwYXRjaCBmb2N1c2Vz
IHByaW1hcmlseSBvbiByZWltcGxlbWVudGluZyBhbGwgdGhlIG9wdGltaXphdGlvbnMgd2UgaGF2
ZSBmb3IgYW55IG9uZSBzcGVjaWZpYyBtb2RlLiBUaGlzIG1lYW5zIHRoZXJlIGFyZSBzdGlsbCBw
b3RlbnRpYWwgb3B0aW1pemF0aW9ucyBmb3IgdGhlIG11bHRpLW1vZGUgZmxhdm9ycyBvZiBlYWNo
IG5ldyBvcGNvZGUuCisKKyAgICAgICAgVGhlIG1haW4gb3B0aW1pemF0aW9ucyBpbXBsZW1lbnRl
ZCBmb3IgZWFjaCBuZXcgb3Bjb2RlIGFyZToKKworICAgICAgICBFbnVtZXJhdG9yTmV4dDoKKyAg
ICAgICAgMSkgSW5kZXhlZE1vZGUgbG9vcHMgYXJlIGxvYWRlZCBhbmQgY2hlY2tlZCBmb3IgcHJl
c2VuY2UgaW5saW5lIChERkcvRlRMKS4KKyAgICAgICAgMikgTmFtZWRNb2RlIGlzIGNvbXB1dGVk
IGlubGluZSBhcyBsb25nIGFzIHRoZSBjYWNoZWQgc3RydWN0dXJlIG9uIHRoZSBlbnVtZXJhdG9y
IGNlbGwgbWF0Y2hlcyB0aGUgYmFzZSAoQmFzZWxpbmUrKS4gVGhpcyBjYW4gb25seSBkaWZmZXIg
aWYgdGhlcmUncyBhIHRyYW5zaXRpb24uCisgICAgICAgIDMpIHByb3BlcnR5IG5hbWVzIGFyZSBl
eHRyYWN0ZWQgZnJvbSB0aGUgY2FjaGVkIGJ1ZmZlciBpbmxpbmUgKEJhc2VsaW5lKykuCisKKyAg
ICAgICAgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBFbnVtZXJhdG9ySW5CeVZhbDoKKyAg
ICAgICAgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAgICAxKSBJbmRleGVkTW9kZSBo
YXMgYWxsIHRoZSBvcHRpbWl6YXRpb25zIG9mIGEgbm9ybWFsIFhCeVZhbCBvbiBpbmRleGVkIHBy
b3BlcnRpZXMgKERGRy9GVEwpLgorICAgICAgICAyKSBOYW1lZE1vZGUgd2lsbCBleHRyYWN0IHRo
ZSB2YWx1ZSBkaXJlY3RseSBmcm9tIHRoZSBpbmxpbmUvb3V0LW9mLWxpbmUgb2Zmc2V0IGlmIHRo
ZSBzdHJ1Y3R1cmUgbWF0Y2hlcyB0aGUgZW51bWVyYXRvcidzIChCYXNlbGluZSspLgorCisgICAg
ICAgIFRoZXJlIGFyZSBhbHNvIGEgZmV3IGludGVyZXN0aW5nIGNoYW5nZXMgd29ydGggbWVudGlv
bmluZyBoZXJlOgorICAgICAgICAxKSBJZiBhIGZvci1pbiBsb29wIHdvdWxkIHByb2R1Y2UgYW4g
ZW1wdHkgZW51bWVyYXRvciB3ZSBub3cgYWx3YXlzCisgICAgICAgIHJldHVybiB0aGUgVk1zIGVt
cHR5IGVudW1lcmF0b3IuIFRoaXMgaGFzIHR3byBiZW5lZml0cywgbW9zdCBpbXBvcnRhbnRseSwg
aXQgZGlzdGluZ2lzaGVzIGJldHdlZW4gYW4gdW5wcm9maWxlZCBmb3ItaW4gbG9vcCBhbmQgZW1w
dHkgZW51bWVyYXRpb24sIHdoaWNoIHByZXZlbnRzIE9TUiBleGl0IGxvb3BzLiBBbHNvLCBpdCBt
ZWFucyB0aGF0IHRoZSB2YXJpb3VzIEVudW1lcmF0b3Igb3Bjb2RlcyBubyBsb25nZXIgbmVlZCB0
byBoYW5kbGUgdW5kZWZpbmVkL251bGwgd2hlbiBgdG9PYmplY3RgaW5nIHRoZSBiYXNlIHZhbHVl
LgorCisgICAgICAgIDIpIFRoZSBlbnVtZXJhdG9yIG5vdyBjb250YWlucyBhIGJpdCBzZXQgb2Yg
YWxsIHRoZSBtb2RlcyBpdCB3aWxsIHByb2R1Y2UuIFRoaXMgcmVtb3ZlcyBhIGZldyBleHRyYSBi
cmFuY2hlcyB3aGVuIHNwZWN1bGF0aW5nIG9uIHRoZSBtb2RlcyB3ZSB3aWxsIHNlZSBpbiBFbnVt
ZXJhdG9yTmV4dC4KKworICAgICAgICAzKSBJbiB0aGUgREZHLCBlbnVtZXJhdG9yIEdldEJ5VmFs
IHJlbGllcyBvbiBjb21waWxlR2V0QnlWYWwgdG8gc2V0IHRoZSByZXN1bHQgaXQgYWxzbyBwYXNz
ZXMgYSBwcmVmaXggY2FsbGJhY2sgd2hpY2ggZW1pdHMgY29kZSBhZnRlciB0aGUgdmFyaW91cyBj
YXNlcyBzZXQgdXAgdGhlaXIgb3BlcmFuZHMgYnV0IGJlZm9yZSBjb2RlIGlzIGVtaXR0aW5nIHRv
IGhlbHAgc2F0aXNmeSB0aGUgYnJhbmNoIG92ZXIgcmVnaXN0ZXIgYWxsb2NhdGlvbiB2YWxpZGF0
aW9uLiBBbHNvLCB0aGUgYXJyYXkgbW9kZSBicmFuY2ggaW4gY29tcGlsZUdldEJ5VmFsIHBhc3Nl
cyB0aGUgZGF0YSBmb3JtYXQgdGhhdCBpdCB3b3VsZCBwcmVmZXIsIHdoaWNoIGZvciBub3JtYWwg
R2V0QnlWYWwgaXMgcmV0dXJuZWQuIEZvciBFbnVtZXJhdG9yR2V0QnlWYWwsIHRoYXQgcHJlZmVy
ZW5jZSBpcyBjb21wbGV0ZWx5IGlnbm9yZWQgYW5kIGl0IGFsd2F5cyByZXR1cm5zIERhdGFGb3Jt
YXRKUy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNNjQ6Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
WDg2Q29tbW9uOjpvcjgpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82
NC5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6cnNoaWZ0NjQpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Nl82NDo6b3I4KTogRGVsZXRlZC4KKyAgICAgICAg
KiBidWlsdGlucy9CdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QucmI6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKEpTQzo6Y29t
cHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbik6CisgICAg
ICAgICogYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oOgorICAgICAgICAqIGJ5dGVjb2RlL09w
Y29kZS5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9y
SW5Mb29wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKToK
KyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbCk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvck5leHQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZSk6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKToKKyAgICAgICAgKEpTQzo6
cmV3cml0ZU9wKToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjpmaW5hbGl6ZSk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpmaW5kRm9ySW5Db250ZXh0KToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5G
b3JJbkxvb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dEdldEVudW1lcmFibGVMZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
SGFzRW51bWVyYWJsZVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5
TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51
bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEluZGV4ZWRGb3JJblNjb3BlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hTdHJ1Y3R1cmVGb3JJ
blNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcFN0
cnVjdHVyZUZvckluU2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQ6OmZpbmFsaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5kZXhlZEZvcklu
Q29udGV4dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZmluZFN0cnVjdHVyZUZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4
dDo6aXNWYWxpZCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aW52YWxpZGF0
ZSk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bG9jYWwgY29uc3QpOgorICAgICAgICAo
SlNDOjpGb3JJbkNvbnRleHQ6OnByb3BlcnR5TmFtZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZv
ckluQ29udGV4dDo6cHJvcGVydHlPZmZzZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNv
bnRleHQ6OmVudW1lcmF0b3IgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6Om1v
ZGUgY29uc3QpOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OkZvckluQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Ym9keUJ5dGVjb2RlU3RhcnRPZmZzZXQgY29uc3Qp
OgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OnR5cGUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmlzSW5kZXhlZEZvckluQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmFzSW5kZXhl
ZEZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6YXNT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQ6OlN0cnVjdHVyZUZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6aW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OnByb3BlcnR5IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjplbnVtZXJhdG9yIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjpiYXNlVmFyaWFi
bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6
OmFkZEdldEluc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQ6OmFkZEluSW5zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29u
dGV4dDo6YWRkSGFzT3duUHJvcGVydHlKdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SW5k
ZXhlZEZvckluQ29udGV4dDo6SW5kZXhlZEZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkluZGV4ZWRGb3JJbkNvbnRleHQ6OmluZGV4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6YWRkR2V0SW5zdCk6IERlbGV0ZWQuCisgICAg
ICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6Okhhc093
blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpT
Qzo6Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RG
R0FycmF5TW9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6aXNTYW5lQ2hhaW4g
Y29uc3QpOgorICAgICAgICAqIGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUp
OgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDRkFQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OmluamVjdE9TUik6CisgICAgICAg
ICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0
eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6c2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUpOgorICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdJbnRlZ2VyUmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHA6CisgICAgICAg
ICogZGZnL0RGR01heUV4aXQuY3BwOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc1N0b3JhZ2VDaGlsZCBjb25zdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
c3RvcmFnZUNoaWxkSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0FycmF5TW9k
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzRW51bWVyYXRvck1ldGFkYXRhIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjplbnVtZXJhdG9yTWV0YWRhdGEpOgorICAgICAg
ICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04pOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U1NBTG93ZXJpbmdQaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAg
ICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVj
dXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxvYWRS
ZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3ltYm9sKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25EaXJlY3RBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4
dEV4dHJhY3RJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JHZXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFz
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51
bWVyYXRvckluQnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVQcm9w
ZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVUb0luZGV4U3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0eSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRFbnVtZXJh
dG9yUG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0RGlyZWN0UG5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjphbGxvY2F0ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnJlZ3MpOgorICAgICAgICAoSlND
OjpERkc6OkpTVmFsdWVPcGVyYW5kOjpncHIpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VP
cGVyYW5kOjpTdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJh
bmQ6On5TdG9yYWdlT3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RvcmFnZU9wZXJhbmQ6
OmVtcGxhY2UpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpvcGVy
YXRvciBib29sKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNW
YWx1ZVJlZ3NUZW1wb3JhcnkpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRp
ZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVj
a0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAq
IGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9C
Mzo6Y29tcGlsZUdldEJ5VmFsSW1wbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6
Okxvd2VyREZHVG9CMzo6Y29tcGlsZVN0cmluZ0NoYXJBdCk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVDb21wYXJlU3RyaWN0RXEpOgorICAgICAgICAqIGZ0
bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFkZEluY29taW5nVG9Q
aGlJZlNldCk6CisgICAgICAgICogZ2VuZXJhdG9yL0RTTC5yYjoKKyAgICAgICAgKiBpbnRlcnBy
ZXRlci9SZWdpc3Rlci5oOgorICAgICAgICAqIGludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpSZWdpc3Rlcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKiBqaXQvQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklU
T3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1l
cmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRl
eGVkX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9k
aXJlY3RfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
T3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0lu
ZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5SW1wbCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNf
ZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxl
X2luZGV4ZWRfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Z2VuZXJhdGVHZXRC
eVZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfbmV4dCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KToKKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJh
dG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2lu
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19vd25f
cHJvcGVydHkpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAg
ICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgpOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAg
ICogcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHA6CisgICAgICAgIChKU0M6OkZpbGVC
YXNlZEZ1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRp
bWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6RmlsZUJhc2Vk
RnV6emVyQWdlbnRCYXNlOjpvcGNvZGVBbGlhc0Zvckxvb2t1cEtleSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpp
bml0KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRl
TmV4dCk6CisgICAgICAgICogcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaDoKKyAg
ICAgICAgKEpTQzo6cHJvcGVydHlOYW1lRW51bWVyYXRvcik6CisgICAgICAgICogcnVudGltZS9Q
cmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQuY3BwOgorICAgICAgICAoSlNDOjpQcmVk
aWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25JbnRlcm5hbCk6CisK
IDIwMjEtMDgtMDUgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAK
ICAgICAgICAgR0NDIDExIGJ1aWxkcyBzaG91bGQgdXNlIC1Xbm8tYXJyYXktYm91bmRzLCAtV25v
LW5vbm51bGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk02NC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTTY0LmgKaW5kZXggN2I3ZDg0MTM0YTc0MDk5ZDJmYjE3NDM3MzViNjNmOGFj
NWY0OTE2Zi4uY2RlMzI3MGJhNjQwNmY1MmU5ZDQxYTJlZGFmYjk0NzhkOTNiZDM0YyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TTY0LmgKQEAgLTEwNjksNiArMTA2OSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN0b3JlMzIoZGF0
YVRlbXBSZWdpc3RlciwgYWRkcmVzcyk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJ
RCBzcmMsIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDgoYWRk
cmVzcy5tX3B0ciwgZ2V0Q2FjaGVkRGF0YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpKTsK
KyAgICAgICAgb3IzMihzcmMsIGRhdGFUZW1wUmVnaXN0ZXIsIGRhdGFUZW1wUmVnaXN0ZXIpOwor
ICAgICAgICBzdG9yZTgoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5tX3B0cik7CisgICAgfQor
CiAgICAgdm9pZCBvcjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3Mp
CiAgICAgewogICAgICAgICBMb2dpY2FsSW1tZWRpYXRlIGxvZ2ljYWxJbW0gPSBMb2dpY2FsSW1t
ZWRpYXRlOjpjcmVhdGUzMihpbW0ubV92YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKaW5kZXggNDM1
Njg4ODhmYmYwNjUwNWNhZjE3OTA3NjE1MzNlN2E5Mjk2NGUzNS4uMTdiYjY2NGQ0YzBlNmU5YzJi
OTMwZWExMDZlOGFiMTEyZDRmYTQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaApAQCAtNjI1LDYgKzYy
NSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9ybShzcmMsIGRlc3Qub2Zm
c2V0LCBkZXN0LmJhc2UsIGRlc3QuaW5kZXgsIGRlc3Quc2NhbGUpOwogICAgIH0KIAorICAgIHZv
aWQgb3I4KFJlZ2lzdGVySUQgc3JjLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVy
KCkpOworICAgICAgICBvcjgoc3JjLCBBZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAg
fQorCiAgICAgdm9pZCBvcjMyKEFkZHJlc3Mgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewog
ICAgICAgICBtX2Fzc2VtYmxlci5vcmxfbXIoc3JjLm9mZnNldCwgc3JjLmJhc2UsIGRlc3QpOwpA
QCAtNjY1LDYgKzY3MSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIG1fYXNzZW1ibGVyLm9yYl9pbShz
dGF0aWNfY2FzdDxpbnQ4X3Q+KGltbS5tX3ZhbHVlKSwgYWRkcmVzcy5vZmZzZXQsIGFkZHJlc3Mu
YmFzZSwgYWRkcmVzcy5pbmRleCwgYWRkcmVzcy5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBv
cjgoVHJ1c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYWRkcmVzcy5tX3B0ciksIHNjcmF0Y2hSZWdpc3Rlcigp
KTsKKyAgICAgICAgb3I4KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOworICAgIH0K
KwogICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIG9wMSwgUmVnaXN0ZXJJRCBvcDIsIFJlZ2lzdGVy
SUQgZGVzdCkKICAgICB7CiAgICAgICAgIGlmIChvcDEgPT0gb3AyKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCmluZGV4
IDk0MzdmZDNiZDJhYzE2NjgxNmYyOGYzN2RiZDk5MDUxZGYzN2ExYzQuLjYzMzU2NTJmYzU0NDlm
YzlhNTU5ZWNhNmNiMjQwOGI4NzBhYjlkYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKQEAgLTk3LDEyICs5Nyw2
IEBAIHB1YmxpYzoKICAgICAgICAgb3IxNihpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkp
KTsKICAgICB9CiAKLSAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJl
c3MgYWRkcmVzcykKLSAgICB7Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1f
cHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwotICAgICAgICBvcjgoaW1tLCBBZGRyZXNzKHNjcmF0
Y2hSZWdpc3RlcigpKSk7Ci0gICAgfQotCiAgICAgdm9pZCBzdWIzMihUcnVzdGVkSW1tMzIgaW1t
LCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOwpAQCAtNTg3LDYgKzU4MSwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB2b2lkIHJzaGlmdDY0KFJlZ2lz
dGVySUQgc3JjLCBUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgICAgIHJzaGlmdDY0KGltbSwgZGVzdCk7CisgICAg
fQorCiAgICAgdm9pZCB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc2hycV9pOHIoaW1tLm1fdmFsdWUsIGRlc3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCmluZGV4
IGIwMmU1NjAyMTAyNjQ5OWVmMzc1YmM2MDkxNGE5YTRkZTAxYjJkZjYuLmRjYWYwYmE2Y2EzMThm
MTgwMjkyY2JhOGQ3ZGMwMGZhNTc3OTFlYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKQEAgLTE4MSw3ICsxODEsOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBtYWNybyhoYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uKSBcCiAgICAgbWFjcm8oY3JlYXRl
UHJpdmF0ZVN5bWJvbCkgXAogICAgIG1hY3JvKGVudHJpZXMpIFwKLSAgICBtYWNybyhvdXRPZkxp
bmVSZWFjdGlvbkNvdW50cykKKyAgICBtYWNybyhvdXRPZkxpbmVSZWFjdGlvbkNvdW50cykgXAor
ICAgIG1hY3JvKGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcikKIAogCiBuYW1lc3BhY2UgU3lt
Ym9scyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXN0LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5y
YgppbmRleCAxODI1ZWMyYWQ1YTAzMzlkNGYzZWYxOTVkZDZmOWZjZjIyZDA2NDljLi5iNmQ4MzQ5
NTIzNTczYWQxMmExMWIwMzA5MzkwN2ZjY2FjZTk3YzhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIKQEAgLTI5LDYgKzI5LDcgQEAgdHlwZXMg
WwogICAgIDpEZWJ1Z0hvb2tUeXBlLAogICAgIDpFQ01BTW9kZSwKICAgICA6RXJyb3JUeXBlV2l0
aEV4dGVuc2lvbiwKKyAgICA6RW51bWVyYXRvck1ldGFkYXRhLAogICAgIDpHZXRCeUlkTW9kZSwK
ICAgICA6R2V0QnlJZE1vZGVNZXRhZGF0YSwKICAgICA6R2V0QnlWYWxIaXN0b3J5LApAQCAtMTE1
NCw4OSArMTE1NSw2OSBAQCBvcCA6cHJvZmlsZV9jb250cm9sX2Zsb3csCiAgICAgICAgIGJhc2lj
QmxvY2tMb2NhdGlvbjogQmFzaWNCbG9ja0xvY2F0aW9uLiosCiAgICAgfQogCi1vcCA6Z2V0X2Vu
dW1lcmFibGVfbGVuZ3RoLAorb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAogICAgIGFyZ3M6
IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxS
ZWdpc3RlciwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5LAor
b3AgOmVudW1lcmF0b3JfbmV4dCwKICAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJl
Z2lzdGVyLAorICAgICAgICAjIG91dAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdp
c3RlciwKKyAgICAgICAgIyBpbi9vdXQKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLCAj
IFdpbGwgYWx3YXlzIGJlIGEgSlMgVUludDMyIHJlcHJlc2VudGluZyBhIEpTRm9ySW5Nb2RlLgor
ICAgICAgICBpbmRleDogVmlydHVhbFJlZ2lzdGVyLCAjIEdldHMgcmVzZXQgdG8gemVybyBldmVy
eSB0aW1lIG1vZGUgY2hhbmdlcy4KKyAgICAgICAgIyBpbgogICAgICAgICBiYXNlOiBWaXJ0dWFs
UmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGVu
dW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1ldGFkYXRhOiB7CiAgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRh
dGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDpoYXNfZW51bWVyYWJsZV9zdHJ1
Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3Rl
ciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmly
dHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAg
fQotCi1vcCA6aGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAg
ICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAot
ICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBW
aXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6aW5fc3RydWN0dXJlX3Byb3BlcnR5LAotICAg
IGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIGJhc2U6IFZp
cnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmhhc19lbnVtZXJh
YmxlX3Byb3BlcnR5LAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIs
Ci0gICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1
YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDpnZXRfZGlyZWN0X3BuYW1lLAorb3AgOmVudW1lcmF0
b3JfZ2V0X2J5X3ZhbCwKICAgICBhcmdzOiB7CiAgICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVy
LAogICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0
dWFsUmVnaXN0ZXIsCisgICAgICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJv
cGVydHlOYW1lOiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0
ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKICAgICB9LAogICAgIG1l
dGFkYXRhOiB7CiAgICAgICAgIHByb2ZpbGU6IFZhbHVlUHJvZmlsZSwKKyAgICAgICAgYXJyYXlQ
cm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVy
YXRvck1ldGFkYXRhLAogICAgIH0KIAotb3AgOmdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yLAorb3Ag
OmVudW1lcmF0b3JfaW5fYnlfdmFsLAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDpl
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmly
dHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAg
ICAgIG1vZGU6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgcHJvcGVydHlOYW1lOiBWaXJ0dWFs
UmVnaXN0ZXIsCiAgICAgICAgIGluZGV4OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6
ZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0
dWFsUmVnaXN0ZXIsCiAgICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAg
ICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICB9LAorICAgIG1ldGFkYXRhOiB7CisgICAg
ICAgIGFycmF5UHJvZmlsZTogQXJyYXlQcm9maWxlLAorICAgICAgICBlbnVtZXJhdG9yTWV0YWRh
dGE6IEVudW1lcmF0b3JNZXRhZGF0YSwKICAgICB9CiAKLW9wIDp0b19pbmRleF9zdHJpbmcsCitv
cCA6ZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5LAogICAgIGFyZ3M6IHsKICAgICAgICAgZHN0
OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAg
ICAgbW9kZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxS
ZWdpc3RlciwKICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVy
YXRvcjogVmlydHVhbFJlZ2lzdGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAg
YXJyYXlQcm9maWxlOiBBcnJheVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTog
RW51bWVyYXRvck1ldGFkYXRhLAogICAgIH0KIAogb3AgOnVucmVhY2hhYmxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmNwcAppbmRleCAwNzU2
MTg5OWE2MjA5ZTM2Y2JmYTcyYTA1NGYxNTEyZDY3MzhjMGNjLi4zMjQ3ZTJlNzE1MWIxZWQ1ODlh
OTZkOTQ4NTc1MzJhYzNiYWYxNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAKQEAgLTE2MywxMSArMTYzLDkgQEAgdm9pZCBjb21w
dXRlVXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVy
LCBjb25zdCBJbnN0cnUKIAogICAgIFVTRVMoT3BTcHJlYWQsIGFyZ3VtZW50KQogICAgIFVTRVMo
T3BHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGJhc2UpCi0gICAgVVNFUyhPcEdldEVudW1lcmFibGVM
ZW5ndGgsIGJhc2UpCiAgICAgVVNFUyhPcE5ld0Z1bmNFeHAsIHNjb3BlKQogICAgIFVTRVMoT3BO
ZXdHZW5lcmF0b3JGdW5jRXhwLCBzY29wZSkKICAgICBVU0VTKE9wTmV3QXN5bmNGdW5jRXhwLCBz
Y29wZSkKLSAgICBVU0VTKE9wVG9JbmRleFN0cmluZywgaW5kZXgpCiAgICAgVVNFUyhPcENyZWF0
ZUxleGljYWxFbnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAg
ICAgVVNFUyhPcENyZWF0ZUdlbmVyYXRvckZyYW1lRW52aXJvbm1lbnQsIHNjb3BlLCBzeW1ib2xU
YWJsZSwgaW5pdGlhbFZhbHVlKQogICAgIFVTRVMoT3BSZXNvbHZlU2NvcGUsIHNjb3BlKQpAQCAt
MjIxLDExICsyMTksNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmly
dHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogICAgIFVTRVMoT3BHZXRG
cm9tQXJndW1lbnRzLCBhcmd1bWVudHMpCiAgICAgVVNFUyhPcE5ld0FycmF5QnVmZmVyLCBpbW11
dGFibGVCdXR0ZXJmbHkpCiAKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9w
ZXJ0eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEhhc0VudW1lcmFi
bGVQcm9wZXJ0eSwgYmFzZSwgcHJvcGVydHkpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSwgZW51bWVyYXRvciwgaW5kZXgpCi0gICAgVVNFUyhPcEVudW1lcmF0b3JHZW5lcmlj
UG5hbWUsIGVudW1lcmF0b3IsIGluZGV4KQogICAgIFVTRVMoT3BHZXRCeVZhbCwgYmFzZSwgcHJv
cGVydHkpCiAgICAgVVNFUyhPcEdldFByaXZhdGVOYW1lLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBV
U0VTKE9wUHV0UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5LCB2YWx1ZSkKQEAgLTI2NSw4ICsy
NTgsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lz
dGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAgVVNFUyhPcEdldEJ5VmFsV2l0
aFRoaXMsIGJhc2UsIHRoaXNWYWx1ZSwgcHJvcGVydHkpCiAgICAgVVNFUyhPcEluc3RhbmNlb2ZD
dXN0b20sIHZhbHVlLCBjb25zdHJ1Y3RvciwgaGFzSW5zdGFuY2VWYWx1ZSkKLSAgICBVU0VTKE9w
SGFzT3duU3RydWN0dXJlUHJvcGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQotICAg
IFVTRVMoT3BJblN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwgZW51bWVyYXRvcikK
IAogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBp
bnN0cnVjdGlvbi0+YXM8T3BDYWxsVmFyYXJncz4oKTsKQEAgLTI4NCw4ICsyNzUsNiBAQCB2b2lk
IGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVn
aXN0ZXIsIGNvbnN0IEluc3RydQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVVNFUyhP
cEdldERpcmVjdFBuYW1lLCBiYXNlLCBwcm9wZXJ0eSwgaW5kZXgsIGVudW1lcmF0b3IpCi0KICAg
ICBVU0VTKE9wU3dpdGNoU3RyaW5nLCBzY3J1dGluZWUpCiAgICAgVVNFUyhPcFN3aXRjaENoYXIs
IHNjcnV0aW5lZSkKICAgICBVU0VTKE9wU3dpdGNoSW1tLCBzY3J1dGluZWUpCkBAIC0yOTUsNiAr
Mjg0LDExIEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVn
aXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wWWllbGQsIGFy
Z3VtZW50KQogCisgICAgVVNFUyhPcEVudW1lcmF0b3JOZXh0LCBtb2RlLCBpbmRleCwgYmFzZSwg
ZW51bWVyYXRvcikKKyAgICBVU0VTKE9wRW51bWVyYXRvckdldEJ5VmFsLCBiYXNlLCBtb2RlLCBw
cm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySW5C
eVZhbCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgZW51bWVyYXRvcikKKyAgICBV
U0VTKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUs
IGluZGV4LCBlbnVtZXJhdG9yKQorCiAgICAgY2FzZSBvcF9pdGVyYXRvcl9vcGVuOiB7CiAgICAg
ICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAg
ICAgICAgIHVzZUF0RWFjaENoZWNrcG9pbnRTdGFydGluZ1dpdGgoT3BJdGVyYXRvck9wZW46OnN5
bWJvbENhbGwsIGJ5dGVjb2RlLm1fc3ltYm9sSXRlcmF0b3IsIGJ5dGVjb2RlLm1faXRlcmFibGUp
OwpAQCAtNDI0LDE3ICs0MTgsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVJbmRleElt
cGwodW5zaWduZWQgbnVtVmFycywgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydQogICAgICAgICBy
ZXR1cm47CiAgICAgLy8gVGhlc2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRo
ZSBmaXJzdCBhcmd1bWVudC4KICAgICBERUZTKE9wQXJndW1lbnRDb3VudCwgZHN0KQotICAgIERF
RlMoT3BUb0luZGV4U3RyaW5nLCBkc3QpCi0gICAgREVGUyhPcEdldEVudW1lcmFibGVMZW5ndGgs
IGRzdCkKLSAgICBERUZTKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgZHN0KQotICAg
IERFRlMoT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZTKE9w
SGFzRW51bWVyYWJsZVByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc093blN0cnVjdHVyZVBy
b3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEluU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBE
RUZTKE9wR2V0RGlyZWN0UG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UHJvcGVydHlFbnVtZXJh
dG9yLCBkc3QpCi0gICAgREVGUyhPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgZHN0KQotICAg
IERFRlMoT3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBkc3QpCiAgICAgREVGUyhPcEdldFBhcmVu
dFNjb3BlLCBkc3QpCiAgICAgREVGUyhPcFB1c2hXaXRoU2NvcGUsIGRzdCkKICAgICBERUZTKE9w
Q3JlYXRlTGV4aWNhbEVudmlyb25tZW50LCBkc3QpCkBAIC01NjcsNiArNTUxLDExIEBAIHZvaWQg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1CiAKICAgICBERUZTKE9wQ2F0Y2gsIGV4Y2VwdGlvbiwgdGhyb3du
VmFsdWUpCiAKKyAgICBERUZTKE9wRW51bWVyYXRvck5leHQsIHByb3BlcnR5TmFtZSwgbW9kZSwg
aW5kZXgpCisgICAgREVGUyhPcEVudW1lcmF0b3JHZXRCeVZhbCwgZHN0KQorICAgIERFRlMoT3BF
bnVtZXJhdG9ySW5CeVZhbCwgZHN0KQorICAgIERFRlMoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVy
dHksIGRzdCkKKwogICAgIGNhc2Ugb3BfaXRlcmF0b3Jfb3BlbjogewogICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wSXRlcmF0b3JPcGVuPigpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IGZjZmEyOTJhZDA0ZWYx
MDYwNTI1ZTM3ZjFhODg2NjE0ZDM1NDg3NDguLmRjZWZjNmFkNmMyZGEwYTE0ODk4Y2ZjZjYxODlj
NmU5NGQyMGU1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCkBAIC00NzIsOCArNDcyLDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKTsKICAgICAgICAg
bV9ieXRlY29kZUNvc3QgKz0gb3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF07CiAgICAgICAgIHN3aXRj
aCAob3Bjb2RlSUQpIHsKLSAgICAgICAgTElOSyhPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHkpCi0KICAgICAgICAgTElOSyhPcENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5L
KE9wVGFpbENhbGxWYXJhcmdzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGxGb3J3
YXJkQXJndW1lbnRzLCBwcm9maWxlKQpAQCAtNDgxLDcgKzQ3OSw2IEBAIGJvb2wgQ29kZUJsb2Nr
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rCiAgICAgICAgIExJTksoT3BHZXRCeVZhbCwgcHJvZmlsZSkKICAgICAgICAgTElO
SyhPcEdldFByaXZhdGVOYW1lLCBwcm9maWxlKQogCi0gICAgICAgIExJTksoT3BHZXREaXJlY3RQ
bmFtZSwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWRXaXRoVGhpcywgcHJvZmlsZSkK
ICAgICAgICAgTElOSyhPcFRyeUdldEJ5SWQsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BHZXRC
eUlkRGlyZWN0LCBwcm9maWxlKQpAQCAtNTAzLDYgKzUwMCwxMSBAQCBib29sIENvZGVCbG9jazo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUs
IFVubGluawogCiAgICAgICAgIExJTksoT3BHZXRCeUlkLCBwcm9maWxlKQogCisgICAgICAgIExJ
TksoT3BFbnVtZXJhdG9yTmV4dCwgcHJvZmlsZSkKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JJ
bkJ5VmFsLCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5
LCBwcm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckdldEJ5VmFsLCBwcm9maWxlKQor
CiAgICAgICAgIExJTksoT3BDYWxsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVGFpbENhbGws
IHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BDYWxsRXZhbCwgcHJvZmlsZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFudC5oCmluZGV4IGVlNDA5
ODhhODYxZGIxNWFmYzEwZDQxZmM0YjFlZmM1OWY2Y2IxZGMuLjVmMzJhZjgyMGU0NWZhNDlkYzky
ZmM0NTY3YWFmNDAxNTNjYmVhYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9MaW5rVGltZUNvbnN0YW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaApAQCAtMTExLDYgKzExMSw3IEBAIGNsYXNzIEpTR2xv
YmFsT2JqZWN0OwogICAgIHYoY2FsbEZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihoYXNPd25Q
cm9wZXJ0eUZ1bmN0aW9uLCBudWxscHRyKSBcCiAgICAgdihjcmVhdGVQcml2YXRlU3ltYm9sLCBu
dWxscHRyKSBcCisgICAgdihlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IsIG51bGxwdHIpIFwK
IAogCiAjZGVmaW5lIERFQ0xBUkVfTElOS19USU1FX0NPTlNUQU5UKG5hbWUsIGNvZGUpIG5hbWUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKaW5kZXggNDg2YzE1MTJhOTg0
MzBhMWQzMjRiNjM4NWE1NTNjMWY5NWRmNGQxOS4uYWM3ZjcxMGQ4MDY1ZGM4M2Y1MDE3MmI5NWUy
YTk2ZDY4ZDBkMWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L09wY29kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaApA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKQEAgLTk5LDcgKzk5LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0
aEZvck1heE9wY29kZUxlbmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNy
byhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykgXAogICAgIG1hY3JvKE9wQ29uc3RydWN0VmFy
YXJncykgXAogICAgIG1hY3JvKE9wR2V0QnlWYWwpIFwKLSAgICBtYWNybyhPcEdldERpcmVjdFBu
YW1lKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwKICAgICBtYWNybyhPcEdl
dEJ5SWQpIFwKICAgICBtYWNybyhPcEdldEJ5SWRXaXRoVGhpcykgXAogICAgIG1hY3JvKE9wVHJ5
R2V0QnlJZCkgXApAQCAtMTI3LDcgKzEyNyw2IEBAIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
Yml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBXVEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAg
ICAgbWFjcm8oT3BHZXRQcml2YXRlTmFtZSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX09QQ09ERV9X
SVRIX0FSUkFZX1BST0ZJTEUobWFjcm8pIFwKLSAgICBtYWNybyhPcEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHkpIFwKICAgICBtYWNybyhPcENhbGxWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BU
YWlsQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsRm9yd2FyZEFyZ3VtZW50cykg
XApAQCAtMTM2LDYgKzEzNSwxMCBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRo
Rm9yTWF4T3Bjb2RlTGVuZ3RoID0gV1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3Jv
KE9wSW5CeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWwpIFwKICAgICBtYWNybyhPcFB1dEJ5
VmFsRGlyZWN0KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKE9w
RW51bWVyYXRvckdldEJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9ySW5CeVZhbCkgXAor
ICAgIG1hY3JvKE9wRW51bWVyYXRvckhhc093blByb3BlcnR5KSBcCiAKICNkZWZpbmUgRk9SX0VB
Q0hfT1BDT0RFX1dJVEhfQVJSQVlfQUxMT0NBVElPTl9QUk9GSUxFKG1hY3JvKSBcCiAgICAgbWFj
cm8oT3BOZXdBcnJheSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAppbmRleCA3MzkwZDUyYzRhZTFhYTFjM2Uy
MjZjOTUyMmY3YjQ0Njc5Yzk2ZGUzLi42ZDNjODU5ODc1YzJjZjExYTA0NmNlZGU0YTdhOTUzZWJk
YmQ0YjBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcApAQCAtMTUwMywxMSArMTUwMywxMSBAQCB1bnNpZ25l
ZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3Bl
cnR5KFJlZ2lzdGVySUQqCiAgICAgcmV0dXJuIG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpOwog
fQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpyZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0
eUluRm9ySW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0dXJlQ29udGV4dCwgdW5z
aWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCit2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpyZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9ySW5Mb29wKEZvckluQ29udGV4dCYgY29u
dGV4dCwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQoZ2VuZXJpY1BhdGguaXNCb3VuZCgpKTsKICAgICBSRUxFQVNFX0FTU0VS
VCghZ2VuZXJpY1BhdGguaXNGb3J3YXJkKCkpOwotICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSGFz
T3duUHJvcGVydHlKdW1wKGJyYW5jaE9mZnNldCwgZ2VuZXJpY1BhdGgubG9jYXRpb24oKSk7Cisg
ICAgY29udGV4dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNoT2Zmc2V0LCBnZW5lcmljUGF0
aC5sb2NhdGlvbigpKTsKIH0KIAogYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aGFzQ29uc3RhbnQo
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQpIGNvbnN0CkBAIC0yNTgxLDEyICsyNTgxLDggQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJbkJ5VmFsKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogcHJvcGVydHkKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9w
ZXJ0eSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmICghY29udGV4dC5pc1N0
cnVjdHVyZUZvckluQ29udGV4dCgpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgU3Ry
dWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5hc1N0cnVjdHVy
ZUZvckluQ29udGV4dCgpOwotICAgICAgICBPcEluU3RydWN0dXJlUHJvcGVydHk6OmVtaXQ8T3Bj
b2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5LCBzdHJ1Y3R1cmVDb250
ZXh0LmVudW1lcmF0b3IoKSk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkSW5JbnN0KG1f
bGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIE9w
RW51bWVyYXRvckluQnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBkc3QsIGJh
c2UsIGNvbnRleHQubW9kZSgpLCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBj
b250ZXh0LmVudW1lcmF0b3IoKSk7CisgICAgICAgIGNvbnRleHQuYWRkSW5JbnN0KG1fbGFzdElu
c3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CiAgICAgICAgIHJldHVybiBk
c3Q7CiAgICAgfQogCkBAIC0yNzM0LDI0ICsyNzMwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2Us
IFIKICAgICAgICAgaWYgKGNvbnRleHQubG9jYWwoKSAhPSBwcm9wZXJ0eSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChjb250ZXh0LmlzSW5kZXhlZEZvckluQ29udGV4dCgp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBpbmRleGVkQ29udGV4dCA9IGNvbnRleHQuYXNJbmRleGVk
Rm9ySW5Db250ZXh0KCk7Ci0gICAgICAgICAgICBraWxsKGRzdCk7Ci0gICAgICAgICAgICBpZiAo
T3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpOYXJyb3c+KHRo
aXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVt
aXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6TmFycm93Pih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZSBpZiAo
T3BHZXRCeVZhbDo6Y2hlY2tXaXRob3V0TWV0YWRhdGFJRDxPcGNvZGVTaXplOjpXaWRlMTY+KHRo
aXMsIGRzdCwgYmFzZSwgcHJvcGVydHkpKQotICAgICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVt
aXRXaXRoU21hbGxlc3RTaXplUmVxdWlyZW1lbnQ8T3Bjb2RlU2l6ZTo6V2lkZTE2Pih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIE9wR2V0QnlWYWw6OmVtaXQ8T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBk
c3QsIGJhc2UsIGluZGV4ZWRDb250ZXh0LmluZGV4KCkpOwotICAgICAgICAgICAgaW5kZXhlZENv
bnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmlu
ZGV4KCkpOwotICAgICAgICAgICAgcmV0dXJuIGRzdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IFdlIGNhbm5vdCBkbyB0aGUgYWJvdmUgb3B0aW1pemF0aW9uIGhlcmUgc2luY2UgT3BHZXREaXJl
Y3RQbmFtZSA9PiBPcEdldEJ5VmFsIGNvbnZlcnNpb24gaW52b2x2ZXMgZGlmZmVyZW50IG1ldGFk
YXRhIElEIGFsbG9jYXRpb24uCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dCYgc3RydWN0
dXJlQ29udGV4dCA9IGNvbnRleHQuYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKTsKLSAgICAgICAg
T3BHZXREaXJlY3RQbmFtZTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGtpbGwoZHN0
KSwgYmFzZSwgcHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuaW5kZXgoKSwgc3RydWN0dXJlQ29u
dGV4dC5lbnVtZXJhdG9yKCkpOwotCi0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQuYWRkR2V0SW5z
dChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQoKSwgcHJvcGVydHktPmluZGV4KCkpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgYnl0ZWNvZGUgcmV3cml0ZXIgdGhh
dCBjYW4gcmVzaXplIGNodW5rcy4KKyAgICAgICAgT3BFbnVtZXJhdG9yR2V0QnlWYWw6OmVtaXQ8
T3Bjb2RlU2l6ZTo6V2lkZTMyPih0aGlzLCBraWxsKGRzdCksIGJhc2UsIGNvbnRleHQubW9kZSgp
LCBwcm9wZXJ0eSwgY29udGV4dC5wcm9wZXJ0eU9mZnNldCgpLCBjb250ZXh0LmVudW1lcmF0b3Io
KSk7CisgICAgICAgIGNvbnRleHQuYWRkR2V0SW5zdChtX2xhc3RJbnN0cnVjdGlvbi5vZmZzZXQo
KSwgcHJvcGVydHktPmluZGV4KCkpOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KIApAQCAt
NDU1MiwzMyArNDUzMywxNCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdl
dEdsb2JhbFByaXZhdGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudAogICAgIHJldHVybiBl
bWl0R2V0RnJvbVNjb3BlKGRzdCwgc2NvcGUuZ2V0KCksIHZhciwgVGhyb3dJZk5vdEZvdW5kKTsK
IH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVu
Z3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKLXsKLSAgICBPcEdldEVudW1l
cmFibGVMZW5ndGg6OmVtaXQodGhpcywgZHN0LCBiYXNlKTsKLSAgICByZXR1cm4gZHN0OwotfQot
Ci1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eU5hbWUpCi17Ci0gICAgT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OjplbWl0
KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1S
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQ
cm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHBy
b3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVy
SUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKQogewotICAgIE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5Ojpl
bWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yKTsKLSAgICByZXR1
cm4gZHN0OworICAgIE9wRW51bWVyYXRvck5leHQ6OmVtaXQodGhpcywgcHJvcGVydHlOYW1lLCBt
b2RlLCBpbmRleCwgYmFzZSwgZW51bWVyYXRvcik7CiB9CiAKLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKQorUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBtb2RlLCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKQogewot
ICAgIE9wSGFzRW51bWVyYWJsZVByb3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgcHJvcGVy
dHlOYW1lKTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEhhc093blN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yKQotewotICAgIE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBi
YXNlLCBwcm9wZXJ0eU5hbWUsIGVudW1lcmF0b3IpOworICAgIE9wRW51bWVyYXRvckhhc093blBy
b3BlcnR5OjplbWl0KHRoaXMsIGRzdCwgYmFzZSwgbW9kZSwgcHJvcGVydHlOYW1lLCBpbmRleCwg
ZW51bWVyYXRvcik7CiAgICAgcmV0dXJuIGRzdDsKIH0KIApAQCAtNDU4OCwyNCArNDU1MCw2IEBA
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9y
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0CiAgICAgcmV0dXJuIGRzdDsKIH0KIAotUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1l
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5k
ZXgpCi17Ci0gICAgT3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6OmVtaXQodGhpcywgZHN0LCBl
bnVtZXJhdG9yLCBpbmRleCk7Ci0gICAgcmV0dXJuIGRzdDsKLX0KLQotUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KQotewot
ICAgIE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3Is
IGluZGV4KTsKLSAgICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRl
eCkKLXsKLSAgICBPcFRvSW5kZXhTdHJpbmc6OmVtaXQodGhpcywgZHN0LCBpbmRleCk7Ci0gICAg
cmV0dXJuIGRzdDsKLX0KLQogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc0Nl
bGxXaXRoVHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlIHR5cGUp
CiB7CiAgICAgT3BJc0NlbGxXaXRoVHlwZTo6ZW1pdCh0aGlzLCBkc3QsIHNyYywgdHlwZSk7CkBA
IC00NjQ4LDIzICs0NTkyLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJ
c0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQogICAgIHJldHVybiBkc3Q7
CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdp
c3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQotewotICAg
IGlmICghbG9jYWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5D
b250ZXh0U3RhY2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgSW5kZXhlZEZvckluQ29udGV4dChsb2Nh
bFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsKLX0K
LQotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJ
RCogbG9jYWxSZWdpc3RlcikKLXsKLSAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCi0gICAgICAgIHJl
dHVybjsKLSAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzSW5kZXhlZEZvcklu
Q29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5dGVjb2Rl
RW5kT2Zmc2V0KTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLnJlbW92ZUxhc3QoKTsKLX0KLQog
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkQXJyb3dGdW5jdGlvbkxleGlj
YWxFbnZpcm9ubWVudChjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewogICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uKCkgfHwgbV9jb2RlQmxvY2stPmlzQXJyb3dG
dW5jdGlvbkNvbnRleHQoKSB8fCBjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6
OkV4dGVuZHMgfHwgbV9jb2RlVHlwZSA9PSBFdmFsQ29kZSB8fCBtX2NvZGVCbG9jay0+cGFyc2VN
b2RlKCkgPT0gU291cmNlUGFyc2VNb2RlOjpDbGFzc0ZpZWxkSW5pdGlhbGl6ZXJNb2RlKTsKQEAg
LTQ3NjgsMjAgKzQ2OTUsMjAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1dFRoaXNU
b0Fycm93RnVuY3Rpb25Db250ZXh0U2NvcGUoKQogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlciwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogZW51bWVyYXRvclJlZ2lzdGVyLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxl
PiBiYXNlVmFyaWFibGUpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoRm9ySW5TY29wZShS
ZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWVSZWdpc3Rl
ciwgUmVnaXN0ZXJJRCogcHJvcGVydHlPZmZzZXRSZWdpc3RlciwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvclJlZ2lzdGVyLCBSZWdpc3RlcklEKiBtb2RlUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFy
aWFibGU+IGJhc2VWYXJpYWJsZSkKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAg
IHJldHVybjsKICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCA9IGluc3RydWN0
aW9ucygpLnNpemUoKTsKLSAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigq
bmV3IFN0cnVjdHVyZUZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBpbmRleFJlZ2lzdGVyLCBw
cm9wZXJ0eVJlZ2lzdGVyLCBlbnVtZXJhdG9yUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9keUJ5
dGVjb2RlU3RhcnRPZmZzZXQpKSk7CisgICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRv
cHRSZWYoKm5ldyBGb3JJbkNvbnRleHQobG9jYWxSZWdpc3RlciwgcHJvcGVydHlOYW1lUmVnaXN0
ZXIsIHByb3BlcnR5T2Zmc2V0UmVnaXN0ZXIsIGVudW1lcmF0b3JSZWdpc3RlciwgbW9kZVJlZ2lz
dGVyLCBiYXNlVmFyaWFibGUsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwogfQogCi12b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxv
Y2FsUmVnaXN0ZXIpCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BGb3JJblNjb3BlKFJlZ2lz
dGVySUQqIGxvY2FsUmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQogICAgICAg
ICByZXR1cm47CiAgICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0ID0gaW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpOwotICAgIG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5hc1N0cnVjdHVy
ZUZvckluQ29udGV4dCgpLmZpbmFsaXplKCp0aGlzLCBtX2NvZGVCbG9jay5nZXQoKSwgYm9keUJ5
dGVjb2RlRW5kT2Zmc2V0KTsKKyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmxhc3QoKS0+ZmluYWxp
emUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogICAg
IG1fZm9ySW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01Mzg0LDM0ICs1MzEx
LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE9wdGlvbmFsQ2hlY2soUmVnaXN0ZXJJ
RCogc3JjKQogICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZE9yTnVsbChuZXdUZW1w
b3JhcnkoKSwgc3JjKSwgbV9vcHRpb25hbENoYWluVGFyZ2V0U3RhY2subGFzdCgpLmdldCgpKTsK
IH0KIAotdm9pZCBGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJv
ZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZv
ckluQ29udGV4dHMgaXMga2luZCBvZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYK
LSAgICAvLyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6Ci0gICAg
Ly8KLSAgICAvLyAoMSkgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVk
IHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgbG9vcC4KLSAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0
aW9uIHZhcmlhYmxlIGlzIGNhcHR1cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5j
dGlvbi4KLSAgICAvLwotICAgIC8vIFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2ll
bnRseSByYXJlbHkgdGhhdCBpdCdzIG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKLSAgICAvLyAi
YW5hbHlzaXMiIHRvIG1ha2UgaXRlcmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8g
ZG8gdGhpcywgd2Ugd291bGQgZWl0aGVyIGhhdmUKLSAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxv
dy1zZW5zaXRpdmUgYW5hbHlzaXMgdG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZh
cmlhYmxlIHdhcwotICAgIC8vIHJlYXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8g
cnVudGltZSBjaGVja3MgdG8gc2VlIGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgotICAgIC8vIHJl
YXNzaWduZWQgZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCi0KLSAgICBmb3IgKHVuc2lnbmVkIG9m
ZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7IGlzVmFsaWQoKSAmJiBvZmZzZXQgPCBi
b2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7Ci0gICAgICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5l
cmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFpbnN0cnVj
dGlvbi0+aXM8T3BFbnRlcj4oKSk7Ci0gICAgICAgIGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50
ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2twb2ludHMoKTsgY2hlY2twb2ludC0tOykgewot
ICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsK
LSAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFu
ZCkKLSAgICAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZSgpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgb2Zmc2V0ICs9IGluc3RydWN0aW9uLT5zaXplKCk7Ci0gICAgfQot
fQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBUdXBsZVR5cGU+Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1l
IFR1cGxlVHlwZT4KIEFMV0FZU19JTkxJTkUgdm9pZCByZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVHVwbGVUeXBlJiBpbnN0VHVwbGUpCiB7CiAgICAgdW5zaWduZWQgaW5z
dEluZGV4ID0gc3RkOjpnZXQ8MD4oaW5zdFR1cGxlKTsKQEAgLTU0MzEsMzQgKzUzMzEsNTIgQEAg
QUxXQVlTX0lOTElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBUdXBsZVR5cGUmIGluc3RUdXBsZSkKICAgICAvLyAyLiBiYXNlIHN0YXlzIHRoZSBzYW1lLgog
ICAgIC8vIDMuIHByb3BlcnR5IGdldHMgc3dpdGNoZWQgdG8gdGhlIG9yaWdpbmFsIHByb3BlcnR5
LgogCi0gICAgaWYgY29uc3RleHByIChzdGQ6OmlzX3NhbWU8T2xkT3BUeXBlLCBPcEdldERpcmVj
dFBuYW1lPjo6dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BHZXRCeVZh
bCkgPD0gc2l6ZW9mKE9wR2V0RGlyZWN0UG5hbWUpKTsKLSAgICAgICAgT3BHZXRCeVZhbDo6ZW1p
dDxPcGNvZGVTaXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29k
ZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNl
IGlmIGNvbnN0ZXhwciAoc3RkOjppc19zYW1lPE9sZE9wVHlwZSwgT3BJblN0cnVjdHVyZVByb3Bl
cnR5Pjo6dmFsdWUpIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoT3BJbkJ5VmFsKSA8
PSBzaXplb2YoT3BJblN0cnVjdHVyZVByb3BlcnR5KSk7Ci0gICAgICAgIE9wSW5CeVZhbDo6ZW1p
dDxPcGNvZGVTaXplOjpXaWRlMzI+KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29k
ZS5tX2Jhc2UsIFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoTmV3T3BUeXBlKSA8PSBzaXplb2YoT2xkT3BUeXBlKSk7CisgICAgTmV3T3BUeXBl
OjplbWl0KCZnZW5lcmF0b3IsIGJ5dGVjb2RlLm1fZHN0LCBieXRlY29kZS5tX2Jhc2UsIFZpcnR1
YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSk7CiAKICAgICAvLyA0LiBub3Agb3V0IHRoZSBy
ZW1haW5pbmcgYnl0ZXMKICAgICB3aGlsZSAoZ2VuZXJhdG9yLm1fd3JpdGVyLnBvc2l0aW9uKCkg
PCBlbmQpCiAgICAgICAgIE9wTm9wOjplbWl0PE9wY29kZVNpemU6Ok5hcnJvdz4oJmdlbmVyYXRv
cik7CiB9CiAKLXZvaWQgU3RydWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2Nr
LCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCit2b2lkIEZvckluQ29udGV4dDo6Zmlu
YWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQogewotICAg
IEJhc2U6OmZpbmFsaXplKGdlbmVyYXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZz
ZXQpOwotICAgIGlmIChpc1ZhbGlkKCkpCisgICAgLy8gTGV4aWNhbGx5IGludmFsaWRhdGluZyBG
b3JJbkNvbnRleHRzIGlzIGtpbmQgb2Ygd2VhayBzYXVjZSwgYnV0IGl0IG9ubHkgb2NjdXJzIGlm
CisgICAgLy8gZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyB0cnVlOgorICAg
IC8vCisgICAgLy8gKDEpIFRoZSBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyByZS1hc3NpZ25l
ZCB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIGxvb3AuCisgICAgLy8gKDIpIFRoZSBsb29wIGl0ZXJh
dGlvbiB2YXJpYWJsZSBpcyBjYXB0dXJlZCBpbiB0aGUgbGV4aWNhbCBzY29wZSBvZiB0aGUgZnVu
Y3Rpb24uCisgICAgLy8KKyAgICAvLyBUaGVzZSB0d28gc2l0dWF0aW9ucyBvY2N1ciBzdWZmaWNp
ZW50bHkgcmFyZWx5IHRoYXQgaXQncyBva2F5IHRvIHVzZSB0aGlzIHN0eWxlIG9mCisgICAgLy8g
ImFuYWx5c2lzIiB0byBtYWtlIGl0ZXJhdGlvbiBmYXN0ZXIuIElmIHdlIGRpZG4ndCB3YW50IHRv
IGRvIHRoaXMsIHdlIHdvdWxkIGVpdGhlciBoYXZlCisgICAgLy8gdG8gcGVyZm9ybSBzb21lIGZs
b3ctc2Vuc2l0aXZlIGFuYWx5c2lzIHRvIHNlZSBpZi93aGVuIHRoZSBsb29wIGl0ZXJhdGlvbiB2
YXJpYWJsZSB3YXMKKyAgICAvLyByZWFzc2lnbmVkLCBvciB3ZSdkIGhhdmUgdG8gcmVzb3J0IHRv
IHJ1bnRpbWUgY2hlY2tzIHRvIHNlZSBpZiB0aGUgdmFyaWFibGUgaGFkIGJlZW4KKyAgICAvLyBy
ZWFzc2lnbmVkIGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgorCisgICAgYm9vbCBlc2NhcGVkID0g
ZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBvZmZzZXQgPSBib2R5Qnl0ZWNvZGVTdGFydE9mZnNl
dCgpOyAhZXNjYXBlZCAmJiBvZmZzZXQgPCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQ7KSB7CisgICAg
ICAgIGF1dG8gaW5zdHJ1Y3Rpb24gPSBnZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKCkuYXQob2Zmc2V0
KTsKKyAgICAgICAgQVNTRVJUKCFpbnN0cnVjdGlvbi0+aXM8T3BFbnRlcj4oKSk7CisgICAgICAg
IGZvciAoQ2hlY2twb2ludCBjaGVja3BvaW50ID0gaW5zdHJ1Y3Rpb24tPm51bWJlck9mQ2hlY2tw
b2ludHMoKTsgY2hlY2twb2ludC0tOykgeworICAgICAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRl
Y29kZUluZGV4KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24ucHRyKCksIGNoZWNrcG9pbnQsIFsmXSAo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYWwoKS0+
dmlydHVhbFJlZ2lzdGVyKCkgPT0gb3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZXNjYXBl
ZCA9IHRydWU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgKz0g
aW5zdHJ1Y3Rpb24tPnNpemUoKTsKKyAgICB9CisKKyAgICBpZiAoIWVzY2FwZWQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIE9wY29kZUlEIGxhc3RPcGNvZGVJRCA9IGdlbmVyYXRvci5tX2xhc3RP
cGNvZGVJRDsKICAgICBJbnN0cnVjdGlvblN0cmVhbTo6TXV0YWJsZVJlZiBsYXN0SW5zdHJ1Y3Rp
b24gPSBnZW5lcmF0b3IubV9sYXN0SW5zdHJ1Y3Rpb247CiAKICAgICBmb3IgKGNvbnN0IGF1dG8m
IGluc3RUdXBsZSA6IG1fZ2V0SW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxPcEdldERpcmVjdFBu
YW1lPihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CisgICAgICAgIHJld3JpdGVPcDxPcEVudW1lcmF0
b3JHZXRCeVZhbCwgT3BHZXRCeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVwbGUpOwogCiAgICAgZm9y
IChjb25zdCBhdXRvJiBpbnN0VHVwbGUgOiBtX2luSW5zdHMpCi0gICAgICAgIHJld3JpdGVPcDxP
cEluU3RydWN0dXJlUHJvcGVydHk+KGdlbmVyYXRvciwgaW5zdFR1cGxlKTsKKyAgICAgICAgcmV3
cml0ZU9wPE9wRW51bWVyYXRvckluQnlWYWwsIE9wSW5CeVZhbD4oZ2VuZXJhdG9yLCBpbnN0VHVw
bGUpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBoYXNPd25Qcm9wZXJ0eVR1cGxlIDogbV9oYXNP
d25Qcm9wZXJ0eUp1bXBJbnN0cykgewogICAgICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEpt
cCkgPD0gc2l6ZW9mKE9wSm5lcVB0cikpOwpAQCAtNTQ4NywyMiArNTQwNSw2IEBAIHZvaWQgU3Ry
dWN0dXJlRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBVbmxpbmtlZENvZGVCCiAgICAgfQogfQogCi12b2lkIEluZGV4ZWRGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUJsb2NrR2Vu
ZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNldCkKLXsKLSAg
ICBCYXNlOjpmaW5hbGl6ZShnZW5lcmF0b3IsIGNvZGVCbG9jaywgYm9keUJ5dGVjb2RlRW5kT2Zm
c2V0KTsKLSAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGluc3RQYWlyIDogbV9nZXRJbnN0cykgewotICAgICAgICB1bnNpZ25lZCBpbnN0
SW5kZXggPSBpbnN0UGFpci5maXJzdDsKLSAgICAgICAgaW50IHByb3BlcnR5UmVnSW5kZXggPSBp
bnN0UGFpci5zZWNvbmQ7Ci0gICAgICAgIGdlbmVyYXRvci5tX3dyaXRlci5yZWYoaW5zdEluZGV4
KS0+Y2FzdDxPcEdldEJ5VmFsPigpLT5zZXRQcm9wZXJ0eShWaXJ0dWFsUmVnaXN0ZXIocHJvcGVy
dHlSZWdJbmRleCksIFtdKCkgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gVmlydHVhbFJlZ2lzdGVyKCk7Ci0gICAgICAgIH0pOwotICAgIH0K
LX0KLQogdm9pZCBTdGF0aWNQcm9wZXJ0eUFuYWx5c2lzOjpyZWNvcmQoKQogewogICAgIGF1dG8q
IGluc3RydWN0aW9uID0gbV9pbnN0cnVjdGlvblJlZi5wdHIoKTsKQEAgLTU1MjgsMTcgKzU0MzAs
MTQgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvVGhpcygpCiAgICAgT3BUb1RoaXM6
OmVtaXQodGhpcywga2lsbCgmbV90aGlzUmVnaXN0ZXIpLCBlY21hTW9kZSgpKTsKIH0KIAotU3Ry
dWN0dXJlRm9ySW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZFN0cnVjdHVyZUZvcklu
Q29udGV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eSkKK0ZvckluQ29udGV4dCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmZpbmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpCiB7CiAgICAgZm9y
IChzaXplX3QgaSA9IG1fZm9ySW5Db250ZXh0U3RhY2suc2l6ZSgpOyBpLS07ICkgewogICAgICAg
ICBGb3JJbkNvbnRleHQmIGNvbnRleHQgPSBtX2ZvckluQ29udGV4dFN0YWNrW2ldLmdldCgpOwog
ICAgICAgICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICByZXR1cm4gJmNvbnRleHQuYXNTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuICZjb250ZXh0OwogICAgIH0KIAogICAg
IHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDJmNWZmNzIzMjY0MjZiMTJlNGEwM2Nj
YzdjZmRiNjg0ZGFlNTk5MTQuLmY1NGQ4NGZlZGUyM2Y1OWZhN2ExMzk0ODk4ZmVlZjFkNDM4ZjU0
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTYxLDggKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICBjbGFzcyBKU0ltbXV0YWJsZUJ1dHRlcmZseTsKICAgICBjbGFzcyBJZGVudGlmaWVyOwotICAg
IGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgY2xhc3MgU3RydWN0dXJlRm9ySW5Db250
ZXh0OworICAgIGNsYXNzIEZvckluQ29udGV4dDsKIAogICAgIGVudW0gRXhwZWN0ZWRGdW5jdGlv
biB7CiAgICAgICAgIE5vRXhwZWN0ZWRGdW5jdGlvbiwKQEAgLTI1NSw3MiArMjU0LDE5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEZvckluQ29udGV4dCA6IHB1YmxpYyBSZWZDb3VudGVk
PEZvckluQ29udGV4dD4gewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRm9ySW5Db250ZXh0KTsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIHZpcnR1YWwgfkZvckluQ29udGV4dCgpID0gZGVmYXVsdDsKLQotICAgICAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KLSAgICAgICAgdm9pZCBpbnZhbGlk
YXRlKCkgeyBtX2lzVmFsaWQgPSBmYWxzZTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHlwZSA6
IHVpbnQ4X3QgewotICAgICAgICAgICAgSW5kZXhlZEZvckluLAotICAgICAgICAgICAgU3RydWN0
dXJlRm9ySW4KLSAgICAgICAgfTsKLQotICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KLSAgICAgICAgYm9vbCBpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6SW5kZXhlZEZvckluOyB9Ci0gICAgICAgIGJvb2wgaXNT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6U3Ry
dWN0dXJlRm9ySW47IH0KLQotICAgICAgICBJbmRleGVkRm9ySW5Db250ZXh0JiBhc0luZGV4ZWRG
b3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbmRleGVkRm9y
SW5Db250ZXh0KCkpOwotICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEluZGV4
ZWRGb3JJbkNvbnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cnVjdHVyZUZv
ckluQ29udGV4dCYgYXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKQotICAgICAgICB7Ci0gICAgICAg
ICAgICBBU1NFUlQoaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAgICAgICByZXR1
cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlRm9ySW5Db250ZXh0Kj4odGhpcyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxSZWdpc3Rlci5nZXQoKTsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBGb3JJbkNvbnRl
eHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgVHlwZSB0eXBlLCB1bnNpZ25lZCBib2R5Qnl0
ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgIDogbV9sb2NhbFJlZ2lzdGVyKGxvY2FsUmVn
aXN0ZXIpCi0gICAgICAgICAgICAsIG1fdHlwZSh0eXBlKQotICAgICAgICAgICAgLCBtX2JvZHlC
eXRlY29kZVN0YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICB7IH0K
LQotICAgICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KLQotICAgICAgICB2b2lkIGZpbmFsaXpl
KEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKLSAgICAgICAgYm9vbCBtX2lzVmFsaWQgeyB0
cnVlIH07Ci0gICAgICAgIFR5cGUgbV90eXBlOwotICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRl
Y29kZVN0YXJ0T2Zmc2V0OwotICAgIH07Ci0KLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRl
eHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAgICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29u
dGV4dDsKICAgICBwdWJsaWM6CiAgICAgICAgIHVzaW5nIEdldEluc3QgPSBzdGQ6OnR1cGxlPHVu
c2lnbmVkLCBpbnQ+OwogICAgICAgICB1c2luZyBJbkluc3QgPSBHZXRJbnN0OwogICAgICAgICB1
c2luZyBIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0ID0gc3RkOjp0dXBsZTx1bnNpZ25lZCwgdW5zaWdu
ZWQ+OwogCi0gICAgICAgIFN0cnVjdHVyZUZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFy
aWFibGU+IGJhc2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0g
ICAgICAgICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpTdHJ1Y3R1cmVG
b3JJbiwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgICAgICAsIG1faW5kZXhSZWdp
c3RlcihpbmRleFJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX3Byb3BlcnR5UmVnaXN0ZXIocHJv
cGVydHlSZWdpc3RlcikKLSAgICAgICAgICAgICwgbV9lbnVtZXJhdG9yUmVnaXN0ZXIoZW51bWVy
YXRvclJlZ2lzdGVyKQotICAgICAgICAgICAgLCBtX2Jhc2VWYXJpYWJsZShiYXNlVmFyaWFibGUp
Ci0gICAgICAgIHsKLSAgICAgICAgfQorICAgICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzVmFsaWQ7IH0KKyAgICAgICAgdm9pZCBpbnZhbGlkYXRlKCkgeyBtX2lzVmFsaWQg
PSBmYWxzZTsgfQogCi0gICAgICAgIFJlZ2lzdGVySUQqIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleFJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5KCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVJlZ2lzdGVyLmdldCgpOyB9Ci0gICAgICAgIFJlZ2lz
dGVySUQqIGVudW1lcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX2VudW1lcmF0b3JSZWdpc3Rlci5n
ZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBsb2NhbCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxSZWdpc3Rlci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUoKSBj
b25zdCB7IHJldHVybiBtX3Byb3BlcnR5TmFtZS5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklE
KiBwcm9wZXJ0eU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlPZmZzZXQuZ2V0KCk7
IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fZW51
bWVyYXRvci5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBtb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9tb2RlLmdldCgpOyB9CiAgICAgICAgIGNvbnN0IHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+
JiBiYXNlVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VWYXJpYWJsZTsgfQogCiAgICAg
ICAgIHZvaWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0SW5kZXgsIGludCBwcm9wZXJ0eVJlZ0lu
ZGV4KQpAQCAtMzM4LDM3ICsyODQsMzQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBt
X2hhc093blByb3BlcnR5SnVtcEluc3RzLmFwcGVuZChIYXNPd25Qcm9wZXJ0eUp1bXBJbnN0IHsg
YnJhbmNoSW5zdEluZGV4LCBnZW5lcmljUGF0aFRhcmdldCB9KTsKICAgICAgICAgfQogCisgICAg
ICAgIEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBw
cm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklEKiBlbnVt
ZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBiYXNlVmFy
aWFibGUsIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgOiBt
X2xvY2FsUmVnaXN0ZXIobG9jYWxSZWdpc3RlcikKKyAgICAgICAgICAgICwgbV9wcm9wZXJ0eU5h
bWUocHJvcGVydHlOYW1lKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5T2Zmc2V0KHByb3BlcnR5
T2Zmc2V0KQorICAgICAgICAgICAgLCBtX2VudW1lcmF0b3IoZW51bWVyYXRvcikKKyAgICAgICAg
ICAgICwgbV9tb2RlKG1vZGUpCisgICAgICAgICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJp
YWJsZSkKKyAgICAgICAgICAgICwgbV9ib2R5Qnl0ZWNvZGVTdGFydE9mZnNldChib2R5Qnl0ZWNv
ZGVTdGFydE9mZnNldCkKKyAgICAgICAgeyB9CisKKyAgICAgICAgdW5zaWduZWQgYm9keUJ5dGVj
b2RlU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0
OyB9CisKICAgICAgICAgdm9pZCBmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRvciYsIFVubGlua2Vk
Q29kZUJsb2NrR2VuZXJhdG9yKiwgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KTsKIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX2luZGV4UmVnaXN0ZXI7
Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5UmVnaXN0ZXI7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBtX2VudW1lcmF0b3JSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IG1fbG9jYWxSZWdpc3RlcjsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IG1fcHJvcGVydHlOYW1lOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU9m
ZnNldDsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1fZW51bWVyYXRvcjsKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IG1fbW9kZTsKICAgICAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJs
ZT4gbV9iYXNlVmFyaWFibGU7Ci0gICAgICAgIFZlY3RvcjxHZXRJbnN0PiBtX2dldEluc3RzOwor
ICAgICAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKKyAgICAgICAgdW5zaWduZWQgbV9ib2R5
Qnl0ZWNvZGVTdGFydE9mZnNldDsKICAgICAgICAgVmVjdG9yPEluSW5zdD4gbV9pbkluc3RzOwor
ICAgICAgICBWZWN0b3I8R2V0SW5zdD4gbV9nZXRJbnN0czsKICAgICAgICAgVmVjdG9yPEhhc093
blByb3BlcnR5SnVtcEluc3Q+IG1faGFzT3duUHJvcGVydHlKdW1wSW5zdHM7CiAgICAgfTsKIAot
ICAgIGNsYXNzIEluZGV4ZWRGb3JJbkNvbnRleHQgOiBwdWJsaWMgRm9ySW5Db250ZXh0IHsKLSAg
ICAgICAgdXNpbmcgQmFzZSA9IEZvckluQ29udGV4dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIElu
ZGV4ZWRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCog
aW5kZXhSZWdpc3RlciwgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAg
ICAgICA6IEZvckluQ29udGV4dChsb2NhbFJlZ2lzdGVyLCBUeXBlOjpJbmRleGVkRm9ySW4sIGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2luZGV4UmVnaXN0ZXIoaW5k
ZXhSZWdpc3RlcikKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVnaXN0ZXJJRCog
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7IH0KLQotICAgICAg
ICB2b2lkIGZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5l
cmF0b3IqLCB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgICAgICB2b2lkIGFk
ZEdldEluc3QodW5zaWduZWQgaW5zdEluZGV4LCBpbnQgcHJvcGVydHlJbmRleCkgeyBtX2dldElu
c3RzLmFwcGVuZCh7IGluc3RJbmRleCwgcHJvcGVydHlJbmRleCB9KTsgfQotCi0gICAgcHJpdmF0
ZToKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAg
VmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgaW50Pj4gbV9nZXRJbnN0czsKLSAgICB9OwotCiAg
ICAgc3RydWN0IFRyeURhdGEgewogICAgICAgICBSZWY8TGFiZWw+IHRhcmdldDsKICAgICAgICAg
SGFuZGxlclR5cGUgaGFuZGxlclR5cGU7CkBAIC0zOTksMTEgKzM0MiwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQnl0ZWNvZGVHZW5lcmF0b3IpOwog
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBGaW5hbGx5Q29udGV4dDsKLSAgICAgICAgZnJpZW5kIGNs
YXNzIEluZGV4ZWRGb3JJbkNvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVG
b3JJbkNvbnRleHQ7CisgICAgICAgIGZyaWVuZCBjbGFzcyBGb3JJbkNvbnRleHQ7CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBTdHJpY3RNb2RlU2NvcGU7CiAKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIE9sZE9wVHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgorICAgICAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFtZSBOZXdPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4K
ICAgICAgICAgZnJpZW5kIHZvaWQgcmV3cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVHVwbGVU
eXBlJik7CiAKICAgICBwdWJsaWM6CkBAIC02ODEsNyArNjIzLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdm9pZCBob2lzdFNsb3BweU1vZGVGdW5jdGlvbklmTmVjZXNzYXJ5KGNvbnN0
IElkZW50aWZpZXImIGZ1bmN0aW9uTmFtZSk7CiAKLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250
ZXh0KiBmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5KTsKKyAg
ICAgICAgRm9ySW5Db250ZXh0KiBmaW5kRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5
KTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgZW1pdFR5cGVQcm9maWxlckV4cHJlc3Np
b25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZW5kRGl2b3QpOwpAQCAtOTE3LDcgKzg1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoUmVnaXN0ZXJJRCogY29uZCwgTGFi
ZWwmIHRhcmdldCk7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQXBwbHkoUmVn
aXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCk7CiAgICAgICAgIHVuc2lnbmVkIGVtaXRXaWRl
SnVtcElmTm90RnVuY3Rpb25IYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYg
dGFyZ2V0KTsKLSAgICAgICAgdm9pZCByZWNvcmRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUluRm9y
SW5Mb29wKFN0cnVjdHVyZUZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFi
ZWwmIGdlbmVyaWNQYXRoKTsKKyAgICAgICAgdm9pZCByZWNvcmRIYXNPd25Qcm9wZXJ0eUluRm9y
SW5Mb29wKEZvckluQ29udGV4dCYsIHVuc2lnbmVkIGJyYW5jaE9mZnNldCwgTGFiZWwmIGdlbmVy
aWNQYXRoKTsKIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBCaW5PcCwgdHlwZW5hbWUgSm1w
T3A+CiAgICAgICAgIGJvb2wgZnVzZUNvbXBhcmVBbmRKdW1wKFJlZ2lzdGVySUQqIGNvbmQsIExh
YmVsJiB0YXJnZXQsIGJvb2wgc3dhcE9wZXJhbmRzID0gZmFsc2UpOwpAQCAtOTI4LDE3ICs4NzAs
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0RW50ZXIoKTsKICAgICAgICAg
dm9pZCBlbWl0Q2hlY2tUcmFwcygpOwogCi0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwg
UmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0Vu
dW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJh
c2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7Ci0g
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNFbnVtZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCog
ZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICBSZWdpc3RlcklEKiBlbWl0SGFzT3duU3RydWN0dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQq
IGVudW1lcmF0b3IpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0UHJvcGVydHlFbnVtZXJh
dG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
YmFzZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRHZXRTdHJ1Y3R1cmVQcm9wZXJ0eUVudW1l
cmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBsZW5n
dGgpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0R2V0R2VuZXJpY1Byb3BlcnR5RW51bWVyYXRv
cihSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCwg
UmVnaXN0ZXJJRCogc3RydWN0dXJlRW51bWVyYXRvcik7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwotICAgICAgICBSZWdpc3RlcklE
KiBlbWl0RW51bWVyYXRvckdlbmVyaWNQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgp
OworICAgICAgICB2b2lkIGVtaXRFbnVtZXJhdG9yTmV4dChSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUsIFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBiYXNl
LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogaW5k
ZXgsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJ
c0NlbGxXaXRoVHlwZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYywgSlNUeXBlKTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzR2VuZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0SXNDZWxsV2l0aFR5cGUoZHN0LCBzcmMsIEpTR2Vu
ZXJhdG9yVHlwZSk7IH0KQEAgLTEwNTcsMTAgKzk5MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIHBvcE9wdGlvbmFsQ2hhaW5UYXJnZXQoUmVnaXN0ZXJJRCogZHN0LCBib29sIGlz
RGVsZXRlKTsKICAgICAgICAgdm9pZCBlbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMp
OwogCi0gICAgICAgIHZvaWQgcHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2Fs
LCBSZWdpc3RlcklEKiBpbmRleCk7Ci0gICAgICAgIHZvaWQgcG9wSW5kZXhlZEZvckluU2NvcGUo
UmVnaXN0ZXJJRCogbG9jYWwpOwotICAgICAgICB2b2lkIHB1c2hTdHJ1Y3R1cmVGb3JJblNjb3Bl
KFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVy
dHksIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2Up
OwotICAgICAgICB2b2lkIHBvcFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwp
OworICAgICAgICB2b2lkIHB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsLCBSZWdpc3Rl
cklEKiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0LCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBtb2RlLCBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBi
YXNlKTsKKyAgICAgICAgdm9pZCBwb3BGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsKTsKIAog
ICAgICAgICBMYWJlbFNjb3BlKiBicmVha1RhcmdldChjb25zdCBJZGVudGlmaWVyJik7CiAgICAg
ICAgIExhYmVsU2NvcGUqIGNvbnRpbnVlVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcApp
bmRleCA5YWNhNTE0ZTY1NTNiYWFlNDQ4M2FlNDRjYWI1ZWRjOTY2MWM0ZmY3Li5jMjZjNTQ5MWE3
YmQ2Y2MzNmVjZDZlMjYwYjRiZjU3MzFjYmQzZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCkBAIC0yMTMxLDI0ICsyMTMx
LDI0IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3BlcnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
dEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnCiAgICAgUkVMRUFTRV9BU1NFUlQobV9hcmdz
LT5tX2xpc3ROb2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHByICYmICFtX2FyZ3MtPm1f
bGlzdE5vZGUtPm1fbmV4dCk7ICAKICAgICBFeHByZXNzaW9uTm9kZSogYXJndW1lbnQgPSBtX2Fy
Z3MtPm1fbGlzdE5vZGUtPm1fZXhwcjsKICAgICBSRUxFQVNFX0FTU0VSVChhcmd1bWVudC0+aXNS
ZXNvbHZlTm9kZSgpKTsKLSAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIHN0cnVjdHVyZUNvbnRl
eHQgPSBudWxscHRyOworICAgIEZvckluQ29udGV4dCogY29udGV4dCA9IG51bGxwdHI7CiAgICAg
VmFyaWFibGUgYXJndW1lbnRWYXJpYWJsZSA9IGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2Fz
dDxSZXNvbHZlTm9kZSo+KGFyZ3VtZW50KS0+aWRlbnRpZmllcigpKTsKICAgICBpZiAoYXJndW1l
bnRWYXJpYWJsZS5pc0xvY2FsKCkpIHsKICAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBh
cmd1bWVudFZhcmlhYmxlLmxvY2FsKCk7Ci0gICAgICAgIHN0cnVjdHVyZUNvbnRleHQgPSBnZW5l
cmF0b3IuZmluZFN0cnVjdHVyZUZvckluQ29udGV4dChwcm9wZXJ0eSk7CisgICAgICAgIGNvbnRl
eHQgPSBnZW5lcmF0b3IuZmluZEZvckluQ29udGV4dChwcm9wZXJ0eSk7CiAgICAgfQogCiAgICAg
YXV0byBjYW5Vc2VGYXN0SGFzT3duUHJvcGVydHkgPSBbJl0gewotICAgICAgICBpZiAoIXN0cnVj
dHVyZUNvbnRleHQpCisgICAgICAgIGlmICghY29udGV4dCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKKyAg
ICAgICAgaWYgKCFjb250ZXh0LT5iYXNlVmFyaWFibGUoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgaWYgKG1fYmFzZS0+aXNSZXNvbHZlTm9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFz
ZSktPmlkZW50aWZpZXIoKSkgPT0gc3RydWN0dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFs
dWUoKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IudmFyaWFibGUoc3RhdGljX2Nhc3Q8
UmVzb2x2ZU5vZGUqPihtX2Jhc2UpLT5pZGVudGlmaWVyKCkpID09IGNvbnRleHQtPmJhc2VWYXJp
YWJsZSgpLnZhbHVlKCk7CiAgICAgICAgIGlmIChtX2Jhc2UtPmlzVGhpc05vZGUoKSkgewogICAg
ICAgICAgICAgLy8gQWZ0ZXIgZ2VuZXJhdG9yLmVuc3VyZVRoaXMgKHdoaWNoIG11c3QgYmUgaW52
b2tlZCBpbiB8YmFzZXwncyBtYXRlcmlhbGl6YXRpb24pLCB3ZSBjYW4gZW5zdXJlIHRoYXQgfHRo
aXN8IGlzIGluIGxvY2FsIHRoaXMtcmVnaXN0ZXIuCiAgICAgICAgICAgICBBU1NFUlQoYmFzZSk7
Ci0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9u
VHlwZTo6TG9jYWwpID09IHN0cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7
CisgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0
eU5hbWVzKCkuYnVpbHRpbk5hbWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9u
VHlwZTo6TG9jYWwpID09IGNvbnRleHQtPmJhc2VWYXJpYWJsZSgpLnZhbHVlKCk7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH07CkBAIC0yMTYwLDcgKzIxNjAsNyBAQCBS
ZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29k
ZShCeXRlY29kZUdlbmVyYXRvciYgZwogICAgICAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwogCiAgICAgICAgIHVuc2lnbmVkIGJyYW5jaEluc25PZmZzZXQgPSBnZW5l
cmF0b3IuZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093blByb3BlcnR5KGZ1bmN0aW9uLmdl
dCgpLCByZWFsQ2FsbC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGFzT3duU3RydWN0
dXJlUHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGdlbmVyYXRvci5lbWl0
Tm9kZShhcmd1bWVudCksIHN0cnVjdHVyZUNvbnRleHQtPmVudW1lcmF0b3IoKSk7CisgICAgICAg
IGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KHJldHVyblZhbHVlLmdldCgp
LCBiYXNlLmdldCgpLCBjb250ZXh0LT5tb2RlKCksIGdlbmVyYXRvci5lbWl0Tm9kZShhcmd1bWVu
dCksIGNvbnRleHQtPnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQtPmVudW1lcmF0b3IoKSk7CiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwocmVhbENhbGwuZ2V0KCkpOwpAQCAtMjE3Miw3ICsyMTcyLDcgQEAgUmVnaXN0
ZXJJRCogSGFzT3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0
ZWNvZGVHZW5lcmF0b3ImIGcKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQo
KSk7CiAKLSAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5G
b3JJbkxvb3AoKnN0cnVjdHVyZUNvbnRleHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsK
KyAgICAgICAgZ2VuZXJhdG9yLnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoKmNvbnRl
eHQsIGJyYW5jaEluc25PZmZzZXQsIHJlYWxDYWxsKTsKICAgICB9IGVsc2UgewogICAgICAgICBD
YWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICBn
ZW5lcmF0b3IubW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsK
QEAgLTQxODQsOCArNDE4NCw2IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNv
ZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogICAgIGlmIChnZW5lcmF0
b3Iuc2hvdWxkQmVDb25jZXJuZWRXaXRoQ29tcGxldGlvblZhbHVlKCkgJiYgbV9zdGF0ZW1lbnQt
Pmhhc0Vhcmx5QnJlYWtPckNvbnRpbnVlKCkpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChk
c3QsIGpzVW5kZWZpbmVkKCkpOwogCi0gICAgUmVmPExhYmVsPiBlbmQgPSBnZW5lcmF0b3IubmV3
TGFiZWwoKTsKLQogICAgIFJlZ2lzdGVySUQqIGZvckxvb3BTeW1ib2xUYWJsZSA9IG51bGxwdHI7
CiAgICAgZ2VuZXJhdG9yLnB1c2hMZXhpY2FsU2NvcGUodGhpcywgQnl0ZWNvZGVHZW5lcmF0b3I6
OlNjb3BlVHlwZTo6TGV0Q29uc3RTY29wZSwgQnl0ZWNvZGVHZW5lcmF0b3I6OlREWkNoZWNrT3B0
aW1pemF0aW9uOjpPcHRpbWl6ZSwgQnl0ZWNvZGVHZW5lcmF0b3I6Ok5lc3RlZFNjb3BlVHlwZTo6
SXNOZXN0ZWQsICZmb3JMb29wU3ltYm9sVGFibGUpOwogCkBAIC00MTkzLDEyICs0MTkxLDEwIEBA
IHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgUmVnaXN0ZXJJRCogZHN0KQogICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZ2VuZXJhdG9y
Lmlnbm9yZWRSZXN1bHQoKSwgbV9sZXhwcik7CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFz
ZSA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbGVu
Z3RoOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBlbnVtZXJhdG9yOwogCiAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGJhc2UuZ2V0KCksIG1fZXhwcik7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGxv
Y2FsID0gdGhpcy0+dHJ5R2V0Qm91bmRMb2NhbChnZW5lcmF0b3IpOwotICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBlbnVtZXJhdG9ySW5kZXg7CisKIAogICAgIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+
IGJhc2VWYXJpYWJsZTsKICAgICBpZiAobV9leHByLT5pc1Jlc29sdmVOb2RlKCkpCkBAIC00MjA5
LDEzNyArNDIwNSw0NiBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2Vu
ZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKICAgICAgICAgYmFzZVZhcmlhYmxl
ID0gZ2VuZXJhdG9yLnZhcmlhYmxlKGdlbmVyYXRvci5wcm9wZXJ0eU5hbWVzKCkuYnVpbHRpbk5h
bWVzKCkudGhpc1ByaXZhdGVOYW1lKCksIFRoaXNSZXNvbHV0aW9uVHlwZTo6TG9jYWwpOwogICAg
IH0KIAotICAgIC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2gg
Zm9yLi5pbiBpdGVyYXRpb24uCi0gICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7
Ci0KICAgICBpbnQgcHJvZmlsZXJTdGFydE9mZnNldCA9IG1fc3RhdGVtZW50LT5zdGFydE9mZnNl
dCgpOwogICAgIGludCBwcm9maWxlckVuZE9mZnNldCA9IG1fc3RhdGVtZW50LT5lbmRPZmZzZXQo
KSArIChtX3N0YXRlbWVudC0+aXNCbG9jaygpID8gMSA6IDApOwogCi0gICAgZW51bWVyYXRvciA9
IGdlbmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgYmFzZS5nZXQoKSk7Ci0KLSAgICBCeXRlY29kZUdlbmVyYXRvcjo6UHJlc2VydmVkVERa
U3RhY2sgcHJlc2VydmVkVERaU3RhY2s7Ci0gICAgZ2VuZXJhdG9yLnByZXNlcnZlVERaU3RhY2so
cHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gSW5kZXhlZCBwcm9wZXJ0eSBsb29wLgogICAg
IHsKLSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNjb3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2Nv
cGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2Vu
ZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRv
ci5uZXdMYWJlbCgpOwotCi0gICAgICAgIGxlbmd0aCA9IGdlbmVyYXRvci5lbWl0R2V0RW51bWVy
YWJsZUxlbmd0aChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGVudW1lcmF0b3IuZ2V0KCkpOwot
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaSA9IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDApKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGVudW1lcmF0b3IgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBtb2RlID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5pdE1vZGUpKSk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpbmRleCA9
IGdlbmVyYXRvci5lbWl0TG9hZChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGpzTnVtYmVyKDAp
KTsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BTdGFydC5n
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsKLQotICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gZ2VuZXJhdG9yLmVtaXRCaW5hcnlPcDxPcExlc3M+KGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaS5nZXQoKSwgbGVuZ3RoLmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkocmVzdWx0
LmdldCgpLCBiYXNlLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1w
SWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0KLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRUb0luZGV4U3RyaW5nKHByb3BlcnR5TmFtZS5nZXQoKSwgaS5nZXQo
KSk7Ci0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1l
LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9m
aWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IucHVzaEluZGV4ZWRGb3JJblNj
b3BlKGxvY2FsLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGRz
dCwgbV9zdGF0ZW1lbnQpOwotICAgICAgICBnZW5lcmF0b3IucG9wSW5kZXhlZEZvckluU2NvcGUo
bG9jYWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93
KHByb2ZpbGVyRW5kT2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoaS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNzaWdubWVudCBleHByZXNzaW9u
IGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAo
bG9vcFN0YXJ0LmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7Ci0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAgIGdl
bmVyYXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8gU3Ry
dWN0dXJlIHByb3BlcnR5IGxvb3AuCi0gICAgewogICAgICAgICBSZWY8TGFiZWxTY29wZT4gc2Nv
cGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsKLSAgICAgICAg
UmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAgICAgICAgUmVm
PExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKLSAgICAgICAgZW51bWVy
YXRvckluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
anNOdW1iZXIoMCkpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0
b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFi
ZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwot
Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAg
IGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eShyZXN1
bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5nZXQo
KSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2Nv
cGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotCi0gICAgICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdl
bmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFBy
b2ZpbGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0T2Zmc2V0KTsKLQotICAgICAgICBnZW5lcmF0
b3IucHVzaFN0cnVjdHVyZUZvckluU2NvcGUobG9jYWwuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5n
ZXQoKSwgcHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBiYXNlVmFyaWFibGUp
OwotICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAgICAg
IGdlbmVyYXRvci5wb3BTdHJ1Y3R1cmVGb3JJblNjb3BlKGxvY2FsLmdldCgpKTsKLQotICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlckVuZE9mZnNldCk7Cisg
ICAgICAgIGVudW1lcmF0b3IgPSBnZW5lcmF0b3IuZW1pdEdldFByb3BlcnR5RW51bWVyYXRvcihn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIGJhc2UuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3Iu
bW92ZUxpbmtUaW1lQ29uc3RhbnQocHJvcGVydHlOYW1lLmdldCgpLCBMaW5rVGltZUNvbnN0YW50
OjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEVx
dWFsaXR5T3A8T3BTdHJpY3RlcT4ocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgp
LCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUo
cHJvcGVydHlOYW1lLmdldCgpLCBzY29wZS0+YnJlYWtUYXJnZXQoKSk7CiAKICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbCgqc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdExvb3BIaW50KCk7CiAgICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNhbFNj
b3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAg
Z2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlOYW1lKHByb3BlcnR5TmFt
ZS5nZXQoKSwgZW51bWVyYXRvci5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3Np
Z25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcChlbmQuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGxvb3BF
bmQuZ2V0KCkpOwotICAgIH0KLSAgICBnZW5lcmF0b3IucmVzdG9yZVREWlN0YWNrKHByZXNlcnZl
ZFREWlN0YWNrKTsKLQotICAgIC8vIEdlbmVyaWMgcHJvcGVydHkgbG9vcC4KLSAgICB7Ci0gICAg
ICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJlbFNjb3BlKExhYmVs
U2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9IGdlbmVyYXRvci5u
ZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5lcmF0b3IubmV3TGFi
ZWwoKTsKLQotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJh
dG9yLm5ld1RlbXBvcmFyeSgpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvckdl
bmVyaWNQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpLCBl
bnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9v
cFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb29wSGludCgpOwotCi0gICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IuZW1pdElzTnVsbChnZW5l
cmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVy
YXRvci5lbWl0SnVtcElmVHJ1ZShyZXN1bHQuZ2V0KCksIGxvb3BFbmQuZ2V0KCkpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYSB3YXkgdG8gc2VlIGlmIGFueW9uZSBpcyBhY3R1
YWxseSB1c2luZyB0aGUgcHJvcGVydHlOYW1lIGZvciBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGdl
dF9ieV92YWwuIElmIG5vdCwgd2UgY291bGQgZWxpbWluYXRlIHRoZSB0b1N0cmluZyBpbiB0aGlz
IG9wY29kZS4KKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yTmV4dChwcm9wZXJ0eU5h
bWUuZ2V0KCksIG1vZGUuZ2V0KCksIGluZGV4LmdldCgpLCBiYXNlLmdldCgpLCBlbnVtZXJhdG9y
LmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdEhhc0VudW1lcmFibGVQcm9wZXJ0eShy
ZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7Ci0gICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmRmFsc2UocmVzdWx0LmdldCgpLCAqc2NvcGUtPmNvbnRpbnVlVGFy
Z2V0KCkpOworICAgICAgICAvLyBOb3RlLCBjaG9vc2luZyB1bmRlZmluZWQgb3IgbnVsbCBoZWxw
cyBwbGVhc2UgREZHJ3MgQWJzdHJhY3QgSW50ZXJwcmV0ZXIgYXMgaXQgZG9lc24ndCBkaXN0aW5n
dWlzaCBudWxsIGFuZCB1bmRlZmluZWQgYXMgdHlwZXMgKHZpYSBTcGVjT3RoZXIpLgorICAgICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXBJZlRydWUoZ2VuZXJhdG9yLmVtaXRJc1VuZGVmaW5lZE9yTnVs
bChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZS5nZXQoKSksIHNjb3BlLT5i
cmVha1RhcmdldCgpKTsKIAogICAgICAgICB0aGlzLT5lbWl0TG9vcEhlYWRlcihnZW5lcmF0b3Is
IHByb3BlcnR5TmFtZS5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29u
dHJvbEZsb3cocHJvZmlsZXJTdGFydE9mZnNldCk7CiAKKyAgICAgICAgZ2VuZXJhdG9yLnB1c2hG
b3JJblNjb3BlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0KCksIGluZGV4LmdldCgpLCBl
bnVtZXJhdG9yLmdldCgpLCBtb2RlLmdldCgpLCBiYXNlVmFyaWFibGUpOwogICAgICAgICBnZW5l
cmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7CisgICAgICAgIGdlbmVyYXRvci5wb3BG
b3JJblNjb3BlKGxvY2FsLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpz
Y29wZS0+Y29udGludWVUYXJnZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5wcmVwYXJlTGV4aWNh
bFNjb3BlRm9yTmV4dEZvckxvb3BJdGVyYXRpb24odGhpcywgZm9yTG9vcFN5bWJvbFRhYmxlKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRJbmMoZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9wZXJ0eU5h
bWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7Ci0gICAg
ICAgIGdlbmVyYXRvci5lbWl0RGVidWdIb29rKG1fbGV4cHIpOyAvLyBQYXVzZSBhdCB0aGUgYXNz
aWdubWVudCBleHByZXNzaW9uIGZvciBlYWNoIGZvci4uaW4gaXRlcmF0aW9uLgotICAgICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOworICAgICAgICBnZW5lcmF0
b3IuZW1pdEp1bXAoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0
b3IuZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wKGVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5n
ZXQoKSk7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwogICAg
IGdlbmVyYXRvci5wb3BMZXhpY2FsU2NvcGUodGhpcyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQcm9m
aWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCmlu
ZGV4IDRiNWYwZDYyMDA5ZWU2OTBiZGRmNDMzMDEwMjI4YWQwYTRhZTQ2NzUuLjJjZWFkOTBlZmI1
NzRjODlmOWMwMmM0Y2Y5NjJmYzQ1NjkyMzE0OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKQEAgLTIx
NTEsNyArMjE1MSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgU3RyaW5n
Q2hhckF0OgogICAgICAgICBzZXRGb3JOb2RlKG5vZGUsIG1fdm0uc3RyaW5nU3RydWN0dXJlLmdl
dCgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKKworICAgIGNhc2UgRW51bWVyYXRv
ckdldEJ5VmFsOiB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhYmxlIHRvIGRv
IGNvZGUgbW90aW9uIGZvciBPd25TdHJ1Y3R1cmVNb2RlIGJ1dCB3ZSdkIG5lZWQgdG8gdGVhY2gg
QUkgYWJvdXQgdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgc3RydWN0dXJlIGZvciB0aGF0IHRvIGJl
IHByb2ZpdGFibGUuCisgICAgICAgIGNsb2JiZXJXb3JsZCgpOworICAgICAgICBtYWtlSGVhcFRv
cEZvck5vZGUobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgR2V0QnlW
YWw6CiAgICAgY2FzZSBBdG9taWNzQWRkOgogICAgIGNhc2UgQXRvbWljc0FuZDoKQEAgLTIxNjQs
MTAgKzIxNzEsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgIGNhc2UgQXRvbWljc1hv
cjogewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRCeVZhbCkgewogICAgICAgICAgICAg
YXV0byBmb2xkR2V0QnlWYWxPbkNvbnN0YW50UHJvcGVydHkgPSBbJl0gKEVkZ2UmIGFycmF5RWRn
ZSwgRWRnZSYgaW5kZXhFZGdlKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBl
eHBhbmQgdGhpcyBmb3Igbm9uIHg4NiBlbnZpcm9ubWVudHMuCi0gICAgICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQotICAgICAgICAg
ICAgICAgIGlmICghaXNYODYoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYXJyYXlWYWx1ZSA9IGZvck5vZGUoYXJy
YXlFZGdlKTsKIApAQCAtNDI0NCwyNSArNDI0Nyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1p
CiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgICAgIAotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxl
bmd0aDogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0ludDMyT25s
eSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0
eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwot
ICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2Ug
SW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5Ogot
ICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIHNldE5v
bkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7Ci0gICAgICAgIGNsb2JiZXJXb3Js
ZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6
Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CisKKyAgICBjYXNlIEhh
c0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5
TW9kZSgpOwogICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJy
YXk6OkludDMyOgpAQCAtNDI4MSwyNiArNDI2Nyw1MyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGlt
aQogICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3BlY0Jvb2xlYW4pOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBj
bG9iYmVyV29ybGQoKTsKLSAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2RlKG5vZGUpOwotICAgICAg
ICBicmVhazsKLSAgICB9CisKICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjogewogICAg
ICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQ2VsbCk7CiAgICAgICAgIGNsb2JiZXJXb3Js
ZCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0
dXJlUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyB8IFNw
ZWNPdGhlcik7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAg
ICAgaWYgKGFycmF5TW9kZS5pc1NhbmVDaGFpbigpKQorICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhl
ZE1vZGUpOworICAgICAgICBlbHNlIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSAhPSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgfHwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKKyAgICAgICAgICAgIGNsb2Ji
ZXJXb3JsZCgpOworCisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQnl0
ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7
CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihzdGF0aWNfY2FzdDx1aW50
OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmVudW1l
cmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSAmJiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgMCkudXNl
S2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzTnVt
YmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3Ry
dWN0dXJlTW9kZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
RkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6
IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNJbnQzMk9ubHkpOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
OiB7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CiAgICAg
ICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgIHNldFR5
cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOworCisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZh
bDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTogeworICAgICAgICAvLyBGSVhN
RTogV2UgY2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBi
YXNlZCBvbiBhYnN0cmFjdAorICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KKyAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmgKaW5kZXggMTExMWY4OWY5ZDdiNWI5Nzc3OGMxNmM4ZDU0NjQwYmVh
Mzc0NDJiMi4uYTAyNmFhZDE4OTNiZjIzYzU3MTk2ZmNjNmM5MWZjMjAwMDNjNDU2NyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCkBAIC0yODksNiArMjg5LDExIEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91
bmRzU2FuZUNoYWluOwogICAgIH0KIAorICAgIGJvb2wgaXNTYW5lQ2hhaW4oKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSB8fCBpc091dE9mQm91bmRz
U2FuZUNoYWluKCk7CisgICAgfQorCiAgICAgYm9vbCBpc091dE9mQm91bmRzKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyB8
fCBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCmluZGV4IGRiMzdmNGRkZGJmODBjZDY2ZWI1Nzg3ZDdiYWEyYmY1M2FmODkwNzYu
LjlkYmQwYjQ3ZDlkZmY0Y2Y2MDM4YWY1MDAxNzkzNDhiZTBhZWEyOTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcApAQCAtMzkwLDcgKzM5MCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBub2RlLT5j
aGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyAmIH5Ob2RlQnl0ZWNvZGVOZWVkc05lZ1plcm8pOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCisgICAgICAgIGNh
c2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAg
ICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZsYWdzKE5vZGVCeXRlY29k
ZVVzZXNBc1ZhbHVlKTsKICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkt
Pm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNlc0FzTnVtYmVyIHwgTm9kZUJ5dGVjb2RlVXNlc0Fz
T3RoZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNJbnQgfCBOb2RlQnl0ZWNvZGVVc2VzQXNBcnJheUlu
ZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKaW5kZXggYTI5NmM0Yjg3Yzg1ODg2NGZiZGVkZDc0ZWY3MjdlNTRkOTVmZDY5NC4uZjc2ODhl
ZDE0Mjg3ZGU1NDRiMGM4ODdmZmM4MmUxNmU2OTM0ZmVjZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTgzODcsMTAzICs4Mzg3LDEz
NiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3ByaXZhdGVfYnJhbmQpOwogICAgICAgICB9CiAK
LSAgICAgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKLSAgICAgICAgICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0
aD4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChHZXRFbnVt
ZXJhYmxlTGVuZ3RoLCBnZXQoYnl0ZWNvZGUubV9iYXNlKSkpOwotICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1
Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9H
cmFwaChIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksCi0gICAgICAgICAgICAgICAgZ2V0
KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJvcGVy
dHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0gICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkp
OworICAgICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7CisgICAgICAgICAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3BlcnR5RW51
bWVyYXRvcj4oKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChH
ZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7CisgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7CiAgICAgICAgIH0KIAot
ICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVQcm9w
ZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNF
bnVtZXJhYmxlUHJvcGVydHksIGdldChieXRlY29kZS5tX2Jhc2UpLCBnZXQoYnl0ZWNvZGUubV9w
cm9wZXJ0eSkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX3By
b3BlcnR5KTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VudW1lcmF0b3JfbmV4dDogewor
ICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVt
ZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0
YWRhdGEoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRB
cnJheU1vZGUobWV0YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKyAgICAgICAg
ICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAgICAgICAgICAgIE5vZGUq
IGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogZW51bWVy
YXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOworICAgICAgICAgICAgTm9kZSogbW9k
ZSA9IGdldChieXRlY29kZS5tX21vZGUpOwogCi0gICAgICAgIGNhc2Ugb3BfaGFzX293bl9zdHJ1
Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzT3duU3RydWN0dXJlUHJvcGVydHksCi0g
ICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0
KGJ5dGVjb2RlLm1fcHJvcGVydHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2Vu
dW1lcmF0b3IpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfb3duX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gbWV0
YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGE7CiAKLSAgICAgICAgY2FzZSBvcF9pbl9zdHJ1Y3R1
cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRl
Y29kZS5tX2RzdCwgYWRkVG9HcmFwaChJblN0cnVjdHVyZVByb3BlcnR5LAotICAgICAgICAgICAg
ICAgIGdldChieXRlY29kZS5tX2Jhc2UpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5t
X3Byb3BlcnR5KSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSkp
OwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTsKLSAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMpCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChGb3JjZU9TUkV4aXQpOwogCi0gICAgICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eTogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgICAg
ICAgICAgTm9kZSogYmFzZSA9IGdldChieXRlY29kZS5tX2Jhc2UpOwotICAgICAgICAgICAgQXJy
YXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShieXRlY29kZS5tZXRhZGF0YShjb2RlQmxv
Y2spLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7Ci0gICAgICAgICAgICBOb2RlKiBwcm9w
ZXJ0eSA9IGdldChieXRlY29kZS5tX3Byb3BlcnR5KTsKICAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOwotICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7Ci0gICAgICAgICAgICBOb2RlKiBoYXNJdGVy
YWJsZVByb3BlcnR5ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHksIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpKTsKLSAgICAgICAgICAgIG1f
ZXhpdE9LID0gZmFsc2U7IC8vIEhhc0luZGV4ZWRQcm9wZXJ0eSBtdXN0IGJlIHRyZWF0ZWQgYXMg
aWYgaXQgY2xvYmJlcnMgZXhpdCBzdGF0ZSwgc2luY2UgRml4dXBQaGFzZSBtYXkgbWFrZSBpdCBn
ZW5lcmljLgotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBoYXNJdGVyYWJsZVByb3Bl
cnR5KTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRf
cHJvcGVydHkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQobW9kZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVt
ZXJhdG9yKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBzdG9yYWdl
IGZvciBJbmRleGVkTW9kZSBvbmx5LgorICAgICAgICAgICAgTm9kZSogdXBkYXRlZEluZGV4QW5k
TW9kZSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZSwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzZWVuTW9kZXMpKTsK
KworICAgICAgICAgICAgTm9kZSogdXBkYXRlZE1vZGUgPSBhZGRUb0dyYXBoKEVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGUsIHVwZGF0ZWRJbmRleEFuZE1vZGUpOworICAgICAgICAgICAgc2V0KGJ5
dGVjb2RlLm1fbW9kZSwgdXBkYXRlZE1vZGUpOworCisgICAgICAgICAgICBOb2RlKiB1cGRhdGVk
SW5kZXggPSBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCB1cGRhdGVkSW5k
ZXhBbmRNb2RlKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2luZGV4LCB1cGRhdGVkSW5k
ZXgpOworCisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUsIGFkZFRvR3Jh
cGgoRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIE9wSW5mbygpLCBPcEluZm8oc2Vl
bk1vZGVzKSwgdXBkYXRlZEluZGV4LCB1cGRhdGVkTW9kZSwgZW51bWVyYXRvcikpOworCisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX25leHQpOwogICAgICAgICB9CiAKLSAg
ICAgICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NS
RXhpdCgpOwotICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlf
dmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JHZXRCeVZhbD4oKTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFk
KTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uID0gZ2V0UHJlZGljdGlv
bldpdGhvdXRPU1JFeGl0KCk7CisKICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNv
ZGUubV9iYXNlKTsKLSAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KGJ5dGVjb2RlLm1f
cHJvcGVydHkpOworICAgICAgICAgICAgTm9kZSogcHJvcGVydHlOYW1lID0gZ2V0KGJ5dGVjb2Rl
Lm1fcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2Rl
Lm1faW5kZXgpOworICAgICAgICAgICAgTm9kZSogbW9kZSA9IGdldChieXRlY29kZS5tX21vZGUp
OwogICAgICAgICAgICAgTm9kZSogZW51bWVyYXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0
b3IpOwogCisgICAgICAgICAgICBhdXRvIHNlZW5Nb2RlcyA9IE9wdGlvblNldDxKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6Ok1vZGU+Ojpmcm9tUmF3KG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFk
YXRhKTsKKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoRm9yY2VPU1JFeGl0KTsKKworICAgICAgICAgICAgaWYgKHNlZW5Nb2RlcyA9PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogYmFkTW9kZSA9IGFkZFRvR3JhcGgoQXJpdGhCaXRBbmQsIG1vZGUsIGpzQ29uc3RhbnQoanNO
dW1iZXIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKKworICAgICAgICAgICAgICAgIC8v
IFdlIGtub3cgdGhlIEFyaXRoQml0QW5kIGNhbm5vdCBoYXZlIGVmZmVjdHMgc28gaXQncyBvayB0
byBleGl0IGhlcmUuCisgICAgICAgICAgICAgICAgbV9leGl0T0sgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Q2hlY2tJc0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmcoanNOdW1iZXIoMCkp
KSwgYmFkTW9kZSk7CisKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAg
ICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7IC8vIFVzZSBpbmRleCBzbyB3ZSds
bCB1c2UgdGhlIG5vcm1hbCBpbmRleGVkIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQobnVsbHB0cik7IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNo
IEdldEJ5VmFsLgorICAgICAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFw
aChOb2RlOjpWYXJBcmcsIEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJ
bmZvKHNwZWN1bGF0aW9uKSkpOworCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9t
LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZW51
bWVyYXRvcik7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IENoZWNraW5n
IGZvciBhIEJhZENvbnN0YW50VmFsdWUgY2F1c2VzIHVzIHRvIGFsd2F5cyB1c2UgdGhlIEdlbmVy
aWMgdmFyaWFudCBpZiB3ZSBzd2l0Y2hlZCBmcm9tIEluZGV4ZWRNb2RlIC0+IEluZGV4ZWRNb2Rl
ICsgT3duU3RydWN0dXJlTW9kZSBldmVuIHRob3VnaCB0aGF0IG1pZ2h0IGJlIGZpbmUuCisgICAg
ICAgICAgICBpZiAoIXNlZW5Nb2Rlcy5jb250YWluc0FueSh7IEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6R2VuZXJpY01vZGUsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0
cnVjdHVyZU1vZGVTdHJ1Y3R1cmVNaXNtYXRjaCB9KQorICAgICAgICAgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRDb25zdGFudFZhbHVlKSkgeworICAgICAgICAgICAgICAgIE5vZGUqIG1vZGVUZXN0ID0gYWRk
VG9HcmFwaChTYW1lVmFsdWUsIG1vZGUsIGpzQ29uc3RhbnQoanNOdW1iZXIoc3RhdGljX2Nhc3Q8
dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpKSk7CisgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lzQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhqc0Jvb2xlYW4oZmFsc2UpKSksIG1vZGVUZXN0KTsKKworICAgICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KGluZGV4KTsgLy8gVXNlIGluZGV4IHNvIHdlJ2xsIHVzZSB0aGUgbm9ybWFsIGluZGV4ZWQgb3B0
aW1pemF0aW9ucy4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsgLy8g
Rm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCisgICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1v
ZGUpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOworICAgICAg
ICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVu
dW1lcmF0b3JHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhzcGVj
dWxhdGlvbikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgcHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNl
KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKKyAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChu
dWxscHRyKTsgLy8gRm9yIHByb3BlcnR5IHN0b3JhZ2UgdG8gbWF0Y2ggR2V0QnlWYWwuCiAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChpbmRleCk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChtb2RlKTsKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGVudW1lcmF0b3IpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgR2V0RGly
ZWN0UG5hbWUsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CisgICAgICAgICAgICBz
ZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBFbnVtZXJhdG9yR2V0
QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc3BlY3VsYXRpb24pKSk7
CiAKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2dldF9kaXJlY3RfcG5hbWUpOworICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGNhc2Ugb3BfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3I6IHsKLSAgICAgICAgICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvcGVydHlFbnVt
ZXJhdG9yPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdl
dFByb3BlcnR5RW51bWVyYXRvciwgZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpKTsKLSAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKTsKLSAgICAgICAgfQorICAg
ICAgICBjYXNlIG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsOiB7CisgICAgICAgICAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JJbkJ5VmFsPigpOwor
ICAgICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2sp
OworICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShtZXRhZGF0
YS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogCi0gICAgICAgIGNhc2Ugb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWU6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAgICAg
ICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKEdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSwKLSAgICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSwKLSAg
ICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKTsKLSAgICAgICAgfQorICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KGJ5dGVjb2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVj
b2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckluQnlWYWwsIE9w
SW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8obWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0
YWRhdGEpKSk7CiAKLSAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6IHsK
LSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51
bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLAotICAgICAgICAgICAgICAgIGdl
dChieXRlY29kZS5tX2VudW1lcmF0b3IpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5t
X2luZGV4KSkpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9nZW5lcmlj
X3BuYW1lKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfaW5fYnlfdmFs
KTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdG9faW5kZXhfc3Ry
aW5nOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFk
ZFRvR3JhcGgoVG9JbmRleFN0cmluZywgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAg
ICAgICBORVhUX09QQ09ERShvcF90b19pbmRleF9zdHJpbmcpOworCisgICAgICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4oKTsK
KyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2Nr
KTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRh
dGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKKworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KGJ5dGVjb2RlLm1fYmFzZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKSk7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoYnl0ZWNvZGUubV9pbmRleCkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0
KGJ5dGVjb2RlLm1fbW9kZSkpOworICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVj
b2RlLm1fZW51bWVyYXRvcikpOworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvckhhc093blByb3BlcnR5LCBPcEluZm8oYXJy
YXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSkp
OworCisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVy
dHkpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9nZXRfaW50ZXJuYWxfZmllbGQ6IHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKaW5kZXggY2MwZDAxNGRh
MjkzMWZmM2VjZGNlOTQyOWNjMjYyNTYxZTJmN2Y3Ni4uMDZkMTlkMTczOTczMDNmNzQxYmU2YjAy
YmYwMTA1N2Y3MjI1NjQ4MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDRkFQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZGF0YUxvZygi
ICAgRm91bmQgbXVzdC1oYW5kbGUgYmxvY2s6ICIsICpibG9jaywgIlxuIik7CiAgICAgICAgIAog
ICAgICAgICAvLyBUaGlzIG1lcmdlcyBzbmFwc2hvdCBvZiBzdGFjayB2YWx1ZXMgd2hpbGUgQ0ZB
IHBoYXNlIHdhbnQgdG8gaGF2ZSBwcm92ZW4gdHlwZXMgYW5kIHZhbHVlcy4gVGhpcyBpcyBzb21l
d2hhdCB0cmlja3kuCi0gICAgICAgIC8vIEJ1dCB0aGlzIGlzIE9LIGFzIGxvbmcgYXMgREZHIE9T
UiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpwcm92ZW4qIEFic3RyYWNWYWx1ZSB2
YWx1ZXMuIEFuZCBpdCB0dXJucyBvdXQgdGhhdCB0aGlzCisgICAgICAgIC8vIEJ1dCB0aGlzIGlz
IE9LIGFzIGxvbmcgYXMgREZHIE9TUiBlbnRyeSB2YWxpZGF0ZXMgdGhlIGlucHV0cyB3aXRoICpw
cm92ZW4qIEFic3RyYWN0VmFsdWUgdmFsdWVzLiBBbmQgaXQgdHVybnMgb3V0IHRoYXQgdGhpcwog
ICAgICAgICAvLyB0eXBlIHdpZGVuaW5nIGlzIGNyaXRpY2FsIHRvIG5hdmllci1zdG9rZXMuIFdp
dGhvdXQgaXQsIG5hdmllci1zdG9rZXMgaGFzIG1vcmUgc3RyaWN0IGNvbnN0cmFpbnQgb24gT1NS
IGVudHJ5IGFuZAogICAgICAgICAvLyBmYWlscyBPU1IgZW50cnkgcmVwZWF0ZWRseS4KICAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHAKaW5kZXggYzcxNjRiMzBmNDY0ZWIwZDQzODJlMmNjYTQyZDU2OTk2
NGQxYmY2Ny4uYWM3ODJkOTliNDUzYzUwODI2MWE3ZjNhODc5NTU4ODAwZDAwNWY3NSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApAQCAtMjU0LDE3
ICsyNTQsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlEIG9wY29k
ZUlELCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgY29uc3QgSQogICAgIGNhc2Ugb3BfaGFzX3ByaXZh
dGVfYnJhbmQ6CiAgICAgY2FzZSBvcF9nZXRfc2NvcGU6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZToKLSAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xlbmd0aDoKLSAgICBjYXNlIG9wX2hh
c19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVyYWJs
ZV9zdHJ1Y3R1cmVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0
eToKLSAgICBjYXNlIG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKICAg
ICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOgotICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9zdHJ1Y3R1cmVfcG5hbWU6Ci0gICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWU6
Ci0gICAgY2FzZSBvcF90b19pbmRleF9zdHJpbmc6CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoKICAg
ICBjYXNlIG9wX25ld19mdW5jX2V4cDoKICAgICBjYXNlIG9wX25ld19nZW5lcmF0b3JfZnVuYzoK
QEAgLTI5OSw2ICsyODksMTAgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNv
ZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9w
X3NldF9wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3BfY2hlY2tfcHJpdmF0ZV9icmFuZDoKICAg
ICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX25leHQ6Cisg
ICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9y
X2luX2J5X3ZhbDoKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eToKICAg
ICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX2NhbGxfZXZh
bDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggOWQxMDA0
ZmU1M2YzZDQ0N2RmMTAzZmFjYTBkMmUxMGVjNGZmNWY0Ni4uNmNjZGEzYjllMGY4N2ZkOTI1YWMw
ZGVkODI3ZGFkMWE0NGY2MmI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAg
ICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICBjYXNlIENoZWNrQXJyYXlPckVtcHR5Ogog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRl
eEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNl
IEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0
eToKICAgICAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgogICAgICAgICBjYXNlIEdldFZlY3Rvckxlbmd0aDoKQEAgLTE2NCw3
ICsxNjgsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25z
dCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICBjYXNlIEFycmF5UG9w
OgogICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJv
cGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAg
ICAgY2FzZSBBdG9taWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNh
c2UgQXRvbWljc0NvbXBhcmVFeGNoYW5nZToKQEAgLTMzNywyMSArMzQwLDgwIEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFk
LCBjb25zdCBXcml0ZUZ1CiAgICAgICAgIHdyaXRlKE1hdGhEb3RSYW5kb21TdGF0ZSk7CiAgICAg
ICAgIHJldHVybjsKIAotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBy
ZWFkKEhlYXApOwotICAgICAgICB3cml0ZShTaWRlU3RhdGUpOworICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgZGVm
KFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBjYXNlIFRv
SW5kZXhTdHJpbmc6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAg
Y2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgIGRlZihQdXJlVmFsdWUo
bm9kZSkpOworICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6IHsKKyAg
ICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBpZiAobm9kZS0+ZW51bWVy
YXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlICYmIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7
CisgICAgICAgICAgICByZWFkKE5hbWVkUHJvcGVydGllcyk7CisgICAgICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgIT0gSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAgICAgY2xvYmJlclRvcCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2Rl
LT5hcnJheU1vZGUoKTsKKyAgICAgICAgc3dpdGNoIChtb2RlLnR5cGUoKSkgeworICAgICAgICBj
YXNlIEFycmF5OjpGb3JjZUV4aXQ6IHsKKyAgICAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6
IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNoYWluKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEludDMyUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihI
YXNJbmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRJbnQzMlByb3BlcnRpZXMsIGdyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAg
ICAgICAgICAgaWYgKG1vZGUuaXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQo
QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkRG91
YmxlUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJbmRl
eGVkUHJvcGVydHlMb2MsIEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSwgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7CisgICAg
ICAgICAgICBpZiAobW9kZS5pc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChC
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihIYXNJ
bmRleGVkUHJvcGVydHlMb2MsIEluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywgZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUo
bm9kZSkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgICAg
ICByZWFkKEJ1dHRlcmZseV92ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgICAgIHJlYWQoSW5k
ZXhlZEFycmF5U3RvcmFnZVByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2xvYmJlclRv
cCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CisgICAgY2FzZSBI
YXNJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgcmVhZChKU09iamVjdF9idXR0ZXJmbHkpOwog
ICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICBzd2l0
Y2ggKG1vZGUudHlwZSgpKSB7CkBAIC03MDUsNiArNzY3LDggQEAgdm9pZCBjbG9iYmVyaXplKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdy
aXRlRnUKICAgICBjYXNlIFRvUHJpbWl0aXZlOgogICAgIGNhc2UgVG9Qcm9wZXJ0eUtleToKICAg
ICBjYXNlIEluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBjYXNlIEluQnlJZDoKICAgICBjYXNlIEhhc1By
aXZhdGVOYW1lOgogICAgIGNhc2UgSGFzUHJpdmF0ZUJyYW5kOgpAQCAtNzE2LDEyICs3ODAsNyBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgUmVzb2x2ZVNjb3BlRm9ySG9pc3Rp
bmdGdW5jRGVjbEluRXZhbDoKICAgICBjYXNlIFJlc29sdmVTY29wZToKICAgICBjYXNlIFRvT2Jq
ZWN0OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OgotICAgIGNhc2Ug
SGFzRW51bWVyYWJsZVByb3BlcnR5OgotICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6
Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5OgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVt
ZXJhdG9yOgotICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3Vz
dG9tOgogICAgIGNhc2UgVG9OdW1iZXI6CiAgICAgY2FzZSBUb051bWVyaWM6CkBAIC05MDYsNiAr
OTY1LDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0
IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgICAgICAgICB3cml0ZShBYnN0
cmFjdEhlYXAoU3RhY2ssIGRhdGEtPnN0YXJ0ICsgc3RhdGljX2Nhc3Q8aW50PihpKSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAg
ICAgICAgY2xvYmJlclRvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlN
b2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKaW5kZXggNTNhYmZl
YTkxZGYyMjRiZDQ4MjU1MGRiZTU3ODJkNTljYWRkOThiNS4uNjBmYmIxNWM1OTE2Yjg5ZGI0YzZk
NTUxNTBjNjY1M2MzN2UxOGYxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcApAQCAtMjA1LDcgKzIwNSw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAg
IGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBHZXRFbnVtZXJhYmxlTGVu
Z3RoOgogICAgIGNhc2UgRmlhdEludDUyOgogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAg
IGNhc2UgQ2hlY2tCYWRWYWx1ZToKQEAgLTI5NywxNiArMjk2LDEwIEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAgICBjYXNl
IEdldEJ5SWRXaXRoVGhpczoKICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6Ci0gICAgY2FzZSBH
ZXREaXJlY3RQbmFtZToKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBHZXRNYXBC
dWNrZXQ6CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJh
YmxlSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVByb3BlcnR5OgogICAgIGNhc2UgSGFzT3duUHJv
cGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3Ry
dWN0dXJlUHJvcGVydHk6CiAgICAgY2FzZSBJbkJ5SWQ6CiAgICAgY2FzZSBJbkJ5VmFsOgogICAg
IGNhc2UgSGFzUHJpdmF0ZU5hbWU6CkBAIC0zOTIsOSArMzg1LDEwIEBAIGJvb2wgZG9lc0dDKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CiAgICAgY2Fz
ZSBUaHJvd1N0YXRpY0Vycm9yOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAg
IGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRv
ckdlbmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJh
dG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvck5l
eHRVcGRhdGVJbmRleEFuZE1vZGU6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKICAg
ICBjYXNlIE1hdGVyaWFsaXplTmV3SW50ZXJuYWxGaWVsZE9iamVjdDoKICAgICBjYXNlIE1hdGVy
aWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTUwNCwxMCArNDk4LDE1IEBAIGJvb2wgZG9lc0dD
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIAogICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5
U3RvcmFnZToKICAgICBjYXNlIEdldEJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgogICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpTdHJpbmcp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXg6CisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGNhc2UgUHV0QnlWYWxE
aXJlY3Q6CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA0NzIwMmQ2ZGJh
ZDkxYzc2ZjU5NzhkYTI4Y2ExYzQ5NzcxNTVhODE5Li5kNTFkOTNmZWE0ZGIzYmU5YWJlOWQ5YjEx
NDY4ZjYwOWMwNWQwNDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKQEAgLTEwMjQsNiArMTAyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDogeworICAg
ICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDMpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCA0KSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCA1KSk7CisgICAgICAgICAgICBGQUxMVEhST1VHSDsKKyAgICAg
ICAgfQorCiAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgIGlmICghbm9kZS0+
cHJlZGljdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKQEAgLTEwNjIsNiArMTA2OSwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjExNzIKICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRBcnJheU1vZGUoQXJyYXlNb2RlKEFycmF5OjpHZW5lcmljLCBub2RlLT5h
cnJheU1vZGUoKS5hY3Rpb24oKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogeworICAgICAgICAgICAgICAgIC8vIERvbid0
IGZvcmNlIE9TUiBiZWNhdXNlIHdlIGhhdmUgb25seSBzZWVuIE93blN0cnVjdHVyZU1vZGUuCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFdFIHNob3VsZCBoYXZlIGEgYmV0dGVyIHdheSB0byBk
byB0aGlzLi4uCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdl
dEJ5VmFsKQorICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRBcnJheU1vZGUobm9kZS0+YXJy
YXlNb2RlKCkud2l0aFR5cGUoQXJyYXk6OkdlbmVyaWMpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMDk2LDcgKzExMTIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQgaGl0IGEgaG9sZSB3aWxsIG5v
dyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KICAgICAgICAgICAgICAgICAgICAgLy8gb3V0
LW9mLWJvdW5kcyBzbG93IHBhdGguIFdlIGNhbiBmaXggdGhhdCB3aXRoOgogICAgICAgICAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NjY4
Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJy
YXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1
bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCkBAIC0xMTExLDcgKzExMjcsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJyYXlNb2RlLnNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91bmRzKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpICYm
IGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpJbkJvdW5kcykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEhvbGVzIGxvb2sgbGlrZSBOYU4gYWxyZWFkeSwgc28gaWYg
dGhlIHVzZXIgZG9lc24ndCBjYXJlCkBAIC0xMTIxLDcgKzExMzcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNw
ZWN1bGF0aW9uKCkgPT0gQXJyYXk6Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRl
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgTmVnYXRpdmVJbmRleCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5l
Q2hhaW47CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTE3OCw3ICsxMTk0LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IGEgbm9uLUpTVmFs
dWUgcmVzdWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgYXMgdGhlIGluZGV4aW5nIG1vZGUgZG9l
c24ndCB0ZWxsIHVzIGFib3V0IHRoZSB0eXBlIG9mIE93blN0cnVjdHVyZQorICAgICAgICAgICAg
Ly8gcHJvcGVydGllcy4gVGhpcyBpc24ndCBhbiBpc3N1ZSBmb3IgSW5kZXhlZE1vZGUgb25seSBh
cyBCeXRlY29kZVBhcnNpbmcgd2lsbCBlbWl0IGEgbm9ybWFsIEdldEJ5VmFsIGlmIHdlJ3ZlIHBy
b2ZpbGVkIHRoYXQuCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0
QnlWYWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5
TW9kZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAg
ICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkKQEAgLTIyNzUsMjggKzIyOTUs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBj
YXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4o
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZp
eEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25TdHJpbmdVc2U+KG5vZGUtPmNo
aWxkMigpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7
CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAgICBub2RlLT5z
ZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLApAQCAtMjMxNSwzNiArMjMxNCw2NCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwg
QXJyYXk6OkluQm91bmRzU2FuZUNoYWluKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgICAgIEVkZ2UmIGJhc2Ug
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSYgcHJvcGVy
dHkgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSYgaW5k
ZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgRWRnZSYgZW51
bWVyYXRvciA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMyk7Ci0gICAgICAgICAgICBmaXhF
ZGdlPENlbGxVc2U+KGJhc2UpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KGluZGV4KTsKLSAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihlbnVtZXJhdG9yKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQogICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWU6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAg
ICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAg
ICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAg
ICBFZGdlJiBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3Rv
cmFnZUNoaWxkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0
YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS0+cHJlZGljdGlvbigpKSk7CisKKyAgICAgICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KGJhc2UpOworICAgICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oYmFz
ZSwgaW5kZXgsIHN0b3JhZ2VFZGdlKTsKKworICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LmJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2Fu
ZUNoYWluSWZQb3NzaWJsZShub2RlLCBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6
SW5Cb3VuZHMgPyBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6T3V0T2ZCb3VuZHNT
YW5lQ2hhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVy
YXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2Fj
aGUpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxL
bm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdl
bmVyaWNQbmFtZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJ
bnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDog
eworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNl
PihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsK
ICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRo
ZSBpbnN0cnVjdGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxU
eXBlU2V0LgogICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlz
IGNvbnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBm
b3IKQEAgLTM2OTAsNiArMzcxNyw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFy
cmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAor
ICAgIHZvaWQgc2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9u
OworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsg
b24gYSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJu
IHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNo
YW5nZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAg
ICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBh
Y3R1YWxseSBoYWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBm
cm9tIGEgaG9sZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2Vs
eSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQg
b2YKKyAgICAgICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9y
IG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5h
TiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlv
biwgYW5kIGp1c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0
IGNhc2UuIFRoaXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRv
IGhhdmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0
byBVbmRlZmluZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3
YW50IHRvCisgICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIElu
dDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAv
LyBiYXNlZD8KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1w
bGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAg
ICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRo
ZSBob2xlIGNoZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQg
aGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAg
ICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2
NjgKKworICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFy
cmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5o
YXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAg
ICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1Nh
bmVDaGFpbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVu
dGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8v
IHJldHVybmVkIGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdl
IHN0aWxsIGRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJl
cXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAo
aXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5k
cyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZl
SW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5
OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1v
ZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAg
IHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAg
ICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVy
KSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUg
dXNlciBkb2Vzbid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZl
cmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAg
ICAgICAgICAvLyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxh
dGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZC
b3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdh
dGl2ZUluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBB
cnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAg
ICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7
CisgICAgfQorCiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFy
cmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5
ZmU2MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5kZDNjY2ZkYTllNTQ3YmUxMWQx
OTJkMTc1MmQ0NmZkNmRiOWE2MWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1B1dEJ5SWRTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJ
ZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2RlLT5pc0Jy
YW5jaCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2Vy
UmFuZ2VPcHRpbWl6YXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAppbmRleCA2Y2FlMDdlOTA2ZjljMWQw
ZWY0MDMzMGMyMzM0NmM1ZDRjMjNmOWMwLi4xYmFhMWM4YmNmNTE5MzE0MDQzMGExMWZiYzBmM2E4
OTIyMTUxZTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVn
ZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcApAQCAtMTM0NCw2ICsxMzQ0
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAg
ICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS50eXBlKCkgIT0gQXJyYXk6OlVuZGVjaWRlZCkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTM4MCw2ICsxMzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4
ZWN1dGVOb2RlKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgLy8gRklYTUU6IFRlYWNoIHRoaXMgYWJvdXQgRW51bWVyYXRvck5leHRFeHRy
YWN0SW5kZXguCiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewogICAgICAgICAgICAgc2V0
UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSwgUmVsYXRpb25zaGlwOjpMZXNzVGhhbikpOwogICAg
ICAgICAgICAgc2V0UmVsYXRpb25zaGlwKFJlbGF0aW9uc2hpcDo6c2FmZUNyZWF0ZShub2RlLT5j
aGlsZDEoKS5ub2RlKCksIG1femVybywgUmVsYXRpb25zaGlwOjpHcmVhdGVyVGhhbiwgLTEpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCmluZGV4IDBhNTkzZTU2YTc4
NmQzOTNmZDg3YjY1NTdkMzUyZTNmMGQ0MDZhYTUuLmVjNWE4ZmI2ZWFjZTI5ZDM1ZWQwNTdjZDY0
ZjBkNmY0NjQ2NjRkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNw
cApAQCAtMTExLDggKzExMSwxMSBAQCBFeGl0TW9kZSBtYXlFeGl0SW1wbChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIFN0YXRlVHlwZSYgc3RhdGUpCiAgICAgY2FzZSBGaWx0ZXJEZWxldGVCeVN0
YXR1czoKICAgICBjYXNlIEZpbHRlckNoZWNrUHJpdmF0ZUJyYW5kU3RhdHVzOgogICAgIGNhc2Ug
RmlsdGVyU2V0UHJpdmF0ZUJyYW5kU3RhdHVzOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRy
YWN0TW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgogICAgICAgICBi
cmVhazsKIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CiAgICAg
Y2FzZSBTdHJDYXQ6CiAgICAgY2FzZSBDYWxsOgogICAgIGNhc2UgQ29uc3RydWN0OgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCA2OTE2MmJjZmY0ZmQyNzM2MjA5MzBjOTcwN2E2
ZDBhNDM4ZTVlZDgxLi4yOTg1ZGZkMWIyNDY0ODNkNzc1YzM1NjhhNzczNjkzNDI0ZjkxZjUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1
ZGUgIkRlbGV0ZUJ5VmFyaWFudC5oIgogI2luY2x1ZGUgIkdldEJ5VmFyaWFudC5oIgogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIK
ICNpbmNsdWRlICJPcGVyYW5kcy5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIK
ICNpbmNsdWRlICJQdXRCeUlkVmFyaWFudC5oIgpAQCAtMTc2NCw3ICsxNzY1LDYgQEAgcHVibGlj
OgogICAgICAgICBjYXNlIEFyaXRoRmxvb3I6CiAgICAgICAgIGNhc2UgQXJpdGhDZWlsOgogICAg
ICAgICBjYXNlIEFyaXRoVHJ1bmM6Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAg
ICAgIGNhc2UgR2V0QnlJZDoKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNh
c2UgR2V0QnlJZFdpdGhUaGlzOgpAQCAtMTc3Miw2ICsxNzcyLDcgQEAgcHVibGljOgogICAgICAg
ICBjYXNlIEdldEJ5SWREaXJlY3RGbHVzaDoKICAgICAgICAgY2FzZSBHZXRQcm90b3R5cGVPZjoK
ICAgICAgICAgY2FzZSBUcnlHZXRCeUlkOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZh
bDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlz
OgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgpAQCAtMTk0MSw2ICsxOTQyLDgyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHZvaWQqPigpOwogICAgIH0KIAorICAg
IGJvb2wgaGFzU3RvcmFnZUNoaWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Ao
KSkgeworICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFy
Q29kZUF0OgorICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVu
dW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBQ
dXRCeVZhbERpcmVjdDoKKyAgICAgICAgY2FzZSBQdXRCeVZhbDoKKyAgICAgICAgY2FzZSBQdXRC
eVZhbEFsaWFzOgorICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWlj
c0FuZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNl
IEF0b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2Fz
ZSBBdG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRvbWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0
b21pY3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWljc1hvcjoKKyAgICAgICAgY2FzZSBBcnJheVB1
c2g6CisgICAgICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6
CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHVuc2ln
bmVkIHN0b3JhZ2VDaGlsZEluZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTdG9yYWdl
Q2hpbGQoKSk7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFN0cmluZ0No
YXJBdDoKKyAgICAgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBjYXNlIFN0cmlu
Z0NvZGVQb2ludEF0OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAg
Y2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIFB1dEJ5
VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBjYXNlIFB1dEJ5VmFs
QWxpYXM6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgY2FzZSBBdG9taWNzQWRkOgor
ICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CisgICAgICAgIGNhc2UgQXRvbWljc0NvbXBhcmVFeGNo
YW5nZToKKyAgICAgICAgY2FzZSBBdG9taWNzRXhjaGFuZ2U6CisgICAgICAgIGNhc2UgQXRvbWlj
c0xvYWQ6CisgICAgICAgIGNhc2UgQXRvbWljc09yOgorICAgICAgICBjYXNlIEF0b21pY3NTdG9y
ZToKKyAgICAgICAgY2FzZSBBdG9taWNzU3ViOgorICAgICAgICBjYXNlIEF0b21pY3NYb3I6Cisg
ICAgICAgICAgICByZXR1cm4gMiArIG51bUV4dHJhQXRvbWljc0FyZ3Mob3AoKSk7CisgICAgICAg
IGNhc2UgQXJyYXlQdXNoOgorICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgY2FzZSBB
cnJheVBvcDoKKyAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgICAgIHJldHVy
biAyOworCisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgorICAgICAgICAgICAgcmV0
dXJuIDI7CisKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToK
KyAgICAgICAgICAgIHJldHVybiA0OworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAv
LyBGSVhNRTogQWRkIEFycmF5SW5kZXhPZiBidXQgaXQgZG9lcyBub24tdHJpdmlhbCB0aGluZ3Mg
dG8gZGV0ZXJtaW5lIHN0b3JhZ2UgZWRnZS4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBib29sIGhhc1VpZE9wZXJhbmQo
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gQ2hlY2tJZGVudDsKQEAgLTIyMDUsNiAr
MjI4MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yR2V0
QnlWYWw6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNhc2UgRW51
bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJBdDoKICAgICAg
ICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgogICAgICAgICBjYXNlIFN0cmluZ0NvZGVQb2ludEF0
OgpAQCAtMjIxNiw3ICsyMjk3LDYgQEAgcHVibGljOgogICAgICAgICBjYXNlIEFycmF5UG9wOgog
ICAgICAgICBjYXNlIEFycmF5SW5kZXhPZjoKICAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAg
Y2FzZSBBdG9taWNzQWRkOgogICAgICAgICBjYXNlIEF0b21pY3NBbmQ6CiAgICAgICAgIGNhc2Ug
QXRvbWljc0NvbXBhcmVFeGNoYW5nZToKQEAgLTMxNzQsNiArMzI1NCwyNCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBtX29wSW5mby5hczxTZXRQcml2YXRlQnJhbmRTdGF0dXMqPigpOwogICAg
IH0KIAorICAgIGJvb2wgaGFzRW51bWVyYXRvck1ldGFkYXRhKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5k
ZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1l
OgorICAgICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
RW51bWVyYXRvck1ldGFkYXRhIGVudW1lcmF0b3JNZXRhZGF0YSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9vcEluZm8yLmFzPEVudW1lcmF0b3JNZXRhZGF0YT4oKTsKKyAgICB9CisKICAgICB2
b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAgICAgaWYgKCFj
aGlsZDEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA1ZDRi
MTdmYjM3NjUyODg4OThhOTMwOGNmNjY1ODE0MjE3YzUwYWQxLi5lNzViY2ZlOGExYWMzNzFhMDJl
NTY1NDk2Yjk4NzhkOTg3ZWU0YWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCkBAIC01MDEsMjAgKzUwMSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oRmVuY2VkU3RvcmVCYXJyaWVyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAotICAgIC8q
IEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAotICAgIG1hY3JvKEdldEVudW1lcmFibGVM
ZW5ndGgsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICAvKiBNdXN0IGdl
bmVyYXRlIGJlY2F1c2Ugb2YgUHJveGllcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICovIFwKICAg
ICBtYWNybyhIYXNJbmRleGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0
Qm9vbGVhbiB8IE5vZGVIYXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhh
c1ZhckFyZ3MpIFwKLSAgICBtYWNybyhIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIE5v
ZGVSZXN1bHRCb29sZWFuKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc093blN0cnVjdHVyZVByb3BlcnR5LCBOb2Rl
UmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhJblN0cnVjdHVy
ZVByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBt
YWNybyhHZXREaXJlY3RQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzIHwg
Tm9kZVJlc3VsdEpTKSBcCisgICAgLyogRm9yLWluIGVudW1lcmF0aW9uIG9wY29kZXMgKi9cCiAg
ICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVy
aWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRv
SW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgTm9kZVJlc3VsdEpTKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckdldEJ5VmFsLCBOb2RlUmVzdWx0SlMgfCBOb2RlSGFzVmFyQXJn
cyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9ySW5CeVZhbCwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgLyogTm9kZXMgZm9yIEpTTWFw
IGFuZCBKU1NldCAqLyBcCiAgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAg
ICAgbWFjcm8oTm9ybWFsaXplTWFwS2V5LCBOb2RlUmVzdWx0SlMpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3
ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLmEzN2U2NmY0OTI4NWViNDk3YjFiZWZhODc3MzQ5MGY1YjFm
OWI1YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApA
QCAtMjM5OSw0OCArMjM5OSw2IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25F
bnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIqLCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkK
LXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3Vl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7Ci0KLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxP
YmplY3QpOwotICAgIEVYQ0VQVElPTl9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNl
KTsKLSAgICBpZiAoIWJhc2UpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVu
dGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKLSAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJl
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
SlNDZWxsKiBiYXNlLCBKU1N0cmluZyogcHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKLSAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
Q29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkp
KTsKLX0KLQotSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExf
RlJBTUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cih2bSwgY2FsbEZyYW1lKTsKLQotICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xv
YmFsT2JqZWN0KTsKLSAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNj
b3BlLnJlbGVhc2UoKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmpl
Y3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFt
ZSkpKTsKLX0KLQogSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBi
YXNlQ2VsbCwgaW50MzJfdCBzdWJzY3JpcHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0NTUsMTA0IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25HZXRQcm9wZXJ0eUVudW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxP
CiAgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGds
b2JhbE9iamVjdCwgYmFzZSkpOwogfQogCi1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0
aW9uVG9JbmRleFN0cmluZywgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IGludDMyX3QgaW5kZXgpKQorSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJh
dG9yKSkKK3sKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblBy
b2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
TW9kZT4obW9kZU51bWJlcik7CisgICAgaWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlz
VW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAg
ICBBU1NFUlQoIWVudW1lcmF0b3ItPnNpemVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1v
ZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7
CisgICAgICAgIEpTT2JqZWN0KiBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9P
YmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKworICAgICAgICBjb25zdGV4cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1l
U3RyaW5nID0gZmFsc2U7CisgICAgICAgIGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9i
amVjdCwgYmFzZSwgaW5kZXgsIG1vZGUsIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpO
dW1iZXJUYWcpOworI2Vsc2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5k
ZXgpOworI2VuZGlmCisgICAgQVNTRVJUKHJlc3VsdC5pc051bWJlcigpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUs
IChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBt
b2RlTnVtYmVyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0g
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5k
ZXggPCBlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3Ry
aW5nKCkpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAg
fQorCisgICAgSlNTdHJpbmcqIHJlc3VsdCA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5k
ZXgoaW5kZXgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVsbCgpKTsKKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30K
KworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFt
ZUFuZEdldEJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAg
IENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRP
cGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmpl
Y3QpOworICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7CisgICAgSlNPYmplY3QqIG9iamVj
dCA9IGJhc2UtPnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElP
TihzY29wZSwgeyB9KTsKKworICAgIFJFTEVBU0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6
ZW5jb2RlKG9iamVjdC0+Z2V0KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOworfQorCitK
U0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
YmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBwcm9wZXJ0eU5hbWVWYWx1ZSwgdWludDMyX3QgaW5k
ZXgsIGludDMyX3QgbW9kZU51bWJlcikpCit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52
bSgpOworICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsK
KyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxG
cmFtZSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAg
SlNWYWx1ZSBiYXNlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFzUHJv
cGVydHkoZ2xvYmFsT2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5h
bWUgPSBqc1NlY3VyZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3BlcnR5
TmFtZVZhbHVlKSk7CisgICAgUkVMRUFTRV9BTkRfUkVUVVJOKHNjb3BlLCBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFz
ZSwgcHJvcGVydHlOYW1lKSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBiYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIHByb3BlcnR5TmFtZVZhbHVlLCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVy
KSkKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwogICAgIEpJVE9wZXJhdGlvblByb2xv
Z3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLSAgICByZXR1cm4ganNT
dHJpbmcodm0sIElkZW50aWZpZXI6OmZyb20odm0sIGluZGV4KS5zdHJpbmcoKSk7CisgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNWYWx1ZSBiYXNlID0g
SlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICBpZiAobW9kZU51bWJlciA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlICYmIGJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oYmFzZS5nZXRPYmplY3QoKS0+aGFzT3duUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3Vy
ZUNhc3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7
CisgICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50b0lkZW50aWZpZXIoZ2xvYmFs
T2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIFJFTEVB
U0VfQU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3RQcm90
b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIGlkZW50aWZpZXIpKSkpOwog
fQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJ
bmRleCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogcmVn
ZXhwUHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4KSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFmZWRlNTk1ZDBmYjhmYTgzNWVm
NzIwNWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQxM2JmMTg4MGNlNzYzNGVlMzEz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTM2LDYg
KzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5zdGFuY2U7CiBjbGFzcyBKU0Jp
Z0ludDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsKK2NsYXNzIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTEwNCwxMiArMTA1LDE0IEBA
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvdG90eXBlT2YsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiwgSlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0lu
ZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCkp
OwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVy
dHksIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgSlND
ZWxsKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNPd25TdHJ1Y3R1
cmVQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpT
U3RyaW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JblN0cnVjdHVy
ZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNT
dHJpbmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5
RW51bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpKTsK
IEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9y
Q2VsbCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVf
SklUX09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxP
YmplY3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVu
dW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFs
T2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90LCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopKTsKK0pT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwsIEVuY29k
ZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdWludDMyX3QsIGludDMyX3Qp
KTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJO
YW1lQW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwq
LCB1aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOworCiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2VsbCosIChK
U0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0Kiwg
U3RydWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihv
cGVyYXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3RydWN0dXJlKikpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3ZTMwNmJhYjg1MzdjMGU4OWUy
ZTBkLi4xYjRmOWU4ZWY2NGFlZDJmNGE4OTk3MTI4NTcyYjkwZTY1ZTM3NjQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IEVkZ2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIGlmICgh
Y2hpbGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKKworCiAgICAgICAgICAgICBFZGdlIGNoaWxkMiA9IG1fZ3JhcGguY2hpbGQobm9kZSwgMSk7
CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gbm9kZS0+YXJyYXlNb2RlKCkucmVm
aW5lKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsCiAgICAgICAgICAgICAgICAgY2hp
bGQxLT5wcmVkaWN0aW9uKCksCiAgICAgICAgICAgICAgICAgY2hpbGQyLT5wcmVkaWN0aW9uKCks
CiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAg
IHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50
MzI6CiAgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCkBAIC01
MDEsNyArNTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
UHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIEFycmF5OjpVaW50MzJBcnJheToKLSAgICAgICAgICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKSAm
JiBub2RlLT5vcCgpID09IEdldEJ5VmFsKQorICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3Bl
Y3VsYXRpb25Gb3JBcml0aG1ldGljKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpICYmIChub2Rl
LT5vcCgpID09IEdldEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gRW51bWVyYXRvckdldEJ5VmFsKSkK
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDMy
T25seSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW5hYmxlSW50NTIoKSkKICAgICAgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oU3BlY0ludDUyQW55KTsKQEAg
LTg2Miw2ICs4NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBBcnJheVBv
cDoKICAgICAgICAgY2FzZSBBcnJheVB1c2g6CiAgICAgICAgIGNhc2UgUmVnRXhwRXhlYzoKQEAg
LTg4Miw3ICs4ODQsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lOgog
ICAgICAgICBjYXNlIEdldFByaXZhdGVOYW1lQnlJZDoKICAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgotICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6
CiAgICAgICAgIGNhc2UgRGlyZWN0Q2FsbDoKICAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRD
YWxsZXI6CkBAIC0xMjA1LDIxICsxMjA2LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNPYmplY3RPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAg
ICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dEV4dHJhY3RNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OiB7
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICAgICAgY2FzZSBJbkJ5VmFs
OgogICAgICAgICBjYXNlIEluQnlJZDoKICAgICAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKICAg
ICAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CiAgICAgICAgIGNhc2UgSGFzT3duUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgSGFzT3duU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSW5T
dHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNF
bnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZVBy
b3BlcnR5OiB7CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0xMjI3LDE4ICsxMjI3LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNDZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IGNhc2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOiB7Ci0gICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZTogewotICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCB8IFNwZWNPdGhlcik7CisKKyAgICAgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAgICAgLy8gVGhpcyBj
YW4gYWN0dWFsbHkgcmV0dXJuIGEgSlMgbnVsbCBidXQgd2UgYnJhbmNoIG9mIHRoYXQgY2FzZSBp
biB0aGUgc2FtZSBiYXNpYyBibG9jayBzbyB3ZSBkb24ndCB3YW50IHRvIG1lc3Mgd2l0aAorICAg
ICAgICAgICAgLy8gZml4dXAncyBsb2dpYy4KKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3Bl
Y0Z1bGxOdW1iZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcp
OworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhIHZhbHVlIHByb2ZpbGUgd2hldGhl
ciB3ZSd2ZSBldmVyIGFjdHVhbGx5IHNlZW4gYSBzeW1ib2wvc3RyaW5nLgorICAgICAgICAgICAg
c2V0UHJlZGljdGlvbihTcGVjU3RyaW5nIHwgU3BlY090aGVyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisKICAgICAgICAgY2FzZSBQYXJzZUludDogewogICAgICAgICAgICAgLy8g
V2UgZXhwZWN0IHRoaXMgbm9kZSB0byBhbG1vc3QgYWx3YXlzIHByb2R1Y2UgYW4gaW50MzIuIEhv
d2V2ZXIsCiAgICAgICAgICAgICAvLyBpdCdzIHBvc3NpYmxlIGl0IHByb2R1Y2VzIE5hTiBvciBp
bnRlZ2VycyBvdXQgb2YgaW50MzIgcmFuZ2UuIFdlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTU0FMb3dlcmluZ1BoYXNlLmNwcAppbmRleCBjOTYzN2ExZDEzZmFhZjllYzA0
NTY1NDgxMDVmNTdlMjk5OWQ0YzAzLi5lM2EyMzlhMzNlMzA4YjJiZWFiMDJhZDBjNTEzZGRiNDlj
YTA2N2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2Vy
aW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJp
bmdQaGFzZS5jcHAKQEAgLTgyLDEwICs4MiwxMCBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eToKICAgICAgICAgICAgIGxvd2VyQm91bmRzQ2hlY2sobV9ncmFwaC5j
aGlsZChtX25vZGUsIDApLCBtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMSksIG1fZ3JhcGguY2hpbGQo
bV9ub2RlLCAyKSk7CiAgICAgICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIEVudW1lcmF0
b3JHZXRCeVZhbDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICAgICAgbG93ZXJC
b3VuZHNDaGVjayhtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAxKSwgbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKICAgICAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAppbmRleCAwZjliZGU2YTMxNWRhNzE3MmEzMGY2MTllZTJkMGI5YjQ2MGUyYzUwLi4xZTA0
NGNmOWRiMWM2MmE3YTk3MDBlNDE1Y2I3MzA0YjljOWE1YTIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMjk2LDEwICsyOTYsNiBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNhc2UgQm9vbGVhblRvTnVtYmVyOgogICAgIGNhc2Ug
RmlhdEludDUyOgogICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51
bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
bmFtZToKLSAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgY2FzZSBUb0lu
ZGV4U3RyaW5nOgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWxPdXRPZkJvdW5k
czoKQEAgLTM3Miw2ICszNjgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICAv
LyB0byBjYXB0dXJlICJwcm9maWxpbmciIGF0IHRoZSBwb2ludCBpbiBjb250cm9sIGZsb3cgaGVy
ZSB0aGUgdXNlciBwdXQgdGhlbS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICBjYXNlIEdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKQEAgLTQ5Niw2ICs0
OTMsMTEgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICAgICAgcmV0dXJuIGlzU2FmZTsK
ICAgICB9CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAg
IC8vIFRoZXNlIHRlY2huaWNhbGx5IGRvbid0IGhhdmUgZWZmZWN0cyBidXQgdGhleSdsbCBvbmx5
IGV2ZXIgZm9sbG93IGEgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUgc28gd2UgbWln
aHQgYXMgd2VsbCByZXR1cm4gZmFsc2UuCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RN
b2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKICAgICBjYXNlIFRvVGhpczoKICAgICBjYXNl
IENyZWF0ZVRoaXM6CiAgICAgY2FzZSBDcmVhdGVQcm9taXNlOgpAQCAtNTk1LDYgKzU5Nyw4IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAg
Y2FzZSBJbkJ5VmFsOgogICAgIGNhc2UgSW5CeUlkOgorICAgIGNhc2UgRW51bWVyYXRvckluQnlW
YWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgY2FzZSBIYXNQcml2
YXRlTmFtZToKICAgICBjYXNlIEhhc1ByaXZhdGVCcmFuZDoKICAgICBjYXNlIEhhc093blByb3Bl
cnR5OgpAQCAtNjM5LDEyICs2NDMsNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgIGNh
c2UgTm90aWZ5V3JpdGU6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgTXVs
dGlEZWxldGVCeU9mZnNldDoKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6Ci0gICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxl
UHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIElu
U3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICBjYXNlIEdl
dFByb3BlcnR5RW51bWVyYXRvcjoKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2Fz
ZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4IDI5MmNlZjYxYTFlZDE1MThhNjA4NzEzNDJkNjQ0ZWQ5
NzhiMWU1YjguLjg5NzM1MjAzMmNiMzdlODA2MzE5MDUyMzZmYWU1Y2RmYzJlOWFhMWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0x
NjM1LDI1ICsxNjM1LDE1IEBAIEpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBv
cmFyeShTcGVjdWxhdGl2ZUpJVCogaml0KQogewogfQogCitKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgR1BSUmVnIHNwZWNpZmlj
UGF5bG9hZCkKICNpZiBVU0UoSlNWQUxVRTY0KQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFs
dWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0
LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQpCi0gICAgOiBtX2dwcihqaXQs
IFJldXNlLCBvcGVyYW5kKQotewotfQorICAgIDogbV9ncHIoaml0LCBzcGVjaWZpY1BheWxvYWQp
CiAjZWxzZQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLUpTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1Zh
bHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFu
ZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKKyAgICA6IG1fcGF5bG9hZEdQUihqaXQsIHNw
ZWNpZmljUGF5bG9hZCkKKyAgICAsIG1fdGFnR1BSKGppdCkKKyNlbmRpZgogewotICAgIGlmIChy
ZXN1bHRXb3JkID09IFBheWxvYWRXb3JkKSB7Ci0gICAgICAgIG1fcGF5bG9hZEdQUiA9IEdQUlRl
bXBvcmFyeShqaXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1w
b3Jhcnkoaml0KTsKLSAgICAgICAgbV90YWdHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwg
b3BlcmFuZCk7Ci0gICAgfQogfQotI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQogSlNWYWx1
ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQs
IFJldXNlVGFnLCBKU1ZhbHVlT3BlcmFuZCYgb3BlcmFuZCkKQEAgLTI1OTUsNyArMjU4NSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUqIG5vZGUpCiAg
ICAgc3RyaWN0SW50MzJSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlLCBj
b25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0
YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC5jaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRl
U3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGguY2hpbGQobm9kZSwgMSkp
OwpAQCAtMjYwNCwxNyArMjU5NCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRUYWc7Ci0gICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9IEludmFsaWRHUFJSZWc7Ci0gICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSkgewotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVhbFJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgcmVzdWx0VGFnLmFkb3B0KHJlYWxSZXN1
bHRUYWcpOwotICAgICAgICByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgfQot
I2VuZGlmCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1h
dDsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KG5vZGUtPmFycmF5
TW9kZSgpLmlzT3V0T2ZCb3VuZHMoKSA/IERhdGFGb3JtYXRKUyA6IERhdGFGb3JtYXRDZWxsKTsK
KyAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOwogCiAgICAg
Ly8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRp
Y2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQogICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSks
IHNjcmF0Y2hSZWcpOwpAQCAtMjY1MCw4ICsyNjMzLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9kZSkKICAgICAgICAgICAgIGJpZ0NoYXJh
Y3RlciwgdGhpcywgb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLCBzY3JhdGNoUmVnLCAm
dm0sIHNjcmF0Y2hSZWcpKTsKIAogICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91
bmRzKCkpIHsKKyAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpOwogI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZXN1bHRUYWdSZWcpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CiAjZW5kaWYKIAogICAg
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9qaXQuZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC0yNjY5LDM0ICsyNjUzLDIyIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lzdGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX2ppdC5ncmFwaCgpLnJlZ2lz
dGVyQW5kV2F0Y2hTdHJ1Y3R1cmVUcmFuc2l0aW9uKG9iamVjdFByb3RvdHlwZVN0cnVjdHVyZSk7
CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Io
bWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcj4oCi0gICAgICAg
ICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHNjcmF0Y2hSZWcpLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3QpLCBiYXNlUmVnLCBw
cm9wZXJ0eVJlZykpOwotI2Vsc2UKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKG1h
a2VVbmlxdWU8U2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3I+KAotICAgICAgICAg
ICAgICAgIG91dE9mQm91bmRzLCB0aGlzLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNjcmF0
Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmplY3Qp
LCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgb3V0T2ZC
b3VuZHMsIHRoaXMsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3Jh
cGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0gZWxz
ZSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAogICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgb3V0
T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50LAotICAgICAgICAgICAg
ICAgICAgICBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBn
bG9iYWxPYmplY3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2Vsc2UKLSAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsU3Ry
aW5nSW50LAotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyhyZXN1bHRUYWdSZWcsIHNj
cmF0Y2hSZWcpLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBnbG9iYWxPYmpl
Y3QpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9i
amVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAganNWYWx1ZVJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJl
bnROb2RlKTsKLSNlbHNlCi0gICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCBzY3Jh
dGNoUmVnLCBtX2N1cnJlbnROb2RlKTsKLSNlbmRpZgotICAgIH0gZWxzZQotICAgICAgICBjZWxs
UmVzdWx0KHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOworICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChm
b3JtYXQgPT0gRGF0YUZvcm1hdEpTKQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2VsbFJlc3Vs
dChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9kZSk7CisgICAgfQogfQogCiB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUqIG5vZGUpCkBAIC0z
MzQ5LDE0ICszMzIxLDMxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmxvYWRGcm9tSW50VHlwZWRB
cnJheShHUFJSZWcgc3RvcmFnZVJlZywgR1BSUmVnIHByb3BlcnR5UmVnCiAgICAgfQogfQogCi12
b2lkIFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiBub2Rl
LCBHUFJSZWcgcmVzdWx0UmVnLCBUeXBlZEFycmF5VHlwZSB0eXBlLCBib29sIGNhblNwZWN1bGF0
ZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KE5vZGUq
IG5vZGUsIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGJvb2wg
Y2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCkKIHsKLSAgICBpZiAoZWxlbWVudFNpemUodHlw
ZSkgPCA0IHx8IGlzU2lnbmVkKHR5cGUpKSB7CisgICAgYm9vbCBpc1VJbnQzMiA9IGVsZW1lbnRT
aXplKHR5cGUpID09IDQgJiYgIWlzU2lnbmVkKHR5cGUpOworICAgIEdQUlJlZyByZXN1bHRSZWcg
PSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgIGlmIChzaG91bGRCb3gpIHsKKyAgICAg
ICAgaWYgKGlzVUludDMyKSB7CisgICAgICAgICAgICBGUFJUZW1wb3JhcnkgZnJlc3VsdCh0aGlz
KTsKKyAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFJlZywgZnJl
c3VsdC5mcHIoKSk7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2ZSA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFJl
ZywgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21w
aWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZBc3NlbWJseUhlbHBlcnM6OnR3b1RvVGhlMzIpLCBmcmVz
dWx0LmZwcigpKTsKKyAgICAgICAgICAgIHBvc2l0aXZlLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIG1faml0LmJveERvdWJsZShmcmVzdWx0LmZwcigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX2ppdC5ib3hJbnQzMihyZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSwgcmVzdWx0UmVncyk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzVUludDMyKSB7CisgICAgICAg
IEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpOwogICAgICAg
ICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIAotICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSA0ICYmICFpc1NpZ25l
ZCh0eXBlKSk7CisKICAgICBpZiAobm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5T
cGVjdWxhdGUpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBy
ZXN1bHRSZWcsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChy
ZXN1bHRSZWcsIG5vZGUpOwpAQCAtMzM4MCw3ICszMzY5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSogbm9kZSwgR1BSUmVnIHJlc3VsdFJl
ZywgVHkKICAgICBkb3VibGVSZXN1bHQoZnJlc3VsdC5mcHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShOb2RlKiBub2Rl
LCBUeXBlZEFycmF5VHlwZSB0eXBlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgQVNTRVJUKGlzSW50KHR5cGUp
KTsKICAgICAKQEAgLTMzOTIsMTMgKzMzODEsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHQK
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKICAgICBHUFJSZWcgc3Rv
cmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRpZShyZXN1bHRS
ZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXRJbnQzMik7CisgICAgYm9vbCBzaG91bGRC
b3ggPSBmb3JtYXQgPT0gRGF0YUZvcm1hdEpTOwogCiAgICAgZW1pdFR5cGVkQXJyYXlCb3VuZHND
aGVjayhub2RlLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZyk7Ci0gICAgbG9hZEZyb21JbnRUeXBlZEFy
cmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCByZXN1bHRSZWcsIHR5cGUpOworICAgIGxvYWRG
cm9tSW50VHlwZWRBcnJheShzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgcmVzdWx0UmVncy5wYXls
b2FkR1BSKCksIHR5cGUpOwogICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9IHRydWU7
Ci0gICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQobm9kZSwgcmVzdWx0UmVnLCB0eXBlLCBj
YW5TcGVjdWxhdGUpOworICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3Vs
dFJlZ3MsIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKIH0KIAogYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Z2V0SW50VHlwZWRBcnJheVN0b3JlT3BlcmFuZCgKQEAgLTM2MzYsNyArMzYyNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXko
R1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZXJ0CiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUq
IG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBl
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIEFTU0VSVChpc0Zs
b2F0KHR5cGUpKTsKICAgICAKQEAgLTM2NDgsNiArMzYzOSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFy
cmF5VHlwZQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3M7CisgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
Zm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKwogICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CiAgICAgRlBSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5mcHIoKTsKICAgICBl
bWl0VHlwZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKQEAg
LTM2NjQsNyArMzY1OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
bkZsb2F0VHlwZWRBcnJheShOb2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZQogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAKLSAgICBkb3VibGVSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKKyAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAg
ICAgICBtX2ppdC5ib3hEb3VibGUocmVzdWx0UmVnLCByZXN1bHRSZWdzKTsKKyAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NF
UlQoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpOworICAgICAgICBkb3VibGVSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKKyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
dXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBO
b2RlKiBub2RlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQpAQCAtMzcwMyw3ICszNzA0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJl
ZyBiYXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2Rl
KQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmlu
ZyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGFyZzEodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKQEAgLTM3MTEsMTkgKzM3MTIsMjAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKiBub2RlKQogICAg
IEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIu
Z3ByKCk7CiAKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3Vs
dFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCiAgICAgc3BlY3Vs
YXRlT2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGFyZzFHUFIpOwogICAgIHNw
ZWN1bGF0ZVN0cmluZyhtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBhcmcyR1BSKTsKIAog
ICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgSlNWYWx1ZVJlZ3NGbHVzaGVkQ2FsbFJlc3VsdCBy
ZXN1bHQodGhpcyk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9iamVjdFN0cmluZywgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGFyZzFHUFIsIGFyZzJHUFIpOwogICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CiAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmpl
Y3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZv
cm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBh
cmcyKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMzczMSwxMiArMzcz
MywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3ltYm9sKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAg
IEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSwgYXJnMUdQUik7CiAgICAgc3BlY3VsYXRlU3ltYm9sKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBKU1ZhbHVl
UmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsT2JqZWN0U3ltYm9sLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlciht
X2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwg
YXJnMUdQUiwgYXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIApAQCAtODAz
OCwxNyArODA0MSwxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJh
eUJ5dGVPZmZzZXQoTm9kZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdCh2ZWN0b3JHUFIs
IG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVj
dEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6
dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0
KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2go
dGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwotICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIo
KTsKKworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybjsKQEAgLTgwNzksMjIgKzgwODIsMjMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMoTm9kZSogbm9kZSkK
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhOb2RlKiBub2RlKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMoTm9kZSog
bm9kZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwog
ICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNj
cmF0Y2gyKHRoaXMpOwogICAgIAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0
Y2guZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gc2NyYXRjaDIuZ3ByKCk7CiAgICAg
CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CisKKyAgICBKU1ZhbHVl
UmVncyByZXN1bHRSZWdzOworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9
IHByZWZpeChEYXRhRm9ybWF0SlMpOwogICAgIAogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZTdG9yYWdlKCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CkBAIC0xMzQ0Miw0NCArMTM0
NDYsMzU0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVUaHJvd1N0YXRpY0Vycm9yKE5v
ZGUqIG5vZGUpCiAgICAgbm9SZXN1bHQobm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUoTm9kZSogbm9kZSkK
IHsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBlbnVtZXJhdG9yKTsK
KyAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKTsKKyAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGUodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
ZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKworICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgIEdQUlJlZyBtb2RlR1BSID0gbW9kZS5n
cHIoKTsKICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7Ci0gICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKIAotICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSksIHJlc3VsdEdQUik7Ci0gICAgc3RyaWN0SW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLX0KKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFk
YXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMsIFJldXNlLCBpbmRleCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSByZXN1bHQucmVncygpOwogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFz
RW51bWVyYWJsZVByb3BlcnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENh
Y2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKDApKSk7CiAKLSAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1
ZVJlZ3MoKTsKLSAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGluY3JlbWVudExvb3A7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmU7CisgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9k
ZSwgb3BlcmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7CisKKyAgICAgICAgICAgIG1faml0Lm1v
dmUoaW5kZXhHUFIsIHNjcmF0Y2guZ3ByKCkpOworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IG1vZGVHUFIpOworCisgICAgICAgICAgICBpbmNyZW1lbnRMb29wID0gbV9qaXQubGFiZWwoKTsK
KyAgICAgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaC5ncHIoKSk7
CisKKyAgICAgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIGRvbmUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoLmdw
cigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmluZGV4ZWRMZW5ndGhPZmZzZXQoKSkpOworICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsK
KyAgICAgICAgfSkpOworICAgICAgICBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKS5saW5rVG8oaW5jcmVtZW50TG9vcCwgJm1f
aml0KTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0
YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSA8PCAzMiksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgbV9qaXQub3I2NChz
Y3JhdGNoLmdwcigpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKworICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
T3duU3RydWN0dXJlTW9kZSAmJiBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOworCisgICAgICAgIC8vIEhhcyB0aGUgc2FtZSBzdHJ1Y3R1cmUgYXMgdGhlIGVudW1l
cmF0b3IuCisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRHUFIo
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwg
bm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1
ZVNvdXJjZSgpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoaW5kZXhH
UFIsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgaW5pdE1vZGUgPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1v
ZGVHUFIpOworCisgICAgICAgIG1faml0LmFkZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICBpbml0TW9kZS5saW5r
KCZtX2ppdCk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQub3I2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgPDwgMzIpLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7CisjZWxzZQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQ
UigpKTsKKyNlbmRpZgorCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IGJhc2VFZGdlKTsKKyAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UucmVncygpOwogCiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5k
TW9kZSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWdzLCBp
bmRleEdQUiwgbW9kZUdQUiwgZW51bWVyYXRvckdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKLSAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwg
bm9kZSk7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRvSW5kZXhTdHJpbmcoTm9kZSogbm9kZSkKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleChOb2RlKiBub2Rl
KQogewotICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgSlNWYWx1ZU9wZXJh
bmQgdXBkYXRlZFBhaXIodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEpTVmFsdWVSZWdzIHBh
aXJSZWdzID0gdXBkYXRlZFBhaXIuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcGF5bG9hZEdQ
UiA9IHBhaXJSZWdzLnBheWxvYWRHUFIoKTsKIAotICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblRvSW5kZXhTdHJpbmcsIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGluZGV4R1BSKTsKLSAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwot
ICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKworICAgIG1faml0LmFuZDMyKFRydXN0
ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBwYXlsb2FkR1BS
LCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
K30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGUoTm9kZSogbm9kZSkKK3sKKyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5q
c1ZhbHVlUmVncygpOworICAgIEdQUlJlZyBwYWlyR1BSID0gaXM2NEJpdCgpID8gcGFpclJlZ3Mu
cGF5bG9hZEdQUigpIDogcGFpclJlZ3MudGFnR1BSKCk7CisKKyAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIG1faml0LnJzaGlmdDY0KHBhaXJHUFIsIFRydXN0ZWRJbW0zMigz
MiksIHJlc3VsdEdQUik7CisjZWxzZQorICAgIG1faml0Lm1vdmUocGFpckdQUiwgcmVzdWx0R1BS
KTsKKyNlbmRpZgorICAgIG1faml0LmFuZDMyKFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spLCByZXN1bHRHUFIpOworCisgICAgc3RyaWN0
SW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqIG5vZGUpCit7Cisg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4T3BlcmFuZCh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG1vZGVPcGVyYW5kKHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9y
T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
cmVzdWx0VGVtcCh0aGlzKTsKKworICAgIEdQUlJlZyBpbmRleCA9IGluZGV4T3BlcmFuZC5ncHIo
KTsKKyAgICBHUFJSZWcgbW9kZSA9IG1vZGVPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyBlbnVt
ZXJhdG9yID0gZW51bWVyYXRvck9wZXJhbmQuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IHJlc3VsdFRlbXAucmVncygpOworCisgICAgYXV0byBzZWVuTW9kZXMgPSBPcHRpb25T
ZXQ8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjo6ZnJvbVJhdyhub2RlLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2Vz
OworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG9wZXJhdGlvbkNhbGw7CisKKyAgICBib29sIG5l
ZWRzT3BlcmF0aW9uID0gc2Vlbk1vZGVzLmNvbnRhaW5zKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpOworCisgICAgLy8gTWFrZSBzdXJlIHdlIGZsdXNoIG9uIGFsbCBjb2Rl
IHBhdGhzIGlmIHdlIGNvdWxkIGNhbGwgdGhlIG9wZXJhdGlvbi4KKyAgICBpZiAobmVlZHNPcGVy
YXRpb24pCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBpZiAoc2Vlbk1vZGVzLmNv
bnRhaW5zQW55KHsgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIH0pKSB7CisKKyAgICAgICAgaWYg
KG5lZWRzT3BlcmF0aW9uKQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgbW9kZSwgVHJ1c3RlZEltbTMyKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKTsKKworICAgICAgICBhdXRvIG91dE9m
Qm91bmRzID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworCisgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvciwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgaW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpTY2FsZVB0ciksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgcmVzdWx0UmVncy50YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgZG9uZUNhc2VzLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgbV9qaXQubW92ZVRydXN0ZWRWYWx1ZShqc051bGwoKSwgcmVzdWx0UmVncyk7CisgICAg
fQorCisgICAgaWYgKG5lZWRzT3BlcmF0aW9uKSB7CisgICAgICAgIGlmIChvcGVyYXRpb25DYWxs
LmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KyAgICAgICAgICAgIG9wZXJhdGlvbkNhbGwubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5h
bWUsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwg
ZW51bWVyYXRvcik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgfQorCisg
ICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckdldEJ5
VmFsKE5vZGUqIG5vZGUpCit7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoR1BSUmVnIGJhc2VDZWxsR1BS
KSB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAg
IEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSOworICAgICAgICBHUFJSZWcgZW51bWVyYXRv
ckdQUjsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlU2xvd1BhdGg7
CisKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7
CisgICAgICAgICAgICBFZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAyKTsKKyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBp
ZiAoc3RvcmFnZUVkZ2UpCisgICAgICAgICAgICAgICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0
b3JhZ2VFZGdlKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRl
eCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgNCkpOworICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDUpKTsKKworICAgICAgICAgICAgR1BSUmVnIG1v
ZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICAgICAgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsK
KyAgICAgICAgICAgIGVudW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAg
ICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHJl
c3VsdFJlZ3MgPSByZXN1bHQucmVncygpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZXN1bHRSZWdzLnBheWxvYWRHUFIoKTsKKworICAgICAgICAgICAgYm9vbCBoYXZlU3RvcmFn
ZSA9ICEhc3RvcmFnZUVkZ2U7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZVRlbXBv
cmFyeTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKCFo
YXZlU3RvcmFnZSkgeworICAgICAgICAgICAgICAgIHN0b3JhZ2VUZW1wb3JhcnkgPSBHUFJUZW1w
b3JhcnkodGhpcywgUmV1c2UsIGVudW1lcmF0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VH
UFIgPSBzdG9yYWdlVGVtcG9yYXJ5LmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBub3RGYXN0TmFtZWRDYXNlczsKKworICAgICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlz
IG5vdCBhbiBvYmplY3QuCisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtb2RlR1BSLCBUcnVzdGVk
SW1tMzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKSk7CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2UpLmlzVHlwZShTcGVjQ2VsbCkpCisg
ICAgICAgICAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoYmFzZUNlbGxHUFIpKTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBz
dHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Uga25vdyB0aGVyZSdzIG9u
bHkgb25lIHN0cnVjdHVyZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBlbWJlZCBpdCBoZXJlLgorICAg
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2Vs
bEdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAg
ICAgICAgICAgICBhdXRvIGJhZFN0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAg
IHNjcmF0Y2hHUFIsCisgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KAorICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTWF5YmUgd2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHJlcHJlc2Vu
dCBJbmRleGVkK05hbWVkPworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpLm5vZGUoKSA9PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpLm5vZGUoKSkK
KyAgICAgICAgICAgICAgICAgICAgYmFkU3RydWN0dXJlU2xvd1BhdGggPSBiYWRTdHJ1Y3R1cmU7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub3RGYXN0TmFtZWRD
YXNlcy5hcHBlbmQoYmFkU3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUg
dGhlIG9mZnNldAorICAgICAgICAgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUg
ZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBh
Y2Nlc3MKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nl
c3MgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAg
ICAgICAgICAgICAgICBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRv
ckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNl
dCgpKSk7CisKKyAgICAgICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChiYXNlQ2VsbEdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKwor
ICAgICAgICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgICAgICAgICAg
b3V0T2ZMaW5lQWNjZXNzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3Zl
KGluZGV4R1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5uZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5z
aWduRXh0ZW5kMzJUb1B0cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWhhdmVTdG9yYWdlKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBzdG9yYWdlR1BSKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG9mZnNldE9mRmly
c3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAgICAg
ICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIs
IHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENh
c2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1
bHRSZWdzLCBEYXRhRm9ybWF0SlMpOworICAgICAgICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVs
eSBvbiBjb21waWxlR2V0QnlWYWwgdG8gY2FsbCBqc1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMga2luZGEgaGFja3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVy
YXRpb25JbmZvKG5vZGUpLmpzVmFsdWVSZWdzKCkgPT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9u
SW5mbyhub2RlKS5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAg
aWYgKGJhZFN0cnVjdHVyZVNsb3dQYXRoLmlzU2V0KCkpCisgICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoYmFkU3RydWN0dXJlU2xvd1BhdGgsIHRoaXMsIG9wZXJh
dGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUNlbGxHUFIsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BS
KSk7CisKKyAgICAgICAgZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICB9OworCisgICAgaWYg
KGlzQ2VsbChiYXNlRWRnZS51c2VLaW5kKCkpKSB7CisgICAgICAgIC8vIFVzZSBtYW51YWwgb3Bl
cmFuZCBzcGVjdWxhdGlvbiBzaW5jZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQgYSBVc2VLaW5kIG1v
cmUgcmVzdHJpY3RpdmUgdGhhbiBDZWxsVXNlLgorICAgICAgICBzcGVjdWxhdGUobm9kZSwgYmFz
ZUVkZ2UpOworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBi
YXNlRWRnZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFz
ZU9wZXJhbmQuZ3ByKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJh
c2VPcGVyYW5kKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQu
Z3ByKCkpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5
cGU+Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5v
ZGUqIG5vZGUsIFNsb3dQYXRoRnVuY3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAg
RWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBn
ZW5lcmF0ZSA9IFsmXSAoYXV0byBiYXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgcHJvcGVydHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkpOworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgNCkpOworCisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5TmFtZVJlZ3Mg
PSBwcm9wZXJ0eU5hbWUucmVncygpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICBHUFJS
ZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
ID0gcmVzdWx0LnJlZ3MoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3Bl
cmF0aW9uQ2FzZXM7CisKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZSkubV90
eXBlICYgflNwZWNDZWxsKQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaElmTm90Q2VsbChiYXNlKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlzIG5vdCBhIGNlbGwuCisgICAg
ICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIG1vZGVHUFIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok93blN0cnVjdHVyZU1vZGUpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAg
bW92ZVRydWVUbyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMu
bGluaygmbV9qaXQpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisjaWYgVVNFKEpTVkFM
VUUzMl82NCkKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBhdXRvIGJhc2VSZWdzID0gSlNWYWx1
ZVJlZ3MoYmFzZUNlbGxHUFIsIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2Vsc2UKKyAgICAgICAg
YXV0byBiYXNlUmVncyA9IGJhc2U7CisjZW5kaWYKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzbG93
UGF0aEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFz
ZVJlZ3MsIHByb3BlcnR5TmFtZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSKTsKKyAgICAgICAgbV9q
aXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAg
ICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7
CisgICAgfTsKKworICAgIGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2Vu
ZXJhdGUoYmFzZS5ncHIoKSwgYmFzZS5ncHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2Uu
cmVncygpLCBiYXNlLnJlZ3MoKS5wYXlsb2FkR1BSKCkpOworICAgIH0KK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAg
Y29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJhdG9ySW5C
eVZhbCk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHkoTm9kZSogbm9kZSkKK3sKKyAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5
KG5vZGUsIG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeUlkRmx1c2goTm9kZSogbm9kZSkKQEAgLTEzNjIyLDY3
ICsxMzkzNiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHVyZShO
b2RlKiBub2RlKQogICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5KE5vZGUqIG5vZGUpCi17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQot
ICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOwotICAgIEdQUlJl
ZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSByZXN1bHQucmVncygpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB3cm9uZ1N0
cnVjdHVyZTsKLQotICAgIHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENl
bGwoYmFzZVJlZ3MpKTsKLQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKLSAgICB3cm9uZ1N0cnVjdHVyZS5hcHBlbmQobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5n
cHIoKSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgp
KSkpOwotCi0gICAgbW92ZVRydWVUbyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9w
ZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VSZWdzLCBwcm9wZXJ0eUdQUikpOwotICAgIGJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKLX0KLQotdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0aW9uPgotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVj
dHVyZVByb3BlcnR5SW1wbChOb2RlKiBub2RlLCBGdW5jdGlvbiBzbG93UGF0aCkKLXsKLSAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVnIGJhc2VHUFIg
PSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwot
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCB3cm9uZ1N0cnVjdHVyZTsKLQotICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCksCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0
b3IuZ3ByKCksIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZz
ZXQoKSkpKTsKLQotICAgIG1vdmVUcnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0g
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlz
LCBzbG93UGF0aCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VH
UFIsIHByb3BlcnR5R1BSKSk7Ci0gICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0UmVncy5w
YXlsb2FkR1BSKCksIG5vZGUpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFz
T3duU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKLXsKLSAgICBjb21waWxlSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbXBsKG5vZGUsIG9wZXJhdGlvbkhhc093blN0cnVjdHVyZVByb3BlcnR5
KTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluU3RydWN0dXJlUHJvcGVydHko
Tm9kZSogbm9kZSkKLXsKLSAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKG5v
ZGUsIG9wZXJhdGlvbkluU3RydWN0dXJlUHJvcGVydHkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CkBAIC0xMzcwOSwzOSArMTM5
NjIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9y
KE5vZGUqIG5vZGUpCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCi12b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYXRvclBuYW1lKE5vZGUqIG5vZGUpCi17
Ci0gICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIHx8
IG5vZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSk7Ci0gICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3Vs
YXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0KLSAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7
Ci0gICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQu
cmVncygpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGluZGV4R1BSLAotICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCAobm9kZS0+b3AoKSA9PSBHZXRFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWUpCi0gICAgICAgICAgICA/IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpCi0gICAgICAgICAgICA6IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0g
ICAgbV9qaXQubW92ZVZhbHVlKGpzTnVsbCgpLCByZXN1bHRSZWdzKTsKLQotICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluaygmbV9q
aXQpOwotCi0gICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0
b3JPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzY3JhdGNoR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxl
UHRyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0g
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKLSNlbmRpZgotCi0gICAgZG9uZS5saW5rKCZtX2pp
dCk7Ci0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKLX0KLQogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUdldEV4ZWN1dGFibGUoTm9kZSogbm9kZSkKIHsKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xNDkz
NCwyOCArMTUxNTQsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3
QXJyYXlXaXRoU2l6ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAgc2l6ZUdQ
Uiwgc3RvcmFnZUdQUikpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KE5vZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJh
dGlvbikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9k
ZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uLCBjb25zdCBTY29w
ZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4mIHByZWZpeCkKIHsKICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpOwotICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwog
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAg
R1BSUmVnIGluZGV4R1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0g
SW52YWxpZEdQUlJlZzsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgQXJyYXlNb2RlIG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICBzd2l0Y2ggKG1v
ZGUudHlwZSgpKSB7CiAgICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIp
KTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0
b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJ
bmRleCgpKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAg
IEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1
bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZC
b3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQpA
QCAtMTQ5ODMsMTIgKzE1MjAzLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgQVNTRVJU
KCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5k
IHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEFT
U0VSVCghIW1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgo
KSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBGUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNo
LmZwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKKyAg
ICAgICAgc3RkOjp0aWUoaW5kZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAg
ICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCkBAIC0xNTAxMiwxMyArMTUyMzQsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBT
X0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJy
YXk6OkFycmF5U3RvcmFnZTogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKLSAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VP
cGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9y
YWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwog
CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4
R1BSLCByZXN1bHRHUFIpID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICBpZiAobW9kZS5pc0luQm91
bmRzKCkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBvdXRPZkJvdW5kcyk7CkBAIC0xNTA0Nyw3MyArMTUyNzEsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2Rl
LCBTX0pJVE9wZXJhdGlvbl9HQ1ogc2wKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIC8vIEZJWE1F
OiBPcHRpbWl6ZSBUeXBlZEFycmF5cyBpbiBIYXNJbmRleGVkUHJvcGVydHkgSUMKICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAg
ICBzdGQ6OnRpZShpbmRleEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOwogICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9
CiAKICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlz
LCBzbG93UGF0aE9wZXJhdGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRl
cihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KSwgYmFzZUdQUiwgaW5kZXhHUFIpKTsKLQotICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKLX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVj
dFBuYW1lKE5vZGUqIG5vZGUpCi17Ci0gICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgp
LnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0Lmdy
YXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgMSk7Ci0gICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQu
Z3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCAyKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgYmFzZUVkZ2UpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5
KHRoaXMsIHByb3BlcnR5RWRnZSk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotCi0gICAgRWRnZSYgZW51
bWVyYXRvckVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2UpOwotICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOwotICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKLQotICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgIEdQ
UlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRvci5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3Vs
dC5yZWdzKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAg
ICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwotICAgIHNsb3dQYXRoLmFwcGVuZCgKLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBzY3JhdGNoR1BS
LAotICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAg
ZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgLy8gSWYgaW5k
ZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0
aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9m
TGluZUFjY2VzcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
Ci0gICAgICAgIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BS
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkp
KTsKLQotICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VH
UFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9m
IGxpbmUKLSAgICBvdXRPZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOwotICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIG1faml0Lm1vdmUoaW5kZXhH
UFIsIHNjcmF0Y2hHUFIpOwotICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIp
OwotICAgIG1faml0LnNpZ25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwot
ICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7Ci0gICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
cmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1l
c0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUu
bGluaygmbV9qaXQpOwotCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNs
b3dQYXRoLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJ
bW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9w
ZXJ0eUdQUikpKTsKLQotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKiBub2Rl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4
IDk4Yzc2MTZiOGZkMmZiZjVjNGRkOGE1NzcxNTA4YWQyNjc5Zjk5ZDEuLmQxMjBiN2I0ZmI4NDQz
NjlkNzJjZDYwMTgxYmMwOGMwYjZjOTE3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgR1BSVGVtcG9yYXJ5OworY2xhc3MgSlNWYWx1ZVJl
Z3NUZW1wb3Jhcnk7CiBjbGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJh
dG9yOwogY2xhc3MgU3BlY3VsYXRpdmVKSVQ7CkBAIC0yNDYsNiArMjQ3LDggQEAgcHVibGljOgog
ICAgIH0KICAgICBHUFJSZWcgYWxsb2NhdGUoR1BSUmVnIHNwZWNpZmljKQogICAgIHsKKyAgICAg
ICAgaWYgKHNwZWNpZmljID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0ZSgp
OwogI2lmIEVOQUJMRShERkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQogICAgICAg
ICBtX2ppdC5hZGRSZWdpc3RlckFsbG9jYXRpb25BdE9mZnNldChtX2ppdC5kZWJ1Z09mZnNldCgp
KTsKICNlbmRpZgpAQCAtMTM0NSwxMiArMTM0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biB0ZW1wb3JhcnlSZWdpc3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS0+YXJyYXlNb2Rl
KCkpOwogICAgIH0KICAgICAKKyAgICAvLyBXZSB1c2UgYSBzY29wZWRMYW1iZGEgdG8gcGxhY2F0
ZSByZWdpc3RlciBhbGxvY2F0aW9uIHZhbGlkYXRpb24uCisgICAgdm9pZCBjb21waWxlR2V0QnlW
YWwoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRh
Rm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworCiAgICAgdm9p
ZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhOb2RlKik7CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiwg
Y29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERh
dGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRnJv
bUNoYXJDb2RlKE5vZGUqKTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJn
dW1lbnRzKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRz
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUq
LCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4o
RGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVH
ZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQp
PiYgcHJlZml4KTsKIAogICAgIHZvaWQgY29tcGlsZUdldFByaXZhdGVOYW1lKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVHZXRQcml2YXRlTmFtZUJ5SWQoTm9kZSopOwpAQCAtMTQyNCwxMiArMTQz
MCwxMiBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlJ
c0RldGFjaGVkSWZPdXRPZkJvdW5kcyhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEpJVENvbXBpbGVy
OjpKdW1wIG91dE9mQm91bmRzKTsKICAgICB2b2lkIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2so
Tm9kZSosIEdQUlJlZyBiYXNlR1BSLCBHUFJSZWcgaW5kZXhHUFIpOwogICAgIHZvaWQgY29tcGls
ZUdldFR5cGVkQXJyYXlCeXRlT2Zmc2V0KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZh
bE9uSW50VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFy
cmF5VHlwZSk7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2Rl
KiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVk
QXJyYXkoTm9kZSosIFR5cGVkQXJyYXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYg
cHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJS
ZWcgYmFzZSwgR1BSUmVnIHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKik7Ci0gICAgdm9pZCBj
b21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZv
cm1hdCk+JiBwcmVmaXgpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5
bWJvbChOb2RlKiwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERh
dGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9p
ZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBF
ZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JD
ZWxsV2l0aFN5bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNo
aWxkMyk7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CkBAIC0xNDU4
LDcgKzE0NjQsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAgICAgRWRnZSB2YWx1ZVVzZSk7CiAg
ICAgdm9pZCBsb2FkRnJvbUludFR5cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBw
cm9wZXJ0eVJlZywgR1BSUmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQg
c2V0SW50VHlwZWRBcnJheUxvYWRSZXN1bHQoTm9kZSosIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVk
QXJyYXlUeXBlLCBib29sIGNhblNwZWN1bGF0ZSk7CisgICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5
TG9hZFJlc3VsdChOb2RlKiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5cGUs
IGJvb2wgY2FuU3BlY3VsYXRlLCBib29sIHNob3VsZEJveCk7CiAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIENsYXNzVHlwZT4gdm9pZCBjb21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVnLCBSZWdp
c3RlcmVkU3RydWN0dXJlLCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QmLCBzaXplX3QsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9k
ZSopOwpAQCAtMTUyNCwyMSArMTUzMCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVG9M
b3dlckNhc2UoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZVRocm93KE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVUaHJvd1N0YXRpY0Vycm9yKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVt
ZXJhYmxlTGVuZ3RoKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0
dXJlUHJvcGVydHkoTm9kZSopOwotICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0
eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKik7CisKKyAgICB2
b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKik7CisgICAg
dm9pZCBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShOb2RlKik7CisgICAgdm9pZCBj
b21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgoTm9kZSopOworICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBp
bGVFbnVtZXJhdG9yR2V0QnlWYWwoTm9kZSopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlPgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShO
b2RlKiwgU2xvd1BhdGhGdW5jdGlvblR5cGUpOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJ
bkJ5VmFsKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHko
Tm9kZSopOworCiAgICAgdm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVQdXRCeUlkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRGlyZWN0KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9kZSopOwotICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdGlvbj4KLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwoTm9kZSosIEZ1bmN0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0
eShOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRvcihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxl
R2V0RW51bWVyYXRvclBuYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxl
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRHZXR0ZXIoTm9kZSopOwogICAgIHZvaWQgY29t
cGlsZUdldFNldHRlcihOb2RlKik7CkBAIC0xNTY4LDcgKzE1NzUsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBjb21waWxlQ2FsbE51bWJlckNvbnN0cnVjdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1No
YWRvd0NoaWNrZW5UYWlsKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkoTm9kZSosIFNfSklUT3BlcmF0aW9uX0dDWik7CisgICAgdm9pZCBjb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KE5vZGUqLCBTX0pJVE9wZXJhdGlvbl9HQ1osIGNvbnN0IFNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPiYgcHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVF
eHRyYWN0Q2F0Y2hMb2NhbChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ2xlYXJDYXRjaExvY2Fs
cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlUHJvZmlsZVR5cGUoTm9kZSopOwpAQCAtMTkyNiw2
ICsxOTMzLDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9
CiAKKyAgICBKU1ZhbHVlUmVncyByZWdzKCkgeyByZXR1cm4ganNWYWx1ZVJlZ3MoKTsgfQorCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CkBAIC0xOTY1LDcgKzE5
NzQsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5
bG9hZEdQUigpKTsKICAgICB9CiAKLSAgICBHUFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNo
KQorICAgIEdQUlJlZyBncHIoV2hpY2hWYWx1ZVdvcmQgd2hpY2ggPSBQYXlsb2FkV29yZCkKICAg
ICB7CiAgICAgICAgIHJldHVybiBqc1ZhbHVlUmVncygpLmdwcih3aGljaCk7CiAgICAgfQpAQCAt
MjAwMywyMSArMjAxMiwyMCBAQCBwcml2YXRlOgogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgorICAgIFN0b3JhZ2VPcGVyYW5kKCkg
PSBkZWZhdWx0OworCiAgICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQq
IGppdCwgRWRnZSBlZGdlKQogICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBtX2VkZ2Uo
ZWRnZSkKICAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVu
dHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKLSAgICAgICAgaWYg
KGppdC0+aXNGaWxsZWQobm9kZSgpKSkKLSAgICAgICAgICAgIGdwcigpOworICAgICAgICBlbXBs
YWNlKGppdCwgZWRnZSk7CiAgICAgfQogICAgIAogICAgIH5TdG9yYWdlT3BlcmFuZCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAg
ICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOworICAgICAgICBpZiAobV9ncHJPcklu
dmFsaWQgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJP
ckludmFsaWQpOwogICAgIH0KICAgICAKICAgICBFZGdlIGVkZ2UoKSBjb25zdApAQCAtMjAzNiw2
ICsyMDQ0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQt
PmZpbGxTdG9yYWdlKGVkZ2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAg
ICB9CisKKyAgICB2b2lkIGVtcGxhY2UoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgbV9qaXQgPSBqaXQ7CisgICAgICAgIG1fZWRnZSA9IGVkZ2U7CisgICAg
ICAgIEFTU0VSVChtX2dwck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgQVNT
RVJUKG1faml0KTsKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2Ug
fHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNG
aWxsZWQobm9kZSgpKSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0KICAgICAKICAgICB2b2lk
IHVzZSgpCiAgICAgewpAQCAtMjA0Myw5ICsyMDYyLDkgQEAgcHVibGljOgogICAgIH0KICAgICAK
IHByaXZhdGU6Ci0gICAgU3BlY3VsYXRpdmVKSVQqIG1faml0OworICAgIFNwZWN1bGF0aXZlSklU
KiBtX2ppdCB7IG51bGxwdHIgfTsKICAgICBFZGdlIG1fZWRnZTsKLSAgICBHUFJSZWcgbV9ncHJP
ckludmFsaWQ7CisgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkIHsgSW52YWxpZEdQUlJlZyB9Owog
fTsKIAogCkBAIC0yMTM0LDExICsyMTUzLDE5IEBAIGNsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5
IHsKIHB1YmxpYzoKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIEpTVmFsdWVSZWdz
VGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKik7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3Bl
Y3VsYXRpdmVKSVQqLCBHUFJSZWcgc3BlY2lmaWNQYXlsb2FkKTsKKyNpZiBVU0UoSlNWQUxVRTMy
XzY0KQorICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNw
ZWNpZmljUGF5bG9hZCwgR1BSUmVnIHNwZWNpZmljVGFnKTsKKyNlbmRpZgogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CiAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBS
ZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0UmVnV29yZCA9IFBheWxv
YWRXb3JkKTsKICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFJldXNl
VGFnLCBKU1ZhbHVlT3BlcmFuZCYpOwogICAgIH5KU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAg
IAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiAhIXJlZ3MoKTsgfQorCisg
ICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkmIG9wZXJhdG9yPShKU1ZhbHVlUmVnc1RlbXBvcmFyeSYm
KSA9IGRlZmF1bHQ7CisKICAgICBKU1ZhbHVlUmVncyByZWdzKCk7CiAKIHByaXZhdGU6CkBAIC0y
MTUwLDYgKzIxNzcsMjYgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorI2lmIFVTRShKU1ZBTFVF
NjQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVS
ZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBX
aGljaFZhbHVlV29yZCkKKyAgICA6IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCit7Cit9Cisj
ZWxzZQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVl
UmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwg
V2hpY2hWYWx1ZVdvcmQgcmVzdWx0V29yZCkKK3sKKyAgICBpZiAocmVzdWx0V29yZCA9PSBQYXls
b2FkV29yZCkgeworICAgICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVz
ZSwgb3BlcmFuZCk7CisgICAgICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAg
ICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgIH0K
K30KKyNlbmRpZgorCiBjbGFzcyBGUFJUZW1wb3JhcnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggOWQ0MDM2OTYxMGQ4OWU0MWU1MTZmNmM0YTQy
NWU1ZmQ3MTAyYTFiZS4uYWJjOGQxOGFhMzk3NjRhMmY5YzBjMDc0MWNmZDFlOWE1OGRkYzQyNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCkBAIC0xODEyLDYgKzE4MTIsMzM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVDb250aWd1b3VzUHV0QnlWYWwoTm9kZSogbm9kZSwgQmFzZU9wZXJhbmRUeXBlJiBiYXNl
CiAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsgICAgCiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25z
dCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZv
cm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJy
YXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
czoKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisjaWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NP
REUpCisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3Zl
cmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFu
ZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBH
UFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVm
aXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRz
LCBKU1ZhbHVlUmVncygpLCBub2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigwKSkpOworCisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAg
IGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNl
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNl
S2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVm
aXgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3Vs
YXRlIGNlbGwuIFdlJ2xsIHByb2JhYmx5IGJlIHJpZ2h0LgorICAgICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAg
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBKU1ZhbHVl
UmVncyBwcm9wZXJ0eVJlZ3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVn
cywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIs
IHByb3BlcnR5UmVncyk7CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisg
ICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Cisg
ICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMSksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgYmFzZVJlZ3MgPSBiYXNlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHBy
b3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7CisKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUp
ID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRl
ID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhp
dElmTmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3Rl
clNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JO
b2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50
YWdHUFIoKSkpOworCisgICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
ICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxT
aXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIGJh
c2VSZWdzLCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOworCisgICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNT
dHJpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAg
Z2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYg
KG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3Bl
Y1N5bWJvbCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9
IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAg
ICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVs
bHB0ciwgYmFzZVJlZ3MsIHByb3BlcnR5UmVncyk7CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlW
YWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdU
Rk1vdmUoc2xvd1BhdGgpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAg
Y2FzZSBBcnJheTo6Q29udGlndW91czogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCku
aXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQg
cHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAg
ICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
KyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQg
Zm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZp
eChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdElu
dDMyIDogRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRP
ZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3Jh
Z2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAg
ICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SW50MzIpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7CisKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5k
cywgSlNWYWx1ZVJlZ3MoKSwgMCwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAg
ICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0Lmxv
YWQzMigKKyAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3Vs
dChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAg
ICAgICAgICAgcmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAg
ICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBQYXlsb2FkT2Zmc2V0KSwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVD
aGFpbigpKSB7CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1f
aml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVn
cygpLCBudWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJl
c3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKwor
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6
dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWRWYWx1
ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdFJlZ3MpOworICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSkpOworCisgICAg
ICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAg
ICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQs
CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZTogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAg
ICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9y
YWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAg
ICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0
UmVncywgZm9ybWF0KSA9IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNF
aWdodCksIHJlc3VsdC5mcHIoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgp
LmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0
LmZwcigpKSk7CisgICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAg
ICAgICAgICAgICAgIGJveERvdWJsZShyZXN1bHQuZnByKCksIHJlc3VsdFJlZ3MpOworICAgICAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJs
ZSAmJiAhcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
KworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9
IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBG
UFJSZWcgdGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4
KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dD
YXNlczsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAg
ICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOwor
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAg
ICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAg
ICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHBy
b3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsK
KworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOwor
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAw
LCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAg
IG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJl
c3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBHUFJS
ZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJl
Z3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKTsKKworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWln
aHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigp
KTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3Jh
Z2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBh
eWxvYWQpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3Vu
ZHMpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcigKKyAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAg
ICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAg
ICAgIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlN0
cmluZzoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBj
b21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5
TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRB
cnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgIH0gfQorfQorCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgp
OwpAQCAtMjIzMyw3ICsyNTYyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKIAogICAgIGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgIC8vIFJlbGllcyBv
biBTdHJpbmdDaGFyQXQgbm9kZSBoYXZpbmcgc2FtZSBiYXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwK
LSAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CisgICAgICAgIEpTVmFsdWVS
ZWdzVGVtcG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9k
ZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkg
eworICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAg
ICAgICAgICBBU1NFUlQocHJlZmVycmVkRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQp
OworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjI2NSwzMjYgKzI1
OTksMjcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgR2V0QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUo
KS50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoK
LSAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFC
TEVfQ09ERSkKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRl
cXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2Us
IGluZGV4KTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwot
Ci0gICAgICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAg
IEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJS
ZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRl
eEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1
c2UobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2Uo
KTsKLQotICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIp
OwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRH
UFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAg
ICBpZiAobV9ncmFwaC5tX3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAgICAgICAg
ICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmpl
Y3RVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJv
bFVzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0
V2l0aFN5bWJvbChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDAp
KTsgLy8gU2F2ZSBhIHJlZ2lzdGVyLCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUg
cmlnaHQuCi0gICAgICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VH
UFIgPSBiYXNlLmdwcigpOwotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVn
cyA9IHByb3BlcnR5LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBq
c1ZhbHVlUmVzdWx0OworICAgICAgICBHUFJUZW1wb3Jhcnkgb25lUmVnUmVzdWx0OworICAgICAg
ICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJl
Z3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
czsKKyAgICAgICAgICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKLQotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIHByb3BlcnR5LCBUYWdXb3JkKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwg
UGF5bG9hZFdvcmQpOwotCi0gICAgICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2Uu
anNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHBy
b3BlcnR5LmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdz
KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAg
IENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRl
RXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNp
emUoKSk7Ci0gICAgICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNl
ZFJlZ2lzdGVycygpOwotCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSkuaXNUeXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOwotCi0gICAg
ICAgICAgICBKSVRHZXRCeVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vz
c1R5cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgIGJhc2VSZWdz
LCBwcm9wZXJ0eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwotCi0gICAgICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlw
ZShTcGVjU3RyaW5nKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJ
c1N0cmluZyA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAg
ICAgICAgZWxzZSBpZiAobV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpLmlzVHlwZShTcGVjU3ltYm9sKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+
cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKG1faml0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChn
ZW4uc2xvd1BhdGhKdW1wKCkpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1Bh
dGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAg
ICByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBi
YXNlUmVncywgcHJvcGVydHlSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQu
YWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFycmF5OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czog
ewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgp
KSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBh
eWxvYWQodGhpcyk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6SW50MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpOwotICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAg
ICAgICAgIE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlW
YWx1ZVRhZykpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFBheWxvYWRPZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJl
c3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0g
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQsIFRhZ09mZnNldCksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRhZy5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zm
c2V0KSwKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewot
ICAgICAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJh
bmNoSWZOb3RFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWcuZ3By
KCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFs
dWVSZWdzKCksIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdFRhZy5ncHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1
bHRQYXlsb2FkUmVnID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgICAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0
dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBz
dG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0g
ICAgICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwg
cmVzdWx0LmZwcigpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlz
SW5Cb3VuZHNTYW5lQ2hhaW4oKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3Vs
dC5mcHIoKSkpOwotICAgICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5v
ZGUpOworICAgICAgICAgICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6CisgICAgICAgICAgICBjYXNl
IERhdGFGb3JtYXRDZWxsOgorICAgICAgICAgICAgICAgIG9uZVJlZ1Jlc3VsdCA9IEdQUlRlbXBv
cmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3M6OnBh
eWxvYWRPbmx5KG9uZVJlZ1Jlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBw
cm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5n
cHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXls
b2FkKHRoaXMpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAg
R1BSUmVnIHJlc3VsdFBheWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAg
ICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdl
UmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1w
UmVnKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVt
cFJlZykpOwotICAgICAgICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFRhZ1JlZywgcmVz
dWx0UGF5bG9hZFJlZyk7Ci0KLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0
cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZToKLSAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTog
ewotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3Bl
cmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1Zh
bHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdFBheWxvYWQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAs
IG1faml0LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAg
ICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1h
dCA9PSBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQgPSBKU1Zh
bHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0ganNW
YWx1ZVJlc3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAg
ICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMikpOwotICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAg
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICgh
bV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0UGF5bG9hZCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1
bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3Vs
dFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91
bmRzID0gbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
OwotCi0gICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHJlc3VsdFRhZ1JlZyk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBo
b2xlID0gbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVz
dWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91
bmRzKTsKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAg
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJ
bnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0
UGF5bG9hZFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAg
ICAgICBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBj
b21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlW
YWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
blNjb3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2Rl
KCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAg
ICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQp
OworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxMTIsNTEg
KzQxNDcsNTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAg
ICAgICAgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgobm9kZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAg
ICBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAg
Y29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShub2RlKTsKKyAgICBjYXNlIEhhc0luZGV4ZWRQ
cm9wZXJ0eTogeworICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhp
cywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFBy
b3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0
ZDo6dHVwbGU8R1BSUmVnLCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihp
bmRleC5ncHIoKSwgcmVzdWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBj
YXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eShub2RlKTsKKworICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7
CisgICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29t
cGlsZUluU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0
ZUluZGV4QW5kTW9kZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFz
SW5kZXhlZFByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9k
ZSwgb3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5l
eHRFeHRyYWN0TW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9k
ZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUs
IG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHkpOworCisgICAgY2FzZSBFbnVt
ZXJhdG9yTmV4dEV4dHJhY3RJbmRleDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRF
eHRyYWN0SW5kZXgobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldERp
cmVjdFBuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZShub2RlKTsKKworICAg
IGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKLSAgICAgICAgY29tcGls
ZUdldFByb3BlcnR5RW51bWVyYXRvcihub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckdldEJ5
VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwobm9kZSk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAg
ICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgY29tcGlsZUdldEVu
dW1lcmF0b3JQbmFtZShub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsKKyAg
ICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7Ci0gICAgICAgIGNvbXBpbGVUb0luZGV4U3Ry
aW5nKG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAg
ICAgY29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorCiAgICAgY2FzZSBQcm9maWxlVHlwZTogewogICAgICAgICBjb21waWxlUHJvZmls
ZVR5cGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggYjVlMWNjM2U0MmQyZmI0YzlkNGYx
MzEwN2U5OGVmZTBiMjA1ZTVjNy4uODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZhOGYx
MGE0YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCkBAIC0yMjQ2LDYgKzIyNDYsMzcwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSogbm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxK
U1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJl
Zml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2Fz
ZSBBcnJheTo6QW55VHlwZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAg
Y2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6CisgICAgY2FzZSBBcnJheTo6U2VsZWN0
VXNpbmdQcmVkaWN0aW9uczoKKyAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBE
RkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
c3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRSZWdz
LmdwcigpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKKyAgICBj
YXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Cisg
ICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAg
ICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2Jq
ZWN0VXNlKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkudXNlS2luZCgpID09IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxl
R2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9k
ZSwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAg
ICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5R1BSID0gcHJvcGVydHkuZ3ByKCk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3M7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkg
PSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworCisgICAgICAgIEdQ
UlRlbXBvcmFyeSBzdHViSW5mbzsKKyAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxp
ZEdQUlJlZzsKKyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQp
KSB7CisgICAgICAgICAgICBzdHViSW5mbyA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAg
ICAgIHN0dWJJbmZvR1BSID0gc3R1YkluZm8uZ3ByKCk7CisgICAgICAgIH0KKworICAgICAgICBz
cGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIHNw
ZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6
Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdFJlZ3MuZ3ByKCk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
bm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0g
bV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElm
TmVlZGVkKGNvZGVPcmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2Rl
KG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CisK
KyAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9qaXQuY29k
ZUJsb2NrKCksIEpJVFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5
cGU6OkdldEJ5VmFsLCB1c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIEpTVmFsdWVSZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwg
c3R1YkluZm9HUFIpOworCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0
dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0
YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQz
Mk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRy
dWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8o
KS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgobV9qaXQpOworCisgICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRG
R0pJVCkpCisgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsK
KyAgICAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAg
ICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoSUNDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dD
YXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRp
b24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0
R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihjb2RlT3JpZ2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9w
ZXJ0eUdQUik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQ
YXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5
VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3
ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSks
IGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAg
IH0KKworICAgICAgICBtX2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKKyAg
ICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOworCisgICAgICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgQXJyYXk6OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAg
ICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHBy
b3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3M7CisgICAgICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGll
KHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09
IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHQgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSkpOworCisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5C
b3VuZHNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1v
ZGUoKS50eXBlKCkgPT0gQXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpKSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjaygKKyAgICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBu
dWxscHRyLAorICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQsIG5vZGUs
IGZvcm1hdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVz
dWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgo
KSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1
bHRSZWcpOworCisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2Fu
ZUNoYWluKCkpIHsKKyAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5jaElmTm90RW1w
dHkocmVzdWx0UmVnKTsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51
bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBtX2ppdC5t
b3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHJlc3VsdFJlZyk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZF
bXB0eShyZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAg
ICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlS
ZWcpKTsKKyAgICAgICAgfQorCisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsK
KyAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAg
ICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVn
IHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFn
ZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisgICAgICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOwor
CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQ7CisgICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0g
cHJlZml4KERhdGFGb3JtYXREb3VibGUpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
c3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVz
dWx0UmVnKTsKKyAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1Nh
bmVDaGFpbigpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xl
LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHRSZWcpKTsK
KyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICAg
ICAgYm94RG91YmxlKHJlc3VsdFJlZywgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlICYmICFyZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCByZXN1bHRJc1VuYm94ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNo
YWluKCkgJiYgIShub2RlLT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOworCisg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0
eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9w
ZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3Jh
Z2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcg
dGVtcFJlZyA9IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IGZvcm1hdCkgPSBwcmVmaXgocmVzdWx0SXNVbmJveGVkID8gRGF0YUZvcm1hdERvdWJsZSA6IERh
dGFGb3JtYXRKUyk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNl
czsKKworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcs
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7Cisg
ICAgICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2Vz
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZl
SW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDAp
KSk7CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQTmFOOworICAg
ICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJl
Zyk7CisgICAgICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFyZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJl
Zywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgICAgIGJv
eERvdWJsZSh0ZW1wUmVnLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpT
VmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSkpLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAg
ICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZ3MuZ3ByKCksIG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7
CisgICAgICAgICAgICBib3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVncy5ncHIoKSk7CisgICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlW
YWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MuZ3ByKCksIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAg
ICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5h
cnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OworCisgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVs
bHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKworICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVl
UmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdEdQUikpOworCisgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsK
KyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcg
c3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7
CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRh
Rm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9h
ZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwg
cmVzdWx0UmVnKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5
KHJlc3VsdFJlZykpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0
aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5v
ZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3Vt
ZW50czoKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSwgcHJl
Zml4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgor
ICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJh
eTo6SW50MTZBcnJheToKKyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJy
YXk6OlVpbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAg
Y2FzZSBBcnJheTo6VWludDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Cisg
ICAgY2FzZSBBcnJheTo6RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJh
eTogeworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZWRBcnJheVR5cGUoKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUs
IHR5cGUsIHByZWZpeCk7CisgICAgfSB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKIHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CkBAIC0yNzEz
LDcgKzMwNzcsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
CiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6IHsKICAgICAgICAgLy8gUmVsaWVzIG9uIFN0cmluZ0No
YXJBdCBub2RlIGhhdmluZyBzYW1lIGJhc2ljIGxheW91dCBhcyBHZXRCeVZhbAotICAgICAgICBj
b21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBzY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPihbJl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEFT
U0VSVChwcmVmZXJyZWRGb3JtYXQgPT0gRGF0YUZvcm1hdEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9
PSBEYXRhRm9ybWF0Q2VsbCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVz
dWx0LnJlZ3MoKSwgcHJlZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAgICBicmVh
azsKICAgICB9CiAKQEAgLTI3NDYsMzQ1ICszMTE1LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAg
ICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkFueVR5cGVkQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAg
ICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgQXJyYXk6
OlNlbGVjdFVzaW5nUHJlZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6
Ci0gICAgICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBt
b2RlIHR5cGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVbmRl
Y2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGluZGV4KTsKLSAgICAgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKLQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgbm9kZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDApKSk7Ci0KLSAgICAgICAgICAgIHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsK
LSAgICAgICAgICAgIGluZGV4LnVzZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRH
UFIpOwotICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgICBjYXNlIEFycmF5OjpCaWdJbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpCaWdV
aW50NjRBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAg
aWYgKG1fZ3JhcGgubV9zbG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0
VXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpLnVzZUtpbmQoKSA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdp
dGhTeW1ib2wobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAg
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5Lmdwcigp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgICAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdC5ncHIoKSwg
VHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAg
ICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RkOjpvcHRpb25h
bDxHUFJUZW1wb3Jhcnk+IHN0dWJJbmZvOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3Vs
YXRpb24pOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHByb3BlcnR5KTsKLQotICAg
ICAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAg
IGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgc3R1YkluZm9HUFIg
PSBzdHViSW5mby0+Z3ByKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDApKTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLQotICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljOwotICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0
LnJlY29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRl
ZChjb2RlT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUu
Zm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQot
ICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJh
c2VHUFIpKTsKLQotICAgICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAg
ICAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4s
IGNhbGxTaXRlLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBK
U1ZhbHVlUmVncyhyZXN1bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICAgICAgICAgIGlmICht
X3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNT
dHJpbmcpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5n
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAgICAgICAgICAg
ICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgICAgICBl
bHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNU
eXBlKFNwZWNTeW1ib2wpKQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0
eUlzU3ltYm9sID0gdHJ1ZTsKLQotICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9q
aXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpERkdKSVQpKQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2Vu
ZXJhdG9yPiBzbG93UGF0aDsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklU
VHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0Nh
bGwoCi0gICAgICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCks
IHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVy
ZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0
aW1pemUsCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vh
a1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBz
dHViSW5mb0dQUiwgbnVsbHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAg
ICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXpl
LAotICAgICAgICAgICAgICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0
dWJJbmZvKCksIG51bGxwdHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0
aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQ
YXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgot
ICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVy
dHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJl
ZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29u
dGlndW91cyk7Ci0gICAgICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUg
PSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9q
aXQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soCi0gICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFs
dWVSZWdzKCksIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdC5ncHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgbm9kZS0+YXJyYXlNb2RlKCkudHlw
ZSgpID09IEFycmF5OjpJbnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsK
KyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0
QnlWYWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3Jt
YXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJl
ZEZvcm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAg
ICAgIHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3Jt
YXREb3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQz
Mk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0g
ICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9
IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5n
dGgoKSkpKTsKLQotICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
KSwgcmVzdWx0UmVnKTsKLQotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0
T2ZCb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0
LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJ
bmRleCwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuLCBwcm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkp
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgICAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsK
LSAgICAgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAg
ICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlz
LCBvcGVyYXRpb25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5
UmVnKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQ
UlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBGUFJSZWcgcmVz
dWx0UmVnID0gcmVzdWx0LmZwcigpOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsK
LQotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQp
LCByZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kc1NhbmVDaGFpbigpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KExvYWRGcm9tSG9sZSwgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZOYU4o
cmVzdWx0UmVnKSk7Ci0gICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9k
ZSk7CisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNW
YWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IHJl
c3VsdC5yZWdzKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRP
ZkJvdW5kc1NhbmVDaGFpbigpICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNB
c090aGVyKTsKLQotICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmlj
dEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKLSAgICAgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNl
UmVnID0gYmFzZS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFs
PEdQUlRlbXBvcmFyeT4gcmVzdWx0OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJSZWc+
IHJlc3VsdFJlZzsKLSAgICAgICAgICAgIGlmICghcmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzdWx0LmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmVn
ID0gcmVzdWx0LT5ncHIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVu
Z3RoKCkpKSk7Ci0KLSAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVz
RWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091
dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJv
eGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxs
cHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVn
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47Ci0gICAgICAgICAgICAgICAgICAgIG1faml0
LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1
bHQodGVtcFJlZywgbm9kZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVnLCAqcmVzdWx0UmVnKTsKLSAgICAg
ICAgICAgICAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAg
ICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwg
KnJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAg
ICAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAg
Ym94RG91YmxlKHRlbXBSZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
SW50LAotICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAgICAganNW
YWx1ZVJlc3VsdCgqcmVzdWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAg
IGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBT
cGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwot
ICAgICAgICAgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlT
dG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1f
aml0LmJyYW5jaElmRW1wdHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRS
ZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgICAgICAgICBtX2ppdC5s
b2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkp
LCByZXN1bHRSZWcpOwotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdFJlZykpOwotICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0
b3IoCi0gICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBz
bG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVn
LCBwcm9wZXJ0eVJlZykpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmlu
Zyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RB
cmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhu
b2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1
bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2Rl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0g
ICAgICAgIGNhc2UgQXJyYXk6OkludDE2QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMy
QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OlVpbnQ4Q2xhbXBlZEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToK
LSAgICAgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZs
b2F0MzJBcnJheToKLSAgICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OiB7Ci0gICAgICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwg
dHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzU4MSw3ICszNjI1LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gZmFsc2U7Ci0gICAg
ICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdEdQUiwgdHlwZSwgY2Fu
U3BlY3VsYXRlKTsKKyAgICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQm94ID0gZmFsc2U7Cisg
ICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHR5cGUsIGNhblNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKQEAgLTUyNjksNTIgKzUzMTQsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgR2V0RW51bWVyYWJs
ZUxlbmd0aDogewotICAgICAgICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChub2RlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkobm9k
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0
eTogewotICAgICAgICBjb21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KG5vZGUpOworCisgICAg
Y2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIGluZGV4KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29t
cGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHks
IHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4g
c3RkOjptYWtlX3BhaXIoaW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAg
dW5ibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBj
b21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEdldFByb3Bl
cnR5RW51bWVyYXRvcjogeworICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKG5v
ZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5
OiB7Ci0gICAgICAgIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOworCisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxlRW51
bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5k
ZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CisKKyAgICBj
YXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0
b3JOZXh0RXh0cmFjdE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNl
IEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsK
KworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgY29tcGls
ZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9
Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZTogewotICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5h
bWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7
CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7
Ci0gICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CisKKyAgICBjYXNl
IEVudW1lcmF0b3JHZXRCeVZhbDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFs
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3Ry
dWN0dXJlUG5hbWU6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAg
ICAgIGNvbXBpbGVHZXRFbnVtZXJhdG9yUG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0
b3JJbkJ5VmFsOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBj
b21waWxlVG9JbmRleFN0cmluZyhub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckhhc093blBy
b3BlcnR5OiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkobm9kZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAg
ICAgY29tcGlsZVByb2ZpbGVUeXBlKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CmluZGV4IDExNzZkM2U3YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBiZWYxZDAzOGIuLjVmNTFmMjI1
MTA0ZjliYTUyMjY5OGRkMDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMjcz
LDYgKzI3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1
dHRlcmZseToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAg
ICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5
VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAg
ICAgY2FzZSBQdXRCeVZhbDoKQEAgLTM1Miw2ICszNTMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAg
ICAgICAgICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBj
YXNlIEdldEJ5VmFsOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAg
ICAgICAgICAgICAgY2FzZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5kZXggMmUyZjA3ZGZjN2U4YzEz
ZGRiMGVkZDVhMmQwN2E1ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcyMzBlMGUxYmQ0NDVmMzA2MjM0
MzdmY2Q2MzQwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExB
YnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKQEAgLTExNCw2ICsxMTQsNyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2Vu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVy
aWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
aW5kZXhlZExlbmd0aE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yX21vZGVTZXQsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSBc
CiAgICAgbWFjcm8oSlNSb3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmxh
Z3MoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19sZW5ndGgsIEpTUm9wZVN0cmluZzo6b2Zm
c2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcjAsIEpTUm9wZVN0
cmluZzo6b2Zmc2V0T2ZGaWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGExYTVmZDI0NGNmMjExMDMyNjQxOTdhNzZhZTMwYzdm
NjBmNzllNjQuLjAzZjg2NTJjNmNiODJjNjIwMjBkMWU2NmJiNTlmNDY1OTFkODNlNGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTI4Niwx
OCArMjg2LDE1IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKICAg
ICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9w
ZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQ
bmFtZToKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6CiAgICAgY2FzZSBHZXRJbmRleGVk
UHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNh
c2UgR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdl
bmVyaWNQbmFtZToKLSAgICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFs
OgorICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHk6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBjYXNlIFBoYW50b21OZXdPYmpl
Y3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKaW5kZXggNmZlMjlkOTlmYTQ0MTQ5YzE0NmIyMWFi
NDEwNGM0MDgwMzY5ZjM3MS4uYzYzZTNmOTE4N2ZlMWRlMjgwYzA1NWQwYjY4ZDZlNGQ1MjFmOWJm
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApA
QCAtMTUyMyw0MCArMTUyMywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29tcGlsZVN0b3Jl
QmFycmllcigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFBy
b3BlcnR5OgotICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHkpOworICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4
ZWRQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkob3BlcmF0
aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBj
b21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21w
aWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eSgpOworICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoK
KyAgICAgICAgICAgIGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBj
b21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0eSgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBk
YXRlSW5kZXhBbmRNb2RlKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRE
aXJlY3RQbmFtZToKLSAgICAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZSgpOworICAgICAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICAgICAgY29tcGlsZUVu
dW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHZXRFbnVtZXJhYmxlTGVuZ3RoOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmFi
bGVMZW5ndGgoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAg
ICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoKTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICAgICAgICAg
IGNvbXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dFVwZGF0ZVByb3BlcnR5TmFtZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4
dFVwZGF0ZVByb3BlcnR5TmFtZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
R2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZSgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoK
KyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoKTsKICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgICAgICAg
ICBjb21waWxlR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSgpOworICAgICAgICBjYXNlIEVudW1l
cmF0b3JJbkJ5VmFsOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCk7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgotICAgICAgICAg
ICAgY29tcGlsZVRvSW5kZXhTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHk6CisgICAgICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKICAgICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOwpAQCAtNTAy
MCw3ICs1MDExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gd2UgZG9taW5hdGUgdGhlbS4KICAg
ICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIExWYWx1ZSBjb21waWxl
R2V0QnlWYWxJbXBsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAg
IHN3aXRjaCAobV9ub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTUwNDcsOCArNTAzOCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxp
dmUgdG8ga2VlcCBjb250ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgaWYg
KG1fbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAg
ICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAg
ICBzZXRKU1ZhbHVlKHJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGZhc3RDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUwODAsOCArNTA3MCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBr
ZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgIGlmIChtX25vZGUtPmFy
cmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cykKICAgICAgICAgICAgICAgICBl
bnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVz
dWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJs
ZTogewpAQCAtNTEwMCw4ICs1MDg5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChyZXN1bHQsIHJlc3VsdCkpOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbV9ub2Rl
LT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkgJiYgIShtX25vZGUtPmZsYWdz
KCkgJiBOb2RlQnl0ZWNvZGVVc2VzQXNPdGhlcik7CkBAIC01MTQxLDE4ICs1MTMwLDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgaWYgKHJlc3VsdElzVW5ib3hlZCkKLSAgICAg
ICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jl
c3VsdCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUobV9v
dXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShEb3VibGUsIGZhc3RSZXN1bHQs
IHNsb3dSZXN1bHQpOworCisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OlVu
ZGVjaWRlZDogewogICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDEpKTsKIAogICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91
bmRzLCBub1ZhbHVlKCksIG1fbm9kZSwgbV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMy
WmVybykpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6
OlZhbHVlVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1
cm4gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCk7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKQEAg
LTUxNjksOCArNTE1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE91
dE9mQm91bmRzLCBub1ZhbHVlKCksIG51bGxwdHIsIGlzT3V0T2ZCb3VuZHMpOwogICAgICAgICAg
ICAgICAgIFR5cGVkUG9pbnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAg
ICAgICAgICAgICBtX2hlYXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBtX291dC56
ZXJvRXh0UHRyKGluZGV4KSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2Fk
NjQoYWRkcmVzcykpOwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQubG9hZDY0KGFkZHJlc3MpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01MTkyLDggKzUx
NzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
CiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVz
dWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhp
KEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJyYXk6OlNjb3BlZEFyZ3VtZW50czogewpAQCAtNTI0Niw4ICs1MjMx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1
bHQsIG92ZXJmbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQucGhpKEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToK
QEAgLTUyNTYsMjQgKzUyNDAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2dyYXBo
Lm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG1fbm9kZSkpIHsKICAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKS51
c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRKU1Zh
bHVlKHZtQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3Ry
aW5nLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvd09iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTdHJpbmco
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTdHJpbmcobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAg
ICBpZiAobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xV
c2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBJbnQ2NCwgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMSkpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAwKSksIGxvd1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAg
ICAgICAgICAgICAgIEludDY0LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFs
T2JqZWN0KSwKLSAgICAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0No
aWxkKG1fbm9kZSwgMCkpLCBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAx
KSkpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGxvd0pT
VmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93SlNWYWx1ZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fbm9kZTsKQEAgLTUzNzMsOCArNTM1NCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgc2V0SlNWYWx1
ZShwYXRjaHBvaW50KTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBw
YXRjaHBvaW50OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdl
OgpAQCAtNTM5MCw4ICs1MzcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KHJlc3Vs
dCkpOwogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtl
ZXAgY29udGVudCBpbiBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxs
QWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5u
ZXdCbG9jaygpOwpAQCAtNTQxNywxMyArNTM5NiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2
ZS4KICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcnJheTo6U3RyaW5nOiB7Ci0gICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0KCk7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmluZ0No
YXJBdEltcGwoKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6
OkludDhBcnJheToKQEAgLTU0NDgsOSArNTQyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb2FkRnJvbUludFR5cGVkQXJyYXkocG9pbnRlciwgdHlw
ZSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNp
bmNlIHRoYXQga2VlcHMgc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICAgICAgZW5zdXJl
U3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29s
IGNhblNwZWN1bGF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KHJlc3VsdCwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0
KHR5cGUpKTsKQEAgLTU0NjksOCArNTQ0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhh
dCBrZWVwcyBzdG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVI
ZXJlKGJhc2UpOwotICAgICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKQEAgLTU0ODAsOCArNTQ1NCwyNCBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5
OjpVbnByb2ZpbGVkOgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJh
ZCBhcnJheSB0eXBlIik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBjb21waWxlR2V0QnlWYWxJbXBsKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBl
IHR5cGUgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlm
IChpc0ludCh0eXBlKSkgeworICAgICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRl
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KHJlc3VsdCwg
dHlwZSwgY2FuU3BlY3VsYXRlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisg
ICAgICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBEb3VibGUpCisgICAgICAgICAgICBzZXREb3Vi
bGUocmVzdWx0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQp
OwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAt
ODU3MSw3ICs4NTYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
SW50NjQsIGZhc3RSZXN1bHQsIGVtcHR5UmVzdWx0LCBzbG93UmVzdWx0KSk7CiAgICAgfQogICAg
IAotICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJBdCgpCisgICAgTFZhbHVlIGNvbXBpbGVTdHJp
bmdDaGFyQXRJbXBsKCkKICAgICB7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93U3RyaW5nKG1f
Z3JhcGguY2hpbGQobV9ub2RlLCAwKSk7CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMy
KG1fZ3JhcGguY2hpbGQobV9ub2RlLCAxKSk7CkBAIC04Njc5LDcgKzg2NjksMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAg
ICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMgc3RvcmFn
ZSBhbGl2ZS4KICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKEludDY0LCByZXN1bHRzKSk7CisgICAgICAgIHJldHVybiBtX291
dC5waGkoSW50NjQsIHJlc3VsdHMpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZVN0cmluZ0No
YXJBdCgpCisgICAgeworICAgICAgICBzZXRKU1ZhbHVlKGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBs
KCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCkKQEAg
LTEyOTA2LDE3ICsxMjkwMSwxNiBAQCBwcml2YXRlOgogICAgICAgICBlbWl0U3RvcmVCYXJyaWVy
KGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJh
cnJpZXIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
U19KSVRPcGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uKQorICAgIExWYWx1ZSBjb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5SW1wbChMVmFsdWUgaW5kZXgsIFNfSklUT3BlcmF0aW9uX0dDWiBz
bG93UGF0aE9wZXJhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkp
OwotICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMSkpOwogICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCk7
CiAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewot
ICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hp
bGQobV9ub2RlLCAyKSk7CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2Uo
bV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkp
OwogCiAgICAgICAgICAgICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbW9kZS50eXBlKCkg
PT0gQXJyYXk6OkludDMyID8KICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlBy
b3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKQEAgLTEyOTUx
LDExICsxMjk0NSwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVS
ZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJl
dHVybiBtX291dC5waGkoSW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAg
ICAgIH0KICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAg
ICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIEluZGV4ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3Vi
bGVQcm9wZXJ0aWVzOwogICAgICAgICAgICAgCkBAIC0xMjk4OSwxMiArMTI5ODIsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0g
ICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBz
bG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9v
dXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAK
ICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBMVmFsdWUg
c3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAg
ICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgbV9ub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMzAyNiwxOTYgKzEz
MDE4LDMyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogCiAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
LSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQs
IHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQog
CiAgICAgICAgIGRlZmF1bHQ6IHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVy
bzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9i
amVjdCksIGJhc2UsIGluZGV4KSkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4KSk7CiAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpCisg
ICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIExWYWx1
ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAg
ICAgIHNldEJvb2xlYW4oY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwoaW5kZXgsIG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFBy
b3BlcnR5RW51bWVyYXRvcigpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAg
ICAgICBMVmFsdWUgYmFzZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IExWYWx1ZSBwcm9wZXJ0eSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIHNl
dEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5KSk7CisgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQorICAgICAgICAgICAgc2V0SlNW
YWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHdl
YWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlv
bkdldFByb3BlcnR5RW51bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKSkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBTbG93UGF0aENhbGw+Ci0gICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHlJbXBs
KExWYWx1ZSBiYXNlLCBTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKQorICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlKCkKICAgICB7CiAgICAgICAgIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdp
bi5zZW1hbnRpYyk7Ci0gICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd1N0cmluZyhtX25vZGUt
PmNoaWxkMigpKTsKLSAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMSkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0g
bG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwogCi0gICAgICAgIExCYXNp
Y0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9j
ayBjb3JyZWN0U3RydWN0dXJlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBpZiAobV9ub2RlLT5lbnVtZXJh
dG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7
CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291
dC5ub3RaZXJvMzIobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSkpOwogCi0gICAgICAgIG1fb3V0
LmJyYW5jaChpc0NlbGwoYmFzZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAg
ICAgICAgICB1c3VhbGx5KGlzQ2VsbENhc2UpLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGluY3JlbWVudCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjaGVja0hhc1Byb3BlcnR5ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBj
b3JyZWN0U3RydWN0dXJlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRl
eCA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0
aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjaGVja0hhc1Byb3Bl
cnR5KSwgdW5zdXJlKGluY3JlbWVudCkpOwogCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5u
b3RFcXVhbCgKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCksCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFw
cy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSwKLSAgICAgICAg
ICAgIHJhcmVseShzbG93UGF0aCksIHVzdWFsbHkoY29ycmVjdFN0cnVjdHVyZSkpOworICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaW5jcmVtZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRl
eFBoaSA9IG1fb3V0LnBoaShJbnQzMiwgaW5pdGlhbEluZGV4KTsKKyAgICAgICAgICAgIExWYWx1
ZSBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYWRkKGluZGV4UGhpLCBtX291dC5pbnQzMk9uZSk7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNyZW1lbnRlZEluZGV4UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
ZmluYWxJbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKGluY3JlbWVudGVkSW5kZXgpOwor
ICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0Lmxlc3NUaGFuKGluY3JlbWVudGVkSW5kZXgs
IG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cl9pbmRleExlbmd0aCkpLCB1bnN1cmUoY2hlY2tIYXNQcm9wZXJ0eSksIHVuc3VyZShjb250aW51
YXRpb24pKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb3JyZWN0U3RydWN0dXJlLCBzbG93
UGF0aCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvcnJlY3RTdHJ1Y3R1cmVSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0hhc1Byb3BlcnR5KTsK
KyAgICAgICAgICAgIExWYWx1ZSBwcm9wZXJ0eUluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0
aWFsSW5kZXhGb3JIYXNQcm9wZXJ0eSwgaW5jcmVtZW50ZWRJbmRleFJlc3VsdCk7CisgICAgICAg
ICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKGluZGV4UGhpLCBtX291dC5hbmNob3IocHJvcGVy
dHlJbmRleCkpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmluYWxQcm9wZXJ0eUluZGV4
ID0gbV9vdXQuYW5jaG9yKHByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgTFZhbHVlIGhhc1By
b3BlcnR5ID0gY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwocHJvcGVydHlJbmRleCwgb3Bl
cmF0aW9uSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2goaGFzUHJvcGVydHksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50
KSk7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAg
ICAgICAgICAgbV9vdXQuZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIAotICAgICAgICAgICAgICAgIHZtQ2Fs
bChJbnQ2NCwgc2xvd1BhdGhDYWxsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBw
cm9wZXJ0eSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIExWYWx1ZSBmaW5h
bEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBmaW5hbEluY3JlbWVudGVkSW5kZXgsIGZpbmFsUHJv
cGVydHlJbmRleCk7CisgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmJpdE9yKG1fb3V0Lnpl
cm9FeHQoZmluYWxJbmRleCwgSW50NjQpLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Ok51bWJl
clRhZyB8IHN0YXRpY19jYXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Oklu
ZGV4ZWRNb2RlKSA8PCAzMikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCwgc2xvd1Bh
dGhSZXN1bHQpKTsKKyAgICAgICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMCk7CisgICAgICAgIGlmIChtX25vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSAmJiBiYXNlRWRnZS51
c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dDZWxs
KGJhc2VFZGdlKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBt
X25vZGUsIG1fb3V0Lm5vdEVxdWFsKG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9z
dHJ1Y3R1cmVJRCksIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpKTsKKworICAgICAgICAgICAgc3BlY3Vs
YXRlKEJhZENhY2hlLCBub1ZhbHVlKCksIG1fbm9kZSwgbV9vdXQubm90RXF1YWwobV9vdXQubG9h
ZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQp
LCBtX291dC5jb25zdEludDMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSkpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1f
b3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJv
MzIobW9kZSksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBWYWx1ZUZy
b21CbG9jayBpbmNyZW1lbnRlZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwg
bV9vdXQuaW50MzJPbmUpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAg
IGluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVkSW5kZXgp
OworICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGluZGV4
LCBJbnQ2NCksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6TnVtYmVyVGFnIHwgc3RhdGljX2Nh
c3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkg
PDwgMzIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBMVmFs
dWUgYmFzZSA9IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7CiAg
ICAgfQogCi0gICAgdm9pZCBjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KCkK
KyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCgpCiAgICAgewotICAg
ICAgICBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSksIG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSk7CisgICAgICAgIExWYWx1
ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIHNl
dEludDMyKG1fb3V0LmNhc3RUb0ludDMyKGJveGVkUGFpcikpOwogICAgIH0KIAotICAgIHZvaWQg
Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KCkKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJh
dG9yTmV4dEV4dHJhY3RNb2RlKCkKICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9uSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHkpOworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMVmFsdWUgaGlnaEJpdHMgPSBtX291dC5jYXN0
VG9JbnQzMihtX291dC5sU2hyKGJveGVkUGFpciwgbV9vdXQuY29uc3RJbnQzMigzMikpKTsKKyAg
ICAgICAgc2V0SW50MzIobV9vdXQuYml0QW5kKGhpZ2hCaXRzLCBtX291dC5jb25zdEludDMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW51bWVyYXRpb25Nb2RlTWFzaykpKTsKICAgICB9CiAK
LSAgICB2b2lkIGNvbXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KCkKKyAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIHByb2JhYmx5IGhhdmUgYSBtZXRob2Qgb2YgdmFsdWUgcmVjb3ZlcnkgZm9yIHRoaXMg
bm9kZSBzaW5jZSBpdCdzICJlZmZlY3QiIGZyZWUgYnV0IGFsd2F5cyBsaXZlIGluIGJ5dGVjb2Rl
LgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lKCkKICAg
ICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwobG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9uSW5TdHJ1Y3R1cmVQcm9wZXJ0eSk7CisgICAgICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29y
aWdpbi5zZW1hbnRpYyk7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQy
KCkpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDMo
KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0aW9uQmxvY2sgPSBudWxscHRyOworICAg
ICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBudWxscHRyOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG91dE9mQm91bmRzUmVzdWx0OworICAgICAgICBWYWx1ZUZyb21CbG9jayBjYWNo
ZWROYW1lUmVzdWx0OworCisgICAgICAgIGF1dG8gc2Vlbk1vZGVzID0gT3B0aW9uU2V0PEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT46OmZyb21SYXcobV9ub2RlLT5lbnVtZXJhdG9yTWV0
YWRhdGEoKSk7CisKKyAgICAgICAgaWYgKHNlZW5Nb2Rlcy5jb250YWluc0FueSh7IEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpHZW5lcmljTW9kZSB9KSkgeworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJbmRl
eCA9IG51bGxwdHI7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kc0Jsb2NrID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvYWRQcm9wZXJ0eU5h
bWVCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzLmNvbnRhaW5zKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKSB7CisgICAgICAgICAgICAgICAg
Y2hlY2tJbmRleCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9u
QmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC50ZXN0SXNaZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkluZGV4ZWRNb2RlKSksIHVuc3VyZShjaGVja0luZGV4KSwgdW5zdXJlKG9wZXJh
dGlvbkJsb2NrKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBpZiAoY2hlY2tJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y2hlY2tJbmRleCk7CisgICAgICAgICAgICAgICAgTFZhbHVlIG91dE9mQm91bmRzID0gbV9vdXQu
YWJvdmVPckVxdWFsKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1By
b3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICBtX291dC5icmFuY2gob3V0T2ZCb3VuZHMsIHVuc3VyZShvdXRPZkJvdW5kc0Jsb2Nr
KSwgdW5zdXJlKGxvYWRQcm9wZXJ0eU5hbWVCbG9jaykpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHNCbG9j
ayk7CisgICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSk7CisgICAgICAgICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9hZFByb3BlcnR5TmFtZUJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBMVmFsdWUgbmFtZXNWZWN0b3IgPSBtX291dC5sb2FkUHRyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3IpOworICAgICAgICAgICAgICAgIGNhY2hlZE5hbWVSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuemVyb0V4dFB0cihtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hl
YXBzLldyaXRlQmFycmllckJ1ZmZlcl9idWZmZXJDb250ZW50cy5hdEFueUluZGV4KCksIG5hbWVz
VmVjdG9yLCBtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlUHRyKSkpKTsKKyAgICAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBWYWx1ZUZyb21CbG9jayBvcGVyYXRpb25SZXN1bHQ7CisKKyAgICAg
ICAgaWYgKHNlZW5Nb2Rlcy5jb250YWlucyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4
ZWRNb2RlKSkgeworICAgICAgICAgICAgaWYgKG9wZXJhdGlvbkJsb2NrKQorICAgICAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG9wZXJhdGlvbkJsb2NrKTsKKyAgICAgICAgICAgIG9wZXJhdGlv
blJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBpbmRleCwg
bW9kZSwgZW51bWVyYXRvcikpOworICAgICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICAg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY29udGludWF0aW9uKQorICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uKTsKKworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKEludDY0KTsKKyAgICAg
ICAgQVNTRVJUKG91dE9mQm91bmRzUmVzdWx0IHx8IGNhY2hlZE5hbWVSZXN1bHQgfHwgb3BlcmF0
aW9uUmVzdWx0KTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaUlmU2V0KHJlc3VsdCwg
b3V0T2ZCb3VuZHNSZXN1bHQsIGNhY2hlZE5hbWVSZXN1bHQsIG9wZXJhdGlvblJlc3VsdCk7Cisg
ICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRE
aXJlY3RQbmFtZSgpCisgICAgdm9pZCBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKCkKICAgICB7
Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2Vs
bChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwotICAgICAgICBMVmFsdWUgcHJvcGVy
dHkgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7Ci0gICAgICAgIExW
YWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Ci0g
ICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMykpOworICAgICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApOworICAgICAgICBFZGdlIHByb3BlcnR5TmFtZUVkZ2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMSk7CisgICAgICAgIEVkZ2Ugc3RvcmFnZUVkZ2UgPSBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG1fbm9kZSwgMik7CisgICAgICAgIEVkZ2UgaW5kZXhFZGdlID0gbV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDMpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrT2Zmc2V0
ID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lTG9hZCA9IG1f
b3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mTGluZUxvYWQgPSBtX291
dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExWYWx1ZSBiYXNlID0gREZHOjppc0NlbGwoYmFzZUVkZ2UudXNlS2lu
ZCgpKSA/IGxvd0NlbGwoYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbikgOiBsb3dK
U1ZhbHVlKGJhc2VFZGdlKTsKKworICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IHN0b3JhZ2VFZGdl
ID8gbG93U3RvcmFnZShzdG9yYWdlRWRnZSkgOiBudWxscHRyOworICAgICAgICAvLyBXZSBoYXZl
IHRvIG1hdGVyaWFsaXplIHRoZSBwcm9wZXJ0eU5hbWUgaGVyZSBpbiBjYXNlIGl0IHJlcXVpcmVz
IGJveGluZyBzaW5jZSB0aGUgSUMgcGF0aCB3b24ndCBkb21pbmF0ZSBzdWJzZXF1ZW50IHVzZXMg
aW4gc3Vic2VxdWVudCBub2Rlcy4KKyAgICAgICAgLy8gSWYgaXQncyBhbiBJbnQzMiBhbmQgd2Ug
dXNlIGl0IGFzIHN1Y2ggdGhpcyBib3hpbmcgd2lsbCBiZSBEQ0UnZCBieSBiMyBsYXRlciBhbnl3
YXkuCisgICAgICAgIGxvd0pTVmFsdWUocHJvcGVydHlOYW1lRWRnZSwgTWFudWFsT3BlcmFuZFNw
ZWN1bGF0aW9uKTsKKworCisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKGluZGV4RWRn
ZSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDQpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobV9ub2RlLCA1KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY2hlY2tJc0Nl
bGxCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNoZWNrU3Ry
dWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjaGVj
a0lubGluZU9yT3V0T2ZMaW5lQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBpbmxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBvdXRPZkxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBnZW5lcmljSUNCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0Lm5vdEVxdWFsKAotICAgICAgICAgICAgbV9vdXQubG9hZDMyKGJhc2Us
IG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKSwKLSAgICAgICAgICAgIG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1
cmVJRCkpLAotICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjaGVja09mZnNl
dCkpOworICAgICAgICBMVmFsdWUgaXNOb3ROYW1lZCA9IG1fb3V0LnRlc3ROb25aZXJvMzIobW9k
ZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
IHwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZSkpOworICAgICAgICBtX291
dC5icmFuY2goaXNOb3ROYW1lZCwgdW5zdXJlKGdlbmVyaWNJQ0Jsb2NrKSwgdW5zdXJlKGNoZWNr
SXNDZWxsQmxvY2spKTsKIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGNoZWNrT2Zmc2V0LCBpbmxpbmVMb2FkKTsKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMu
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNhcGFjaXR5KSksCi0gICAgICAg
ICAgICB1bnN1cmUob3V0T2ZMaW5lTG9hZCksIHVuc3VyZShpbmxpbmVMb2FkKSk7CisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNoZWNrSXNDZWxsQmxvY2spOworICAgICAgICBtX291dC5icmFuY2go
aXNDZWxsKGJhc2UsIHByb3ZlblR5cGUoYmFzZUVkZ2UpKSwgdXN1YWxseShjaGVja1N0cnVjdHVy
ZUJsb2NrKSwgcmFyZWx5KGdlbmVyaWNJQ0Jsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY2hlY2tTdHJ1Y3R1cmVCbG9jayk7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVJRDsKKyAg
ICAgICAgYXV0byBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoYmFzZUVkZ2Uubm9kZSgpKS5t
X3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpCisgICAg
ICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0LmNvbnN0SW50MzIoc3RydWN0dXJlLT5pZCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIoYmFz
ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworCisgICAgICAgIExWYWx1ZSBoYXNFbnVt
ZXJhdG9yU3RydWN0dXJlID0gbV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1
cmVJRCkpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoUmVz
dWx0OworICAgICAgICBpZiAoaW5kZXhFZGdlLm5vZGUoKSA9PSBwcm9wZXJ0eU5hbWVFZGdlLm5v
ZGUoKSkgeworICAgICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGJhZFN0cnVjdHVyZVNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgIG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNoZWNrSW5s
aW5lT3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOworCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyhiYWRTdHJ1Y3R1cmVTbG93UGF0aCk7CisgICAgICAgICAgICBi
YWRTdHJ1Y3R1cmVTbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9w
ZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBiYXNlLCBpbmRleCwgZW51bWVyYXRvcikpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5KGNo
ZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOwogCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlubGluZUxvYWQsIG91dE9mTGluZUxvYWQpOworICAgICAg
ICBtX291dC5hcHBlbmRUbyhjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spOworICAgICAgICBM
VmFsdWUgaW5saW5lQ2FwYWNpdHkgPSBudWxscHRyOworICAgICAgICBib29sIGhhc05vT3V0T2ZM
aW5lUHJvcGVydGllcyA9IGZhbHNlOworICAgICAgICBpZiAoc3RydWN0dXJlKSB7CisgICAgICAg
ICAgICBoYXNOb091dE9mTGluZVByb3BlcnRpZXMgPSAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOworICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5jb25zdEludDMyKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpbmxp
bmVDYXBhY2l0eSkKKyAgICAgICAgICAgIGlubGluZUNhcGFjaXR5ID0gbV9vdXQubG9hZDMyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZElubGluZUNh
cGFjaXR5KTsKKyAgICAgICAgTFZhbHVlIGlzSW5saW5lID0gaGFzTm9PdXRPZkxpbmVQcm9wZXJ0
aWVzID8gbV9vdXQuaW50MzJPbmUgOiBtX291dC5iZWxvdyhpbmRleCwgaW5saW5lQ2FwYWNpdHkp
OworICAgICAgICBtX291dC5icmFuY2goaXNJbmxpbmUsIHVuc3VyZShpbmxpbmVMb2FkQmxvY2sp
LCB1bnN1cmUob3V0T2ZMaW5lTG9hZEJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
aW5saW5lTG9hZEJsb2NrKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5saW5lUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleCht
X2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgCisgICAgICAgICAgICBtX291dC5sb2Fk
NjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLAogICAg
ICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgU2NhbGVFaWdo
dCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSkpOwogICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZMaW5lTG9h
ZCwgc2xvd0Nhc2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoYmFz
ZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhv
dXRPZkxpbmVMb2FkQmxvY2spOworICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICBz
dG9yYWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7
CisKICAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0LnNpZ25FeHQzMlRvNjQoCi0gICAg
ICAgICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRv
ciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkSW5saW5lQ2FwYWNpdHkp
KSkpOworICAgICAgICAgICAgbV9vdXQubmVnKG1fb3V0LnN1YihpbmRleCwgaW5saW5lQ2FwYWNp
dHkpKSk7CiAgICAgICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJl
c3VsdCA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNl
SW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRl
eCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5KSkpOwogICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dDYXNlUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKAotICAgICAgICAgICAgdm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRCeVZhbCwg
d2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHkpKTsKLSAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhnZW5lcmljSUNC
bG9jayk7CisgICAgICAgIExWYWx1ZSBnZW5lcmljUmVzdWx0ID0gY29tcGlsZUdldEJ5VmFsSW1w
bCgpOworICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbV9ub2RlLT5hcnJheU1vZGUoKS50
eXBlZEFycmF5VHlwZSgpOworICAgICAgICBpZiAoaXNJbnQodHlwZSkpIHsKKyAgICAgICAgICAg
IGlmIChlbGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpCisgICAgICAgICAg
ICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveEludDMyKGdlbmVyaWNSZXN1bHQpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGdlbmVyaWNSZXN1bHQgPSBzdHJpY3RJbnQ1MlRvSlNW
YWx1ZShnZW5lcmljUmVzdWx0KTsKKyAgICAgICAgfSBlbHNlIGlmIChnZW5lcmljUmVzdWx0LT50
eXBlKCkgPT0gRG91YmxlKQorICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IGJveERvdWJsZShn
ZW5lcmljUmVzdWx0KTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGlubGluZVJlc3Vs
dCwgb3V0T2ZMaW5lUmVzdWx0LCBzbG93Q2FzZVJlc3VsdCkpOwotICAgIH0KKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgZ2VuZXJpY0lDUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGdlbmVyaWNSZXN1bHQp
OworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICB2b2lkIGNvbXBpbGVH
ZXRFbnVtZXJhYmxlTGVuZ3RoKCkKLSAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMy
KGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2luZGV4TGVuZ3Ro
KSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbik7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQsIGdlbmVyaWNJQ1Jlc3VsdCwgb3V0T2ZMaW5lUmVz
dWx0LCBpbmxpbmVSZXN1bHQpOworICAgICAgICBpZiAoYmFkU3RydWN0dXJlU2xvd1BhdGhSZXN1
bHQpCisgICAgICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHJlc3VsdCwgYmFkU3RydWN0
dXJlU2xvd1BhdGhSZXN1bHQpOworICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgfQog
Ci0gICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKCkKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9y
SGFzUHJvcGVydHkoU2xvd1BhdGhGdW5jdGlvblR5cGUgc2xvd1BhdGhGdW5jdGlvbikKICAgICB7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51
bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKSkpOwotICAgIH0KLQotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1
cmVQbmFtZSgpCi0gICAgewotICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICBFZGdlIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDApOworICAgICAgICBMVmFsdWUgYmFzZSA9IGJhc2VFZGdlLnVzZUtpbmQoKSA9PSBD
ZWxsVXNlID8gbG93Q2VsbChiYXNlRWRnZSkgOiBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKyAgICAg
ICAgTFZhbHVlIHByb3BlcnR5TmFtZSA9IGxvd0pTVmFsdWUobV9ncmFwaC52YXJBcmdDaGlsZCht
X25vZGUsIDEpKTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJB
cmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUgPSBsb3dJbnQzMihtX2dy
YXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworICAgICAgICBMVmFsdWUgZW51bWVyYXRvciA9
IGxvd0NlbGwobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsKIAotICAgICAgICBMQmFz
aWNCbG9jayBpbkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IG91dE9mQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNO
YW1lZEJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxs
QmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBtYXRjaGVzU3Ry
dWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBvcGVy
YXRpb25CbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkpLAotICAgICAgICAgICAg
dXN1YWxseShpbkJvdW5kcyksIHJhcmVseShvdXRPZkJvdW5kcykpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQudGVzdE5vblplcm8zMihtb2RlLCBtX291dC5jb25zdEludDMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpLCB1bnN1cmUoaXNOYW1lZEJsb2Nr
KSwgdW5zdXJlKG9wZXJhdGlvbkJsb2NrKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzTmFt
ZWRCbG9jayk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpbkJvdW5kcywgb3V0T2ZCb3VuZHMpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0
LmxvYWRQdHIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91bmRz
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5i
YXNlSW5kZXgobV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChiYXNlLCBwcm92ZW5UeXBlKGJhc2VFZGdlKSks
IHVuc3VyZShpc0NlbGxCbG9jayksIHVuc3VyZShvcGVyYXRpb25CbG9jaykpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbEJsb2NrKTsKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZUlE
ID0gbV9vdXQubG9hZDMyKGJhc2UsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKHN0cnVjdHVyZUlELCBtX291dC5sb2FkMzIoZW51
bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJl
SUQpKSwKKyAgICAgICAgICAgIHVzdWFsbHkobWF0Y2hlc1N0cnVjdHVyZUJsb2NrKSwgcmFyZWx5
KG9wZXJhdGlvbkJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obWF0Y2hlc1N0cnVj
dHVyZUJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbmFtZWRSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuYm9vbGVhblRydWUpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZCb3VuZHMsIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6VmFsdWVOdWxsKSk7CisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG9wZXJhdGlvbkJsb2NrKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgb3BlcmF0aW9u
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHVuYm94Qm9vbGVhbih2bUNhbGwoSW50NjQsIHNsb3dQYXRo
RnVuY3Rpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIHByb3BlcnR5TmFtZSwg
aW5kZXgsIG1vZGUpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgaW5Cb3VuZHNSZXN1bHQsIG91dE9mQm91
bmRzUmVzdWx0KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIG5hbWVkUmVzdWx0LCBvcGVyYXRpb25S
ZXN1bHQpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhdG9yR2VuZXJpY1Bu
YW1lKCkKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbCgpCiAgICAgewotICAgICAg
ICBMVmFsdWUgZW51bWVyYXRvciA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
IExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOwotCi0gICAgICAgIExC
YXNpY0Jsb2NrIGluQm91bmRzID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxv
Y2sgb3V0T2ZCb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBj
b250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC5iZWxvdyhpbmRleCwgbV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSksCi0gICAgICAgICAg
ICB1c3VhbGx5KGluQm91bmRzKSwgcmFyZWx5KG91dE9mQm91bmRzKSk7Ci0KLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5kcywgb3V0T2ZCb3VuZHMp
OwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIoZW51bWVyYXRvciwgbV9o
ZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvcik7
Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91bmRzUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAot
ICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5iYXNlSW5kZXgobV9oZWFwcy5KU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCBzdG9y
YWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRzLCBjb250aW51
YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9jayBvdXRPZkJvdW5kc1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlTnVsbCkpOwotICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
SW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRPZkJvdW5kc1Jlc3VsdCkpOworICAgICAgICBjb21w
aWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsKTsKICAg
ICB9Ci0gICAgCi0gICAgdm9pZCBjb21waWxlVG9JbmRleFN0cmluZygpCisKKyAgICB2b2lkIGNv
bXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoKQogICAgIHsKLSAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNl
bWFudGljKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25Ub0luZGV4U3Ry
aW5nLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBpbmRleCkpOworICAgICAgICBjb21waWxl
RW51bWVyYXRvckhhc1Byb3BlcnR5KG9wZXJhdGlvbkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrU3RydWN0dXJlSW1tZWRpYXRlKCkK
QEAgLTE3MzQ0LDcgKzE3NDY5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldEludDMyKHJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgaWYgKG1fbm9kZS0+c2hvdWxkU3BlY3VsYXRlSW50MzIoKSAmJiBjYW5TcGVjdWxhdGUpIHsK
ICAgICAgICAgICAgIHNwZWN1bGF0ZSgKICAgICAgICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1
ZSgpLCBudWxscHRyLCBtX291dC5sZXNzVGhhbihyZXN1bHQsIG1fb3V0LmludDMyWmVybykpOwpA
QCAtMjAyOTYsNiArMjA0MjEsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKICAgICB9CiAKKyAgICAvLyBUaGlzIG9ubHkgd29ya3MgZm9yIGludHMgcmlnaHQgbm93
LgorICAgIFBhdGNocG9pbnRWYWx1ZSogZGF0YUxvZ0ZvckRlYnVnZ2luZyhjb25zdCBjaGFyKiBw
cmVmaXgsIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFBhdGNocG9pbnRWYWx1ZSogcmVz
dWx0ID0gbV9vdXQucGF0Y2hwb2ludChWb2lkKTsKKyAgICAgICAgcmVzdWx0LT5lZmZlY3RzLndy
aXRlc0xvY2FsU3RhdGUgPSB0cnVlOworICAgICAgICByZXN1bHQtPmFwcGVuZCh2YWx1ZSwgVmFs
dWVSZXA6OnJlZyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBUeXBlIHZhbHVlVHlwZSA9IHZh
bHVlLT50eXBlKCk7CisgICAgICAgIHJlc3VsdC0+c2V0R2VuZXJhdG9yKFs9XSAoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IFN0YWNrbWFwR2VuZXJhdGlvblBhcmFtcyYpIHsKKyAgICAgICAgICAg
IEFsbG93TWFjcm9TY3JhdGNoUmVnaXN0ZXJVc2FnZSBhbGxvd1NjcmF0Y2goaml0KTsKKworICAg
ICAgICAgICAgaml0LnByb2JlRGVidWcoWz1dIChQcm9iZTo6Q29udGV4dCYgY29udGV4dCkgewor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT0gSW50MzIpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2dMbihwcmVmaXgsIGNvbnRleHQuZ3ByPGludDMyX3Q+KEdQUkluZm86OnJlZ1Qw
KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nTG4o
cHJlZml4LCBjb250ZXh0LmdwcjxKU1ZhbHVlPihHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAg
ICAgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHlNYXAoKSB7IHJldHVybiBtX2F2YWlsYWJp
bGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHk7IH0KICAgICAKICAgICBWTSYgdm0oKSB7IHJl
dHVybiBtX2dyYXBoLm1fdm07IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmlu
ZGV4IDJkZmRlODZmNzJiZWQ3M2Q3M2RjOGFlYjVkNGIyYjM2YzhiMjA1MGUuLmFiODI1Y2Q3ZTRl
YjAyZjg1YTAwNGFkMDVhMjBjNTEzMjVmMmE4NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPdXRwdXQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTE0NSw2ICsxNDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRJbmNv
bWluZ1RvUGhpKExWYWx1ZSBwaGksIFZhbHVlRnJvbUJsb2NrKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBQYXJhbXM+CiAgICAgdm9pZCBhZGRJbmNvbWluZ1RvUGhpKExWYWx1ZSBwaGksIFZh
bHVlRnJvbUJsb2NrLCBQYXJhbXMuLi4gdGhlUmVzdCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gUGFyYW1zPgorICAgIHZvaWQgYWRkSW5jb21pbmdUb1BoaUlmU2V0KExWYWx1ZSBwaGksIFBh
cmFtcy4uLiB0aGVSZXN0KTsKICAgICAKICAgICBMVmFsdWUgb3BhcXVlKExWYWx1ZSk7CiAKQEAg
LTQ5Myw2ICs0OTUsMTYgQEAgaW5saW5lIHZvaWQgT3V0cHV0OjphZGRJbmNvbWluZ1RvUGhpKExW
YWx1ZSBwaGksIFZhbHVlRnJvbUJsb2NrIHZhbHVlLCBQYXJhbXMuLi4KICAgICBhZGRJbmNvbWlu
Z1RvUGhpKHBoaSwgdGhlUmVzdC4uLik7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIFBhcmFt
cz4KK2lubGluZSB2b2lkIE91dHB1dDo6YWRkSW5jb21pbmdUb1BoaUlmU2V0KExWYWx1ZSBwaGks
IFBhcmFtcy4uLiB2YWx1ZXMpCit7CisgICAgYXV0byBhZGRQaGkgPSBbJl0gKFZhbHVlRnJvbUJs
b2NrIHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIGFkZEluY29taW5n
VG9QaGkocGhpLCB2YWx1ZSk7CisgICAgfTsKKyAgICAoYWRkUGhpKHZhbHVlcyksLi4uKTsKK30K
KwogQUxMT1dfVU5VU0VEX1BBUkFNRVRFUlNfRU5ECiBJR05PUkVfV0FSTklOR1NfRU5ECiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKaW5kZXggNzMxNzEwMDk2Y2YzZTI0OThh
ZTQ1ZGRhMjZhYTgyZTc5Y2Q0NmE0ZS4uNjk3ZGU4ZDk4ZjE5ZGUzOWU0MWM0MjRhYjU4NDA5ZjRm
NTE5YjA2OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wu
cmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9EU0wucmIKQEAgLTEzOCw2
ICsxMzgsNyBAQCBtb2R1bGUgRFNMCiAjaW5jbHVkZSAiR2V0QnlWYWxIaXN0b3J5LmgiCiAjaW5j
bHVkZSAiSW5zdHJ1Y3Rpb24uaCIKICNpbmNsdWRlICJJdGVyYXRpb25Nb2RlTWV0YWRhdGEuaCIK
KyNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPcGNvZGUu
aCIKICNpbmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCiAjaW5jbHVkZSAiUHV0QnlJZFN0
YXR1cy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1Jl
Z2lzdGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaApp
bmRleCA0NDQ2MzVlOTgwZDkwYWY4MzdlYmQ2M2I5NjJmYWVkZTJlYzUzNTAzLi5kODc5YzkwYmUz
MTE3ODYyMzNmNTI2YjE4M2VkZjFjYjNjN2JiMzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXIuaApAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgb3BlcmF0b3I9KENhbGxGcmFtZSop
OwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oQ29kZUJsb2NrKik7
CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU1Njb3BlKik7Ci0g
ICAgICAgIEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShKU09iamVjdCopOworICAg
ICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVyYXRvcj0oSlNDZWxsKik7CiAgICAgICAg
IEFMV0FZU19JTkxJTkUgUmVnaXN0ZXImIG9wZXJhdG9yPShFbmNvZGVkSlNWYWx1ZSk7CiAKICAg
ICAgICAgaW50MzJfdCBpKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKaW5kZXggYzU2ZWY1ZTQ1NTRjYjEwM2FiZWJl
NzJlNjI5OGY4YzQ4YWFkOTg2MC4uNTkzZWY2NjY4ZGUyZTAzYTY1OWIzOWYzMWFmNjBmODhjMjc4
Mzk4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lz
dGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdp
c3RlcklubGluZXMuaApAQCAtNjMsNyArNjMsNyBAQCBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBS
ZWdpc3Rlcjo6b3BlcmF0b3I9KENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHJldHVybiAqdGhp
czsKIH0KIAotQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShKU09i
amVjdCogb2JqZWN0KQorQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9y
PShKU0NlbGwqIG9iamVjdCkKIHsKICAgICB1LnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUob2JqZWN0KSk7CiAgICAgcmV0dXJuICp0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmgKaW5kZXggYWM4YjUxMzdkODUzNTQ1MDZhZWVkY2VkYmQxYzVi
ZDc3MjU3OWMwMS4uMGI0YzJiOWJlMGY1ZmZmMTUxYTNiMDdlOWFhMjRmY2NmOTA1MDM5OCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCkBAIC0xODgsNyAr
MTg4LDcgQEAgcHVibGljOgogICAgICAgICBzdG9yZTMyKHJlZ3MudGFnR1BSKCksIGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBUYWdPZmZzZXQp
KTsKICNlbmRpZgogICAgIH0KLSAgICAKKwogICAgIHZvaWQgbG9hZFZhbHVlKEFkZHJlc3MgYWRk
cmVzcywgSlNWYWx1ZVJlZ3MgcmVncykKICAgICB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTg4
OSw3ICs4ODksNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBicmFuY2g4KAogICAgICAgICAg
ICAgQmVsb3csIEFkZHJlc3MoY2VsbEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm90ZSB0
aGF0IGZpcnN0IGFuZCBsYXN0IGFyZSBpbmNsdXNpdmUuCiAgICAgSnVtcCBicmFuY2hJZlR5cGUo
R1BSUmVnIGNlbGxHUFIsIEpTVHlwZVJhbmdlIHJhbmdlKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAppbmRleCA0MmI4Y2FmNWY1Y2I4YzRiNWYzYWRlYjNlZGE0N2FiMjY5MGQ0OTA0
Li5jOWIwMWMwZDA1YTVkNmYwYzExZDBhMzczODFjMmQ5OGVmYTQ3MTMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCkBAIC0zMDgsMTAgKzMwOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AobmV3X2FycmF5X3dpdGhfc3By
ZWFkKQogICAgICAgICBERUZJTkVfU0xPV19PUChuZXdfYXJyYXlfYnVmZmVyKQogICAgICAgICBE
RUZJTkVfU0xPV19PUChzcHJlYWQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9lbnVtZXJh
YmxlX2xlbmd0aCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoaGFzX2VudW1lcmFibGVfcHJvcGVy
dHkpCiAgICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQotICAg
ICAgICBERUZJTkVfU0xPV19PUCh0b19pbmRleF9zdHJpbmcpCiAgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVh
dGVfc2NvcGVkX2FyZ3VtZW50cykKICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX2Nsb25l
ZF9hcmd1bWVudHMpCkBAIC0zNjUsNiArMzYyLDEwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV9pZF93aXRoX3RoaXMpCiAg
ICAgICAgIERFRklORV9PUChvcF9nZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICBERUZJTkVfT1Ao
b3BfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfbmV4dCkKKyAg
ICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5F
X09QKG9wX2VudW1lcmF0b3JfaW5fYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3ByaXZhdGVf
bmFtZSkKICAgICAgICAgREVGSU5FX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAgICBE
RUZJTkVfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTQ3MywxNCArNDc0LDYgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0
X2Zyb21fYXJndW1lbnRzKQogICAgICAgICBERUZJTkVfT1Aob3BfcHV0X3RvX2FyZ3VtZW50cykK
IAotICAgICAgICBERUZJTkVfT1Aob3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkK
LSAgICAgICAgREVGSU5FX09QKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSkK
LSAgICAgICAgREVGSU5FX09QKG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAg
ICBERUZJTkVfT1Aob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfT1Ao
b3BfZ2V0X2RpcmVjdF9wbmFtZSkKLSAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3Jfc3Ry
dWN0dXJlX3BuYW1lKQotICAgICAgICBERUZJTkVfT1Aob3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lKQotICAgICAgICAgICAgCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNr
ZW5fcHJvbG9ndWUpCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFp
bCkKIApAQCAtNTc4LDYgKzU3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNsb3dDYXNl
cygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X2J5X2lkX2RpcmVjdCkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9TTE9XQ0FT
RV9PUChvcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9P
UChvcF9nZXRfcHJpdmF0ZV9uYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bfc2V0
X3ByaXZhdGVfYnJhbmQpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9jaGVja19wcml2
YXRlX2JyYW5kKQpAQCAtNjA5LDcgKzYwMyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVNs
b3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9kZWxfYnlfdmFsKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZGVsX2J5X2lkKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3Bfc3ViKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfaGFzX2VudW1l
cmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfZnJvbV9zY29wZSkKICNlbmRpZgpAQCAt
NjQyLDExICs2MzUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAg
ICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChub3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKHN0cmljdGVxKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuc3Ry
aWN0ZXEpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9kaXJlY3RfcG5hbWUp
CiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGdldF9wcm90b3R5cGVfb2YpCi0gICAg
ICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaGFzX293bl9zdHJ1Y3R1cmVf
cHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGluX3N0cnVjdHVyZV9w
cm9wZXJ0eSkKICNpZiAhRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiAgICAgICAgIERFRklORV9T
TE9XQ0FTRV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCmluZGV4IDQ4N2E1YWM1YjhlNWQ4YTlkODBiMmM2ZDMwNmUwODE1MjFiODI4MTQuLjRkYTdh
MmZkNjZmMTUwY2ZjZDM1OTAyZmU5M2U1NGZlZDJhNWFkMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaApAQCAtNDUzLDYgKzQ1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBKU1ZhbHVlUmVncyBk
c3QpOwogICAgICAgICB2b2lkIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVy
IGRzdCwgSlNWYWx1ZVJlZ3Mgc3JjKTsKKyAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVhbFJl
Z2lzdGVyLCBjb25zdCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJh
bWVSZWdpc3Rlcik7CiAKICAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoVmly
dHVhbFJlZ2lzdGVyIHNyYyk7CiAgICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3Vi
bGUoVmlydHVhbFJlZ2lzdGVyIHNyYyk7CkBAIC00NjksNyArNDcwLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgZW1pdExvYWQyKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0
YWcxLCBSZWdpc3RlcklEIHBheWxvYWQxLCBWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFn
MiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CiAKICAgICAgICAgdm9pZCBlbWl0U3RvcmUoVmlydHVh
bFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklE
IGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1
YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFudCwgUmVnaXN0ZXJJRCBiYXNlID0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOwogICAgICAgICB2b2lkIGVtaXRTdG9yZUludDMyKFZpcnR1YWxSZWdp
c3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKICAg
ICAgICAgdm9pZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFRydXN0ZWRJbW0zMiBw
YXlsb2FkLCBib29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKICAgICAgICAgdm9pZCBlbWl0U3Rv
cmVDZWxsKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCBwYXlsb2FkLCBib29sIGluZGV4SXND
ZWxsID0gZmFsc2UpOwpAQCAtNjcwLDIxICs2NzAsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF91bmV4cGVjdGVkX2xvYWQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF91cnNoaWZ0KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX3N0cnVj
dHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0
X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShj
b25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1
cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2lu
X3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVt
aXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lk
IGVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0
cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfZ2V0X2ludGVybmFsX2ZpZWxkKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQo
Y29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
bG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX3RvX3Byb3BlcnR5X2tleShjb25zdCBJbnN0cnVjdGlvbiopOwogCisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGU+CisgICAgICAgIHZvaWQgZ2VuZXJhdGVHZXRC
eVZhbFNsb3dDYXNlKGNvbnN0IE9wY29kZVR5cGUmLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CisKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJ
bnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFs
KGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfZW51bWVyYXRv
cl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYpOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wY29kZVR5cGUsIHR5cGVu
YW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBlPgorICAgICAgICB2b2lkIGVtaXRfZW51bWVyYXRvcl9o
YXNfcHJvcGVydHlJbXBsKGNvbnN0IEluc3RydWN0aW9uKiwgY29uc3QgT3Bjb2RlVHlwZSYsIFNs
b3dQYXRoRnVuY3Rpb25UeXBlKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3JfaW5f
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJh
dG9yX2hhc19vd25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2FkZChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImKTsKQEAgLTczNSw3ICs3MzgsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lkIGVtaXRTbG93
X29wX3B1dF9wcml2YXRlX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3Bfc3ViKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwotICAgICAgICB2
b2lkIGVtaXRTbG93X29wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAKICAgICAgICAg
dm9pZCBlbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBmNmRiM2Y1OWM0YWE0ZTAyN2Ex
NTYxMWVkYmJhMjYxY2FkOGVmZWQ2Li45YmExMGVkNjc3MmZhZWMzZjIwZTYzNGJhYmUxNGFkZDlh
MTA4OTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTE2
OTIsNDYgKzE2OTIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dpdGhfc2l6ZShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAjaWYgVVNFKEpTVkFMVUU2
NCkKIAotdGVtcGxhdGUgPHR5cGVuYW1lIE9wQ29kZVR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9vcF9o
YXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q29kZVR5cGU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJl
Z1QwLCBiYXNlKTsKLQotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9zdHJ1
Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzRW51bWVyYWJsZVN0
cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8
T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
SW1wbDxPcEluU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlN
b2RlKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIo
KTsKLSAgICAKKwogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICAKKwogICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJn
dW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1
MDM0LgogICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKQEAgLTE3MzksNyAr
MTcwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZh
bEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0CiAgICAgSnVtcCBkb25lID0ganVtcCgp
OwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2ssIExpbmtC
dWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICAKKwogICAgIHBhdGNoQnVmZmVyLmxp
bmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAgICAgcGF0Y2hCdWZmZXIu
bGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogCkBAIC0xNzQ4LDcg
KzE3MTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIGJ5VmFsSW5mby0+c3R1YlJv
dXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBtX2NvZGVCbG9jaywgcGF0
Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAiQmFzZWxpbmUgaGFzX2lu
ZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZhbHVlKCkpOwotICAg
IAorCiAgICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsK
ICAgICAgICAgYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wVGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFi
ZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpOwogICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlvbiA9IG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWM7CkBAIC0xNzU4LDE3MSArMTcyNCw2IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0CiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVy
YWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRl
Y29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZTsKLSAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8obV9ieXRlY29k
ZUluZGV4KTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwg
cHJvcGVydHksIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMSk7
Ci0KLSAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAtIHdlJ3JlIHplcm8tZXh0
ZW5kaW5nIGFuIGludDMyLiBPbiB0aGUgaG90IHBhdGggdGhpcyBkb2Vzbid0IG1hdHRlci4KLSAg
ICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWludDMyIGFnYWluc3QgdGhl
IG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBpZgotICAgIC8vIG51bWJl
ciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5cyBsZXNzIHRoYW4gaW50
bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlvbgotICAgIC8vIHNpemUgaXMgYWx3YXlzIGxl
c3MgdGhhbiA0R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwgaGF2ZSBiZWVuIGNvcnJl
Y3QgKGFuZCBleHRlbmRpbmcgdGhlIHZhbHVlCi0gICAgLy8gdG8gNjQtYml0cyBpcyBuZWNlc3Nh
cnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0aW9uLiBXZSB6ZXJvIGV4
dGVuZCByYXRoZXIgdGhhbiBzaWduCi0gICAgLy8gZXh0ZW5kaW5nIHNpbmNlIGl0IG1ha2VzIGl0
IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNhc2UuCi0gICAgemVyb0V4
dGVuZDMyVG9Xb3JkKHJlZ1QxLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChy
ZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1No
YXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlN
b2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLQotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1l
bnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0
LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSwgYnlWYWxJbmZvKTsKLSAgICAKLSAgICBtb3ZlKFRy
dXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsKLQot
ICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkJhc2VsaW5lSklUKSkKLSAgICAg
ICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAg
ICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0g
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlW
YWxJbmZvLCBtX2J5dGVjb2RlSW5kZXgsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwg
cHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkg
PSBieXRlY29kZS5tX3Byb3BlcnR5OwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotCi0g
ICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKLQotICAgIENhbGwgY2FsbDsKLSAgICBpZiAoSklUQ29kZTo6dXNlRGF0YUlDKEpJ
VFR5cGU6OkJhc2VsaW5lSklUKSkgewotICAgICAgICBieVZhbEluZm8tPm1fc2xvd09wZXJhdGlv
biA9IG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQ7Ci0gICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihieVZhbEluZm8pLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbjxkZWNsdHlwZShvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0KT4o
QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBCeVZhbEluZm86Om9mZnNldE9mU2xvd09wZXJh
dGlvbigpKSwgZHN0LCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSks
IHJlZ1QwLCByZWdUMSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQs
IGRzdCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwg
cmVnVDEsIGJ5VmFsSW5mbyk7Ci0KLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBj
YWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldERp
cmVjdFBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
LSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotICAgIFZpcnR1YWxSZWdpc3RlciBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBi
YXNlIGlzIGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICAvLyBD
aGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9y
LCByZWdUMik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDEsIEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNz
IHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBh
biBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMy
KEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0
ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
LQotICAgIC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIG5lZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwot
ICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4o
b2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQs
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lPigpOwotICAg
IFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleE9mZnNldCgpKSk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNOdWxsKCkpKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91
bmRzLmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEp
OwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJ
bmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBp
bkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7Ci0KLSAg
ICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOwot
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0KLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
UHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRv
UHRyKHJlZ1QwLCByZWdUMCk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRp
bWVzRWlnaHQpLCByZWdUMCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCA0ZDc0MTI2
YmUxZTNkZTQzMGQzYTZkOWNiN2ZkZGI2ZGM4NmY3ZWI0Li5jYTMyZGMxYzU2ZTYyN2FiNmUwZTYy
NjllNTM5ODEzY2VlZTdkMGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCkBAIC0xMTQyLDQ3ICsxMTQyLDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKIH0KIAotdGVtcGxhdGUgPHR5cGVuYW1l
IE9wQ29kZVR5cGU+Ci12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1w
bChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ29kZVR5cGU+KCk7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICBlbWl0TG9hZFBh
eWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk+KGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19vd25fc3RydWN0
dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5SW1wbDxPcEhhc093blN0cnVjdHVyZVBy
b3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSW5TdHJ1Y3R1cmVQ
cm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwotICAgIAorCiAgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlOwotICAgIAorCiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCiAgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCiAgICAgSnVtcExpc3Qg
c2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJh
eU1vZGUsIGJhZFR5cGUsIG51bGxwdHIpOwpAQCAtMTE5MCw3ICsxMTU1LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBS
ZXR1cm5BZGRyZXNzUHQKICAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CiAKICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jaywgTGlua0J1ZmZlcjo6UHJvZmlsZTo6SW5s
aW5lQ2FjaGUpOwotICAgIAorCiAgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBieVZhbElu
Zm8tPnNsb3dQYXRoVGFyZ2V0KTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgYnlW
YWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAKQEAgLTExOTksMTcwICsxMTY0LDExIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0CiAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpF
X0NPREVfRk9SX1NUVUIoCiAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1
YlJvdXRpbmVQdHJUYWcsCiAgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBz
dHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0
YSgpLCByZXR1cm5BZGRyZXNzLnVudGFnZ2VkVmFsdWUoKSk7Ci0gICAgCisKICAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5tX2JhZFR5cGVKdW1wLCBDb2RlTG9jYXRp
b25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRp
b25DYWxsPFJldHVybkFkZHJlc3NQdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxSZXR1cm5B
ZGRyZXNzUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRh
Zz4ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5PigpOwotICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwotICAgIFZpcnR1YWxS
ZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9
IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgcHJvcGVydHkgPSBieXRlY29k
ZS5tX3Byb3BlcnR5OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRC
eVZhbEluZm8obV9ieXRlY29kZUluZGV4KTsKLSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKLQotICAg
IGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SW50MzIocmVnVDMpKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3Jy
ZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlz
IGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMg
YSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBm
YWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMg
YWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCi0gICAg
Ly8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcg
d2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAgICAvLyB0
byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2Fs
Y3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAvLyBleHRlbmRp
bmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNs
b3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1dvcmQocmVnVDEsIHJlZ1QxKTsKLQotICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAg
IGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJs
ZUp1bXAgYmFkVHlwZTsKLQotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlw
ZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9
IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSwg
YnlWYWxJbmZvKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotCi0gICAgYWRk
U2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVn
VDApOwotCi0gICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZUluZGV4LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUs
IGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51
bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2Ug
PSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNv
ZGUubV9wcm9wZXJ0eTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVs
IHNsb3dQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVn
VDApOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwotICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIGJ5VmFsSW5mbyk7Ci0KLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNs
b3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBk
c3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2Rl
Lm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4Owot
ICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOwot
Ci0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAotICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UpOwotCi0g
ICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9y
LCByZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0
dXJlSURPZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRM
b2FkUGF5bG9hZChpbmRleCwgcmVnVDIpOwotICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0
aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGlu
ZSBhY2Nlc3MKLSAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
SW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmpl
Y3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOwotICAgIGxvYWQzMihCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5h
c0JpdHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwg
VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDIpOwotICAgIG5lZzMyKHJlZ1QyKTsK
LSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMudGFnKSksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5h
bWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFt
ZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRMb2FkUGF5
bG9hZChpbmRleCwgcmVnVDApOwotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdU
MSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCBy
ZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9u
ZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNW
ZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVn
VDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpLCByZWdUMik7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJp
Y1BuYW1lPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdExv
YWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3Is
IHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUlu
ZGV4T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcp
LCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFt
ZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwg
cmVnVDAsIFNjYWxlUHRyKSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZWdUMik7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHJvZmlsZVR5cGU+KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDE1
ZTFkMzQ1NzliNmQ0YzhjMTcwZDIzNTBjNmMzNjQ0M2ZmZWE0MTUuLmYwNTM5NWM4MjBjNGM0OGYw
MTNjODk5ZGIwNTcxZDVmNmE3Y2IxZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAi
UHJpdmF0ZUZpZWxkUHV0S2luZC5oIgorI2luY2x1ZGUgIlByb2JlQ29udGV4dC5oIgogI2luY2x1
ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCiAjaW5j
bHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCkBAIC04NiwxMCArODcsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBlPgordm9pZCBKSVQ6OmdlbmVyYXRlR2V0
QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBlJiBieXRlY29kZSwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpZiAoaGFzQW55U2xvd0Nhc2VzKGl0ZXIp
KSB7Ci0gICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
QnlWYWw+KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsK
ICAgICAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CiAgICAgICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2FycmF5UHJvZmls
ZTsKQEAgLTEzNiw2ICsxMzcsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFMKICAgICB9CiB9
CiAKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbD4oKSwgaXRlcik7Cit9CisKICNpZiBFTkFCTEUoRVhUUkFfQ1RJX1RIVU5LUykK
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjxKSVRUaHVua1B0clRhZz4gSklUOjpzbG93X29wX2dldF9i
eV92YWxfcHJlcGFyZUNhbGxHZW5lcmF0b3IoVk0mIHZtKQogewpAQCAtMjk3Nyw2ICsyOTgzLDE5
NCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdGVtcGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0cnVjdGlvbiopOwogCit2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JOZXh0PigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7
CisgICAgVmlydHVhbFJlZ2lzdGVyIG1vZGUgPSBieXRlY29kZS5tX21vZGU7CisgICAgVmlydHVh
bFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
cHJvcGVydHlOYW1lID0gYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWU7CisgICAgVmlydHVhbFJlZ2lz
dGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2VudW1lcmF0b3I7CisKKyAgICBKdW1wTGlzdCBk
b25lOworICAgIEp1bXBMaXN0IG9wZXJhdGlvbkNhc2VzOworCisgICAgR1BSUmVnIG1vZGVHUFIg
PSByZWdUMDsKKyAgICBHUFJSZWcgaW5kZXhHUFIgPSByZWdUMTsKKyAgICBHUFJSZWcgYmFzZUdQ
UiA9IHJlZ1QyOworCisgICAgLy8gVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gbW9kZSBzZXQgd2Ug
dGVuZCB0byBzZWUsIHNvIHNwZWNpYWwgY2FzZSBpdCBpZiB3ZSBwcm9maWxlIGl0IGluIHRoZSBM
TEludC4KKyAgICBpZiAobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgPT0gSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSB7CisgICAgICAgIEdQUlJlZyBlbnVt
ZXJhdG9yR1BSID0gcmVnVDM7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVy
YXRvciwgZW51bWVyYXRvckdQUik7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFu
Y2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Om1vZGVTZXRPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih+SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKSkpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2UsIGJhc2VHUFIpOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhlbnVtZXJhdG9y
R1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBpbmRleEdQUik7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChicmFuY2gzMihOb3RF
cXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSkpOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgbW9kZUdQUik7
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAg
ICAgSnVtcCBub3RJbml0ID0gYnJhbmNoVGVzdDMyKFplcm8sIG1vZGVHUFIpOworICAgICAgICAv
LyBOZWVkIHRvIHVzZSBhZGQ2NCBzaW5jZSB0aGlzIGlzIGEgSlNWYWx1ZSBpbnQzMi4KKyAgICAg
ICAgYWRkNjQoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUik7CisgICAgICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIGluZGV4R1BSKTsKKyAgICAgICAgbm90SW5pdC5saW5rKHRoaXMp
OworICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc051bWJlcihzdGF0aWNfY2FzdDx1aW50OF90
PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSwgYWRkcmVzc0Zv
cihtb2RlKSk7CisKKyAgICAgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgaW5kZXhHUFIsIEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKyAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgZW51bWVyYXRvckdQUik7CisgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2xlYXIgdGhlIGhpZ2ggYml0cyBmcm9tIHRoZSBudW1iZXIgZW5jb2Rp
bmcuCisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMigtMSksIGluZGV4R1BSKTsKKyAgICAgICAg
bG9hZFB0cihCYXNlSW5kZXgoZW51bWVyYXRvckdQUiwgaW5kZXhHUFIsIFNjYWxlUHRyKSwgZW51
bWVyYXRvckdQUik7CisKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5h
bWUsIGVudW1lcmF0b3JHUFIpOworICAgICAgICBkb25lLmFwcGVuZChqdW1wKCkpOworCisgICAg
ICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgICAgIHN0b3JlVHJ1c3RlZFZhbHVlKGpz
TnVsbCgpLCBhZGRyZXNzRm9yKHByb3BlcnR5TmFtZSkpOworICAgICAgICBkb25lLmFwcGVuZChq
dW1wKCkpOworICAgIH0KKworICAgIG9wZXJhdGlvbkNhc2VzLmxpbmsodGhpcyk7CisKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2VudW1lcmF0b3JfbmV4dCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKworICAg
IGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRf
YnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+
KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBtb2RlID0gYnl0ZWNvZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdpc3RlciBiYXNl
ID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1f
cHJvcGVydHlOYW1lOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5tX2Fy
cmF5UHJvZmlsZTsKKworICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKKworICAgIGF1dG8gcmVzdWx0
R1BSID0gcmVnVDA7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG1vZGUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHByb3BlcnR5TmFtZSwgcmVnVDEpOworCisgICAgb3I4KHJlZ1QyLCBBYnNv
bHV0ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisKKyAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAvLyBUaGlzIGlzIGFsd2F5cyBh
biBpbnQzMiBlbmNvZGVkIHZhbHVlLgorICAgIEp1bXAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlID0g
YnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJp
Y01vZGUpKTsKKworICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDMpOworICAgIEp1bXAgc3RydWN0dXJl
TWlzbWF0Y2ggPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIEFkZHJlc3MocmVnVDIsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpOworCisgICAg
Ly8gQ29tcHV0ZSB0aGUgb2Zmc2V0LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgs
IHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBj
YWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisgICAgSnVt
cCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zm
c2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGlu
ZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEp
OworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVzdWx0
R1BSKTsKKworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIE90aGVyd2lz
ZSBpdCdzIG91dCBvZiBsaW5lCisgICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmsodGhpcyk7CisgICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdU
MCk7CisgICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpj
YWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOworICAgIG5lZzMyKHJlZ1QxKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAgIGludDMyX3Qgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHko
Zmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbG9h
ZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSksIHJlc3VsdEdQUik7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAg
c3RydWN0dXJlTWlzbWF0Y2gubGluayh0aGlzKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1vZGVTdHJ1Y3R1cmVN
aXNtYXRjaCksICZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSk7CisKKyAgICBpc05vdE93
blN0cnVjdHVyZU1vZGUubGluayh0aGlzKTsKKyAgICBKdW1wIGlzTm90SW5kZXhlZCA9IGJyYW5j
aFRlc3QzMihaZXJvLCByZWdUMiwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6SW5kZXhlZE1vZGUpKTsKKyAgICAvLyBSZXBsYWNlIHRoZSBzdHJpbmcgd2l0aCB0aGUgaW5k
ZXguCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDEpOworCisgICAgaXNO
b3RJbmRleGVkLmxpbmsodGhpcyk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxs
KHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eU5hbWUsIHJlZ1QxKTsKKworICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIEpJVFR5cGU6OkJhc2VsaW5lSklULCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVJbmRleCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZUluZGV4KSwgQWNjZXNzVHlwZTo6R2V0
QnlWYWwsIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
SlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEpTVmFsdWVSZWdzKHJlc3Vs
dEdQUiksIHJlZ1QyKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgaWYg
KCFKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKQorICAgICAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkU2xvd0Nh
c2UoKTsKKyAgICBtX2dldEJ5VmFscy5hcHBlbmQoZ2VuKTsKKworICAgIGRvbmVDYXNlcy5saW5r
KHRoaXMpOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShtZXRhZGF0YSwgSlNWYWx1ZVJl
Z3MocmVzdWx0R1BSKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit7CisgICAgZ2VuZXJhdGVHZXRCeVZhbFNsb3dDYXNlKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCksIGl0ZXIpOworfQorCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3Bjb2RlVHlwZSwgdHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIEpJ
VDo6ZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgT3Bjb2RlVHlwZSYgYnl0ZWNvZGUsIFNsb3dQYXRoRnVu
Y3Rpb25UeXBlIGdlbmVyYWxDYXNlKQoreworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29k
ZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAg
ICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9kZTsKKworICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIobW9kZSwgcmVnVDApOwor
ICAgIG9yOChyZWdUMCwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRh
ZGF0YSkpOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUp
KSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICBtb3Zl
KFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlZ1QwKTsK
KyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgc2xvd0Nhc2VzLmxpbmsodGhpcyk7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgZ2VuZXJhbENhc2UpOworICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3Vy
cmVudEluc3RydWN0aW9uLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckluQnlW
YWw+KCksIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRfZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JI
YXNPd25Qcm9wZXJ0eT4oKSwgc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7
Cit9CisKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpCiAKIHZvaWQgSklUOjplbWl0V3JpdGVCYXJy
aWVyKFZpcnR1YWxSZWdpc3RlciBvd25lciwgVmlydHVhbFJlZ2lzdGVyIHZhbHVlLCBXcml0ZUJh
cnJpZXJNb2RlIG1vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCA1OGU1ZDUyZmU1YjA4YWUyOWUzZTVkZGRlM2Q3
NDY3OTY3ZjIzMDE5Li43NWQwYmQ3ZjZlZjM1Yzc2MjczMTNmMjZiYTY1YTE2OGQ4M2I5NDU2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAKQEAgLTE1MDUsNiArMTUwNSwzNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfaW50
ZXJuYWxfZmllbGQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogdGVt
cGxhdGUgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsPihjb25zdCBJbnN0
cnVjdGlvbiopOwogCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3Jf
bmV4dCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOworICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lbnVtZXJhdG9yX2dldF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfZW51bWVyYXRvcl9pbl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKKyAgICBzbG93
UGF0aENhbGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2hhc19v
d25fcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
c2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CisgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNWQUxV
RTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtCmluZGV4IDM3YjZkZjMwZjEwYzNhMDAxYTU2NTVlYTFiYjFkYjU5NTczY2Y2
MDguLmU3MTgzYTcyYTM2OGYxYTI4MDQ2ODRkMmIwNzY0N2YyMjA2OGYxMjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAg
LTE5OTIsMTkgKzE5OTIsMTQgQEAgc2xvd1BhdGhPcChjcmVhdGVfZ2VuZXJhdG9yKQogc2xvd1Bh
dGhPcChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQogc2xvd1BhdGhPcChkZWZpbmVfYWNjZXNzb3Jf
cHJvcGVydHkpCiBzbG93UGF0aE9wKGRlZmluZV9kYXRhX3Byb3BlcnR5KQotc2xvd1BhdGhPcChl
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpCi1zbG93UGF0aE9wKGVudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKQogc2xvd1BhdGhPcChnZXRfYnlfdmFsX3dpdGhfdGhpcykKLXNsb3dQYXRoT3AoZ2V0
X2RpcmVjdF9wbmFtZSkKLXNsb3dQYXRoT3AoZ2V0X2VudW1lcmFibGVfbGVuZ3RoKQogc2xvd1Bh
dGhPcChnZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLXNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVf
aW5kZXhlZF9wcm9wZXJ0eSkKLXNsb3dQYXRoT3AoaGFzX2VudW1lcmFibGVfcHJvcGVydHkpCitz
bG93UGF0aE9wKGVudW1lcmF0b3JfbmV4dCkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9nZXRfYnlf
dmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2luX2J5X3ZhbCkKK3Nsb3dQYXRoT3AoZW51bWVy
YXRvcl9oYXNfb3duX3Byb3BlcnR5KQogCiBpZiBub3QgSlNWQUxVRTY0Ci0gICAgc2xvd1BhdGhP
cChoYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgc2xvd1BhdGhPcChoYXNf
b3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICBzbG93UGF0aE9wKGluX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKICAgICBzbG93UGF0aE9wKGdldF9wcm90b3R5cGVfb2YpCiBlbmQKIApAQCAtMjAyMSw3
ICsyMDE2LDYgQEAgc2xvd1BhdGhPcChyZXNvbHZlX3Njb3BlX2Zvcl9ob2lzdGluZ19mdW5jX2Rl
Y2xfaW5fZXZhbCkKIHNsb3dQYXRoT3Aoc3ByZWFkKQogc2xvd1BhdGhPcChzdHJjYXQpCiBzbG93
UGF0aE9wKHRocm93X3N0YXRpY19lcnJvcikKLXNsb3dQYXRoT3AodG9faW5kZXhfc3RyaW5nKQog
c2xvd1BhdGhPcCh0eXBlb2YpCiBzbG93UGF0aE9wKHR5cGVvZl9pc19vYmplY3QpCiBzbG93UGF0
aE9wKHR5cGVvZl9pc19mdW5jdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KaW5kZXggYmQ4ODU1ZWJmZDZmYzE5YjE1
YzFiNTg4NmQ0ZmE1NTY0MzgyZDg3ZC4uOGE1ZjdkMjNlNjQ3NjNiYTI1OWUxYjJjNWQ4N2Y4ZDE2
YjgyOWFkYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KQEAgLTMxNDEsMzQgKzMxNDEsNiBAQCBsbGludE9wKG9wX2xv
Z19zaGFkb3dfY2hpY2tlbl90YWlsLCBPcExvZ1NoYWRvd0NoaWNrZW5UYWlsLCBtYWNybyAoc2l6
ZSwgZ2V0LCBkaQogICAgIGRpc3BhdGNoKCkKIGVuZCkKIAotbWFjcm8gaGFzU3RydWN0dXJlUHJv
cGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybiwgc2xvd1BhdGhDYWxsKQotICAg
IGdldChtX2Jhc2UsIHQwKQotICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUoc2l6ZSwgdDAsIHQx
KQotICAgIGJ0cW56IHQxLCBub3RDZWxsTWFzaywgLnNsb3dQYXRoCi0KLSAgICBsb2FkVmFyaWFi
bGUoZ2V0LCBtX2VudW1lcmF0b3IsIHQwKQotICAgIGxvYWRpIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVJ
RFt0MV0sIHQxCi0gICAgYmluZXEgdDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bV9jYWNo
ZWRTdHJ1Y3R1cmVJRFt0MF0sIC5zbG93UGF0aAotCi0gICAgcmV0dXJuKFZhbHVlVHJ1ZSkKLQot
LnNsb3dQYXRoOgotICAgIGNhbGxTbG93UGF0aChzbG93UGF0aENhbGwpCi0gICAgZGlzcGF0Y2go
KQotZW5kCi0KLWxsaW50T3BXaXRoUmV0dXJuKG9wX2hhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9w
cm9wZXJ0eSwgT3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBn
ZXQsIGRpc3BhdGNoLCByZXR1cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUs
IGdldCwgZGlzcGF0Y2gsICByZXR1cm4sIF9zbG93X3BhdGhfaGFzX2VudW1lcmFibGVfc3RydWN0
dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9wV2l0aFJldHVybihvcF9oYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eSwgT3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdl
dCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwg
Z2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0aF9oYXNfb3duX3N0cnVjdHVyZV9wcm9w
ZXJ0eSkKLWVuZCkKLQotbGxpbnRPcFdpdGhSZXR1cm4ob3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5
LCBPcEluU3RydWN0dXJlUHJvcGVydHksIG1hY3JvIChzaXplLCBnZXQsIGRpc3BhdGNoLCByZXR1
cm4pCi0gICAgaGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKHNpemUsIGdldCwgZGlzcGF0Y2gsICBy
ZXR1cm4sIF9zbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCiBvcChmdXp6
ZXJfcmV0dXJuX2Vhcmx5X2Zyb21fbG9vcF9oaW50LCBtYWNybyAoKQogICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCB0MAogICAgIGxvYWRwIENvZGVCbG9jazo6bV9nbG9iYWxPYmplY3RbdDBdLCB0
MApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAKaW5kZXggMTEyOTU0YmI5YjZlNTAxMzY4ODNiNzQ1NmNiMWU4MzE4ZmI1YTUxMS4uNmZmYjU2
MmI3NWIwYWNiMDU5YjA0YzM5YzY1NTIxMDNkMTg4NDllMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCkBAIC05NjIsMTYxICs5NjIs
MTM4IEBAIEpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfdG9fcHJvcGVydHlf
a2V5KQogICAgIFJFVFVSTihHRVRfQyhieXRlY29kZS5tX3NyYykuanNWYWx1ZSgpLnRvUHJvcGVy
dHlLZXlWYWx1ZShnbG9iYWxPYmplY3QpKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpCitKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yKQogewogICAgIEJFR0lO
KCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldEVudW1lcmFibGVMZW5ndGg+KCk7
Ci0gICAgSlNWYWx1ZSBlbnVtZXJhdG9yVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpz
VmFsdWUoKTsKLSAgICBpZiAoZW51bWVyYXRvclZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgIFJFVFVSTihqc051bWJlcigwKSk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxP
cEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAgIGlmIChiYXNlVmFsdWUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgUkVUVVJOKHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRv
cigpKTsKIAotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2Fz
dDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihlbnVtZXJhdG9yVmFsdWUuYXNDZWxsKCkpOwor
ICAgIEpTT2JqZWN0KiBiYXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Cisg
ICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNOdW1iZXIoZW51bWVyYXRvci0+
aW5kZXhlZExlbmd0aCgpKSk7CisgICAgUkVUVVJOKHByb3BlcnR5TmFtZUVudW1lcmF0b3IoZ2xv
YmFsT2JqZWN0LCBiYXNlKSk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSkKK0pTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KQogewogICAgIEJFR0lOKCk7Ci0g
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk+
KCk7CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JOZXh0PigpOwogICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKLSAgICBKU09i
amVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgbWV0YWRhdGEubV9h
cnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZShiYXNlLT5zdHJ1Y3R1cmUodm0pKTsKLSAgICBB
U1NFUlQocHJvcGVydHkuaXNVSW50MzJBc0FueUludCgpKTsKLSAgICBSRVRVUk4oanNCb29sZWFu
KGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIHByb3BlcnR5LmFzVUlu
dDMyQXNBbnlJbnQoKSkpKTsKLX0KKyAgICBSZWdpc3RlciYgbW9kZVJlZ2lzdGVyID0gR0VUKGJ5
dGVjb2RlLm1fbW9kZSk7CisgICAgUmVnaXN0ZXImIGluZGV4UmVnaXN0ZXIgPSBHRVQoYnl0ZWNv
ZGUubV9pbmRleCk7CisgICAgUmVnaXN0ZXImIG5hbWVSZWdpc3RlciA9IEdFVChieXRlY29kZS5t
X3Byb3BlcnR5TmFtZSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
aGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0gICAg
YXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4o
KTsKLSAgICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgp
LnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNW
YWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAg
UkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0jaWYgVVNFKEpTVkFMVUUzMl82
NCkKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1
ZSgpLmFzQ2VsbCgpKTsKLSAgICBpZiAoYmFzZS0+c3RydWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVt
ZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQotICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRy
dWUpKTsKLSNlbmRpZgotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhwcm9wZXJ0eSk7
Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmpl
Y3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+
aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpOwotfQor
ICAgIGF1dG8gbW9kZSA9IHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9k
ZT4obW9kZVJlZ2lzdGVyLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICB1aW50MzJfdCBpbmRl
eCA9IGluZGV4UmVnaXN0ZXIuanNWYWx1ZSgpLmFzVUludDMyKCk7CiAKLUpTQ19ERUZJTkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCi17Ci0g
ICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSGFzT3duU3RydWN0dXJl
UHJvcGVydHk+KCk7Ci0gICAgSlNWYWx1ZSBiYXNlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5q
c1ZhbHVlKCk7Ci0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihH
RVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlmIChi
YXNlLmlzQ2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51
bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0
cnVlKSk7Ci0jZW5kaWYKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3Ig
PSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVy
YXRvcikuanNWYWx1ZSgpKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVChieXRlY29kZS5t
X2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBBU1NFUlQoIWJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKTsKKyAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmpl
Y3QpOworICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxl
Lm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNlLT5zdHJ1Y3R1cmVJRCgpKTsKIAotICAgIEpTVmFsdWUg
cHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBh
c1N0cmluZyhwcm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRl
bnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIEpTU3RyaW5nKiBuYW1lID0gZW51bWVyYXRvci0+
Y29tcHV0ZU5leHQoZ2xvYmFsT2JqZWN0LCBiYXNlLCBpbmRleCwgbW9kZSk7CiAgICAgQ0hFQ0tf
RVhDRVBUSU9OKCk7CiAKLSAgICBSRVRVUk4oanNCb29sZWFuKG9iamVjdFByb3RvdHlwZUhhc093
blByb3BlcnR5KGdsb2JhbE9iamVjdCwgYmFzZSwgcHJvcGVydHlOYW1lKSkpOworICAgIG1ldGFk
YXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOwor
ICAgIG1vZGVSZWdpc3RlciA9IGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpKTsK
KyAgICBpbmRleFJlZ2lzdGVyID0ganNOdW1iZXIoaW5kZXgpOworICAgIG5hbWVSZWdpc3RlciA9
IG5hbWUgPyBuYW1lIDoganNOdWxsKCk7CisgICAgRU5EKCk7CiB9CiAKLUpTQ19ERUZJTkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KQorSlNDX0RFRklO
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dldF9ieV92YWwpCiB7CiAg
ICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wSW5TdHJ1Y3R1cmVQcm9w
ZXJ0eT4oKTsKLSAgICBKU1ZhbHVlIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFs
dWUoKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlmIChiYXNlLmlz
Q2VsbCgpICYmIGJhc2UuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSktPmlkKCkgPT0gZW51bWVyYXRv
ci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkKLSAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7
Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkp
LmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAg
ICBSRVRVUk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVj
dCwgYmFzZSwgYXNTdHJpbmcocHJvcGVydHkpKSkpOwotfQorICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBH
RVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1Zh
bHVlKCkuYXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0g
c3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5
dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsKKyAgICB1bnNpZ25lZCBpbmRleCA9IEdF
VChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNJbnQzMigpOworICAgIHN3aXRjaCAobW9k
ZSkgeworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZTogewor
ICAgICAgICBpZiAoTElLRUxZKGJhc2VWYWx1ZS5pc0NlbGwoKSkpCisgICAgICAgICAgICBtZXRh
ZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3RydWN0dXJlSUQoYmFzZVZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQo
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5kZXgpKSk7CisgICAgfQorICAg
IGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlOiB7CisgICAg
ICAgIGlmIChMSUtFTFkoYmFzZVZhbHVlLmlzQ2VsbCgpKSAmJiBiYXNlVmFsdWUuYXNDZWxsKCkt
PnN0cnVjdHVyZUlEKCkgPT0gZW51bWVyYXRvci0+Y2FjaGVkU3RydWN0dXJlSUQoKSkgeworICAg
ICAgICAgICAgLy8gV2UnbGwgb25seSBtYXRjaCB0aGUgc3RydWN0dXJlIElEIGlmIHRoZSBiYXNl
IGlzIGFuIG9iamVjdC4KKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IGVudW1lcmF0b3ItPmVu
ZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgoKSk7CisgICAgICAgICAgICBSRVRVUk5fUFJPRklMRUQo
YmFzZVZhbHVlLmdldE9iamVjdCgpLT5nZXREaXJlY3QoaW5kZXggPCBlbnVtZXJhdG9yLT5jYWNo
ZWRJbmxpbmVDYXBhY2l0eSgpID8gaW5kZXggOiBpbmRleCAtIGVudW1lcmF0b3ItPmNhY2hlZElu
bGluZUNhcGFjaXR5KCkgKyBmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhIHw9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SGFzU2Vlbk93blN0cnVjdHVyZU1v
ZGVTdHJ1Y3R1cmVNaXNtYXRjaCk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KIAotSlND
X0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9wcm9wZXJ0
eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNFbnVt
ZXJhYmxlUHJvcGVydHk+KCk7Ci0gICAgSlNPYmplY3QqIGJhc2UgPSBHRVRfQyhieXRlY29kZS5t
X2Jhc2UpLmpzVmFsdWUoKS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQ
VElPTigpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSku
anNWYWx1ZSgpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0cmluZygpKTsKLSAgICBKU1N0cmlu
Zyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAgIGF1dG8gcHJvcGVydHlOYW1lID0g
c3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVDS19FWENFUFRJT04o
KTsKLSAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKLX0KKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsKKyAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc0NlbGwoKSAm
JiBtb2RlICE9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkKKyAg
ICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9ic2VydmVTdHJ1Y3R1cmVJRChiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAgICAgICBKU1N0cmluZyogc3RyaW5n
ID0gYXNTdHJpbmcoR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKS5qc1ZhbHVlKCkpOworICAg
ICAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVj
dCk7CisgICAgICAgIC8vIFRPRE8gRG9lcyB0aGlzIGFjdHVhbGx5IGV2ZXIgdGhyb3c/IElzbid0
IHN0cmluZyBiYWNrZWQgYnkgYSBVVUlEPworICAgICAgICBDSEVDS19FWENFUFRJT04oKTsKKyAg
ICAgICAgUkVUVVJOX1BST0ZJTEVEKGJhc2VWYWx1ZS5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0
eU5hbWUpKTsKKyAgICB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhf
Z2V0X2RpcmVjdF9wbmFtZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBw
Yy0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9D
KGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIEpTVmFsdWUgcHJvcGVydHkgPSBHRVQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1N0
cmluZygpKTsKLSAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcocHJvcGVydHkpOwotICAg
IGF1dG8gcHJvcGVydHlOYW1lID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsK
LSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBSRVRVUk4oYmFzZVZhbHVlLmdldChnbG9iYWxP
YmplY3QsIHByb3BlcnR5TmFtZSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH07CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcikKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9pbl9ieV92YWwpCiB7CiAgICAgQkVHSU4oKTsKLSAg
ICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9yPigpOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKTsKICAgICBKU1Zh
bHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIGlm
IChiYXNlVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgUkVUVVJOKHZtLmVtcHR5
UHJvcGVydHlOYW1lRW51bWVyYXRvcigpKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCku
YXNVSW50MzIoKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4obW9kZSk7CiAKLSAgICBKU09iamVjdCogYmFzZSA9IGJhc2VWYWx1ZS50
b09iamVjdChnbG9iYWxPYmplY3QpOwogICAgIENIRUNLX0VYQ0VQVElPTigpOworICAgIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIGlm
IChhdXRvKiBiYXNlID0gYmFzZVZhbHVlLmdldE9iamVjdCgpKSB7CisgICAgICAgIGlmIChtb2Rl
ID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSAmJiBiYXNlLT5z
dHJ1Y3R1cmVJRCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAg
ICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKIAotICAgIFJFVFVSTihwcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yKGdsb2JhbE9iamVjdCwgYmFzZSkpOwotfQotCi1KU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKQotewotICAgIEJF
R0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
bmFtZT4oKTsKLSAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nh
c3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvciku
anNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAgICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5t
X2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzJBc0FueUludCgpOworICAgICAgICBpZiAobW9kZSA9
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKQorICAgICAgICAgICAgUkVU
VVJOKGpzQm9vbGVhbihiYXNlLT5oYXNQcm9wZXJ0eShnbG9iYWxPYmplY3QsIEdFVChieXRlY29k
ZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50MzIoKSkpKTsKKyAgICB9CiAKLSAgICBKU1N0cmlu
ZyogcHJvcGVydHlOYW1lID0gbnVsbHB0cjsKLSAgICBpZiAoaW5kZXggPCBlbnVtZXJhdG9yLT5l
bmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkpCi0gICAgICAgIHByb3BlcnR5TmFtZSA9IGVudW1l
cmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOwotICAgIFJFVFVSTihwcm9wZXJ0eU5h
bWUgPyBwcm9wZXJ0eU5hbWUgOiBqc051bGwoKSk7CisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFz
U3RyaW5nKEdFVChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICBSRVRV
Uk4oanNCb29sZWFuKENvbW1vblNsb3dQYXRoczo6b3BJbkJ5VmFsKGdsb2JhbE9iamVjdCwgYmFz
ZVZhbHVlLCBzdHJpbmcsICZtZXRhZGF0YS5tX2FycmF5UHJvZmlsZSkpKTsKIH0KIAotSlNDX0RF
RklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUp
CitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293
bl9wcm9wZXJ0eSkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8
T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOwotICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0
ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIHVpbnQzMl90IGlu
ZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJbnQzMkFzQW55SW50KCk7
CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eT4o
KTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1
ZSgpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsK
KyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1v
ZGU+KEdFVChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAgICBtZXRh
ZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Pihtb2RlKTsK
IAotICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBudWxscHRyOwotICAgIGlmIChlbnVtZXJh
dG9yLT5lbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgPD0gaW5kZXggJiYgaW5kZXggPCBlbnVt
ZXJhdG9yLT5lbmRHZW5lcmljUHJvcGVydHlJbmRleCgpKQotICAgICAgICBwcm9wZXJ0eU5hbWUg
PSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKLSAgICBSRVRVUk4ocHJv
cGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkpOwotfQorICAgIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAgIGlmIChhdXRv
KiBiYXNlID0gYmFzZVZhbHVlLmdldE9iamVjdCgpKSB7CisgICAgICAgIGlmIChtb2RlID09IEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSAmJiBiYXNlLT5zdHJ1Y3R1
cmVJRCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVyZUlEKCkpCisgICAgICAgICAgICBS
RVRVUk4oanNCb29sZWFuKHRydWUpKTsKIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNs
b3dfcGF0aF90b19pbmRleF9zdHJpbmcpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wVG9JbmRleFN0cmluZz4oKTsKLSAgICBKU1ZhbHVlIGluZGV4VmFsdWUg
PSBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpOwotICAgIEFTU0VSVChpbmRleFZhbHVl
LmlzVUludDMyQXNBbnlJbnQoKSk7Ci0gICAgUkVUVVJOKGpzU3RyaW5nKHZtLCBJZGVudGlmaWVy
Ojpmcm9tKHZtLCBpbmRleFZhbHVlLmFzVUludDMyQXNBbnlJbnQoKSkuc3RyaW5nKCkpKTsKKyAg
ICAgICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkK
KyAgICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzT3duUHJvcGVydHkoZ2xvYmFs
T2JqZWN0LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkpKSk7Cisg
ICAgfQorCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKEdFVChieXRlY29kZS5tX3By
b3BlcnR5TmFtZSkuanNWYWx1ZSgpKTsKKyAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+
dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhDRVBUSU9OKCk7CisgICAg
UkVUVVJOKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmpl
Y3QsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lKSkpOwogfQogCiBKU0NfREVGSU5FX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX3Byb2ZpbGVfdHlwZV9jbGVhcl9sb2cpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCmluZGV4IGQ4ZDE1MDFmYjM1
YmFjMjc5NGM2ZDk0MTAyNzFiYjY4ZjRjYzA1N2UuLmE1ZTAxNWQ1M2E2OWU2MDUzYWY0ZGJiMzFi
MmM4ZjI1N2MwZGIxZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oCkBAIC0yNTQsMTcgKzI1NCwxMSBAQCBKU0NfREVDTEFSRV9DT01NT05f
U0xPV19QQVRIKHNsb3dfcGF0aF9pc19jb25zdHJ1Y3Rvcik7CiBKU0NfREVDTEFSRV9DT01NT05f
U0xPV19QQVRIKHNsb3dfcGF0aF9zdHJjYXQpOwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFU
SChzbG93X3BhdGhfdG9fcHJpbWl0aXZlKTsKIEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX3RvX3Byb3BlcnR5X2tleSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRI
KHNsb3dfcGF0aF9nZXRfZW51bWVyYWJsZV9sZW5ndGgpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSk7Ci1KU0Nf
REVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1
cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFz
X2VudW1lcmFibGVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93
X3BhdGhfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NM
T1dfUEFUSChzbG93X3BhdGhfaW5fc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpOwogSlNDX0RFQ0xBUkVf
Q09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpOwotSlND
X0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRv
cl9nZW5lcmljX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRo
X3RvX2luZGV4X3N0cmluZyk7CitKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9lbnVtZXJhdG9yX25leHQpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3Bh
dGhfZW51bWVyYXRvcl9nZXRfYnlfdmFsKTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk7CiBKU0NfREVDTEFS
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVfY2xlYXJfbG9nKTsKIEpT
Q19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3VucmVhY2hhYmxlKTsKIEpTQ19E
RUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25t
ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNl
ZEZ1enplckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNl
ZEZ1enplckFnZW50LmNwcAppbmRleCBlMmNhMTYyZTBiNTRlMjVjZjA2OWVlYThjODdlMWVlYTJl
NGNkNWJlLi4xYjAzMTMwZjBhNWMwN2MzMzVjYzU4NTY4M2JiNjQ1ZWU1M2UwOGJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdl
bnQuY3BwCkBAIC05MCw3ICs5MCw2IEBAIFNwZWN1bGF0ZWRUeXBlIEZpbGVCYXNlZEZ1enplckFn
ZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssCiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKLSAgICBjYXNlIG9w
X2dldF9kaXJlY3RfcG5hbWU6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2FzZSBvcF9j
b25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudEJh
c2UuY3BwCmluZGV4IGYxMzlkNGE0NDdiMjcwZjllZDMzZjdkZmQzNWUwMmFmZmMzMWM3MDMuLjE3
MGYxYTYwZGFiYjI1NjcxYzBlZDZjZDM3NWMwYjliMTI4ZDE2NjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1enplckFnZW50QmFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2VkRnV6emVyQWdlbnRCYXNl
LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01Miw3ICs1Miw3IEBAIE9wY29kZUlEIEZpbGVCYXNlZEZ1enplckFnZW50QmFzZTo6b3Bj
b2RlQWxpYXNGb3JMb29rdXBLZXkoY29uc3QgT3Bjb2RlSUQmIG9wY29kCiB7CiAgICAgaWYgKG9w
Y29kZUlkID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJZCA9PSBvcF9jYWxsX2V2YWwgfHwg
b3Bjb2RlSWQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2FsbF92YXJh
cmdzKQogICAgICAgICByZXR1cm4gb3BfY2FsbDsKLSAgICBpZiAob3Bjb2RlSWQgPT0gb3BfZ2V0
X2RpcmVjdF9wbmFtZSB8fCBvcGNvZGVJZCA9PSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcykKKyAg
ICBpZiAob3Bjb2RlSWQgPT0gb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsIHx8IG9wY29kZUlkID09
IG9wX2dldF9ieV92YWxfd2l0aF90aGlzKQogICAgICAgICByZXR1cm4gb3BfZ2V0X2J5X3ZhbDsK
ICAgICBpZiAob3Bjb2RlSWQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MpCiAgICAgICAgIHJldHVy
biBvcF9jb25zdHJ1Y3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKaW5kZXggMjRmY2YwODE1ZTI1MDQ5NWUwMzE3OTRhMDZlNGIzMTA1Yzc4
NGZiNC4uMTVmNWIwNjRlY2JmYzY1OGE5OTBkMmViNTk2MzViZjJiZGJlODg4MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApAQCAtMTQ2
MSw2ICsxNDYxLDEwIEBAIGNhcGl0YWxOYW1lICMjIENvbnN0cnVjdG9yKiBsb3dlck5hbWUgIyMg
Q29uc3RydWN0b3IgPSBmZWF0dXJlRmxhZyA/IGNhcGl0YWxOYW1lCiAgICAgICAgIH0pOwogI2Vu
ZGlmCiAKKyAgICBtX2xpbmtUaW1lQ29uc3RhbnRzW3N0YXRpY19jYXN0PHVuc2lnbmVkPihMaW5r
VGltZUNvbnN0YW50OjplbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IpXS5pbml0TGF0ZXIoW10g
KGNvbnN0IEluaXRpYWxpemVyPEpTQ2VsbD4mIGluaXQpIHsKKyAgICAgICAgaW5pdC5zZXQoaW5p
dC52bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CisgICAgfSk7CisKICAgICBpZiAo
T3B0aW9uczo6ZXhwb3NlUHJvZmlsZXJzT25HbG9iYWxPYmplY3QoKSkgewogI2lmIEVOQUJMRShT
QU1QTElOR19QUk9GSUxFUikKICAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJfX2VuYWJsZVNhbXBsaW5nUHJvZmlsZXIiKSwg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgZW5hYmxlU2FtcGxpbmdQ
cm9maWxlciksIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSB8IFByb3BlcnR5QXR0cmlidXRl
OjpEb250RGVsZXRlIHwgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuY3BwCmluZGV4IDIxYzcwYTI3YjY5MWJlMDU2OTBhMmZhZTc3YzY5OTEyYWVlYzExOWQuLjk4
MmFhNDdjNjU2MzczMzY5NGIzMGYxOTZiODkxYjQ1OWZmMjNlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmNwcApAQCAtNDksMTMgKzQ5LDE5IEBAIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0CiAKIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIHVpbnQzMl90IGluZGV4ZWRMZW5ndGgsIHVpbnQzMl90IG51bWJl
clN0cnVjdHVyZVByb3BlcnRpZXMsIFdyaXRlQmFycmllcjxKU1N0cmluZz4qIHByb3BlcnR5TmFt
ZXNCdWZmZXIsIHVuc2lnbmVkIHByb3BlcnR5TmFtZXNTaXplKQogICAgIDogSlNDZWxsKHZtLCB2
bS5wcm9wZXJ0eU5hbWVFbnVtZXJhdG9yU3RydWN0dXJlLmdldCgpKQotICAgICwgbV9wcm9wZXJ0
eU5hbWVzKHZtLCB0aGlzLCBwcm9wZXJ0eU5hbWVzQnVmZmVyKQogICAgICwgbV9jYWNoZWRTdHJ1
Y3R1cmVJRChzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlkKCkgOiAwKQogICAgICwgbV9pbmRleGVk
TGVuZ3RoKGluZGV4ZWRMZW5ndGgpCiAgICAgLCBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgo
bnVtYmVyU3RydWN0dXJlUHJvcGVydGllcykKICAgICAsIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXgocHJvcGVydHlOYW1lc1NpemUpCiAgICAgLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KHN0cnVj
dHVyZSA/IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSA6IDApCisgICAgLCBtX3Byb3BlcnR5
TmFtZXModm0sIHRoaXMsIHByb3BlcnR5TmFtZXNCdWZmZXIpCiB7CisgICAgaWYgKG1faW5kZXhl
ZExlbmd0aCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGU7CisgICAgaWYgKG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCkKKyAgICAg
ICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9k
ZTsKKyAgICBpZiAobV9lbmRHZW5lcmljUHJvcGVydHlJbmRleCAtIG1fZW5kU3RydWN0dXJlUHJv
cGVydHlJbmRleCkKKyAgICAgICAgbV9tb2RlU2V0IHw9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6R2VuZXJpY01vZGU7CiB9CiAKIHZvaWQgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIFJlZlB0cjxQcm9wZXJ0eU5hbWVBcnJheURhdGE+JiYgaWRlbnRp
ZmllcnMpCkBAIC0xNDgsNCArMTU0LDcwIEBAIHZvaWQgZ2V0RW51bWVyYWJsZVByb3BlcnR5TmFt
ZXMoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIFByCiAgICAg
fQogfQogCitKU1N0cmluZyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjb21wdXRlTmV4dChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU09iamVjdCogYmFzZSwgdWludDMyX3QmIGlu
ZGV4LCBNb2RlJiBtb2RlLCBib29sIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcpCit7
CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNM
QVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEFTU0VSVChpbmRleGVkTGVuZ3RoKCkgfHwgc2l6
ZU9mUHJvcGVydHlOYW1lcygpKTsKKworICAgIGluZGV4Kys7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBJbml0TW9kZTogeworICAgICAgICBtb2RlID0gSW5kZXhlZE1vZGU7CisgICAg
ICAgIGluZGV4ID0gMDsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorCisgICAgY2FzZSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOiB7CisgICAgICAgIHdoaWxlIChp
bmRleCA8IGluZGV4ZWRMZW5ndGgoKSAmJiAhYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGds
b2JhbE9iamVjdCwgaW5kZXgpKSB7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAg
c2NvcGUuYXNzZXJ0Tm9FeGNlcHRpb24oKTsKKworICAgICAgICBpZiAoaW5kZXggPCBpbmRleGVk
TGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gc2hvdWxkQWxsb2NhdGVJbmRleGVkTmFtZVN0
cmluZyA/IGpzU3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3RyaW5nKCkp
IDogbnVsbHB0cjsKKworICAgICAgICBpZiAoIXNpemVPZlByb3BlcnR5TmFtZXMoKSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIG1vZGUgPSBPd25TdHJ1Y3R1cmVNb2Rl
OworICAgICAgICBpbmRleCA9IDA7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIH0KKworICAg
IGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlOgorICAgIGNh
c2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTogeworICAgICAgICBKU1N0
cmluZyogbmFtZSA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICBpZiAoaW5kZXggPj0gc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAg
ICAgICAgICAgaWYgKCFuYW1lKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
aWYgKGluZGV4IDwgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpICYmIGJhc2UtPnN0cnVjdHVy
ZUlEKCkgPT0gY2FjaGVkU3RydWN0dXJlSUQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGF1dG8gaWQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBuYW1lLT52YWx1
ZShnbG9iYWxPYmplY3QpKTsKKyAgICAgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0aW9uKCk7
CisgICAgICAgICAgICBpZiAoYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVj
dCwgaWQpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAgICAgICAgICBuYW1lID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUuYXNzZXJ0Tm9FeGNl
cHRpb24oKTsKKworICAgICAgICBpZiAoaW5kZXggPj0gZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eCgpICYmIGluZGV4IDwgc2l6ZU9mUHJvcGVydHlOYW1lcygpKQorICAgICAgICAgICAgbW9kZSA9
IEdlbmVyaWNNb2RlOworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oCmluZGV4IDAyMDExZDQxYzdmNjZkYWQ4ODNhZThkNzcwYjVkM2QyODZjZDUwODcuLmQ0
Njg1MDQ5YWEzOTAwYzAxNWUwNDQzNjMxNTI0OWJhODAyODVmOGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
CkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiSlNDYXN0LmgiCiAjaW5jbHVkZSAiT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlQ2hhaW4uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTM3LDYgKzM3LDE3IEBAIHB1YmxpYzoKICAgICB1c2luZyBCYXNlID0gSlNDZWxsOwogICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1
cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKKyAgICBlbnVtIE1vZGUgOiB1aW50OF90
IHsKKyAgICAgICAgSW5pdE1vZGUgPSAwLAorICAgICAgICBJbmRleGVkTW9kZSA9IDEgPDwgMCwK
KyAgICAgICAgT3duU3RydWN0dXJlTW9kZSA9IDEgPDwgMSwKKyAgICAgICAgR2VuZXJpY01vZGUg
PSAxIDw8IDIsCisgICAgICAgIC8vIFByb2ZpbGluZyBPbmx5CisgICAgICAgIEhhc1NlZW5Pd25T
dHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2ggPSAxIDw8IDMsCisgICAgfTsKKworICAgIHN0
YXRpYyBjb25zdGV4cHIgdWludDhfdCBlbnVtZXJhdGlvbk1vZGVNYXNrID0gKEdlbmVyaWNNb2Rl
IDw8IDEpIC0gMTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIENlbGxUeXBlLCBTdWJzcGFjZUFj
Y2VzcyBtb2RlPgogICAgIHN0YXRpYyBJc29TdWJzcGFjZSogc3Vic3BhY2VGb3IoVk0mIHZtKQog
ICAgIHsKQEAgLTc0LDE2ICs4NSwyMCBAQCBwdWJsaWM6CiAgICAgdWludDMyX3QgZW5kR2VuZXJp
Y1Byb3BlcnR5SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
OyB9CiAgICAgdWludDMyX3QgY2FjaGVkSW5saW5lQ2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBt
X2NhY2hlZElubGluZUNhcGFjaXR5OyB9CiAgICAgdWludDMyX3Qgc2l6ZU9mUHJvcGVydHlOYW1l
cygpIGNvbnN0IHsgcmV0dXJuIGVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KCk7IH0KKyAgICB1aW50
MzJfdCBtb2RlU2V0KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlU2V0OyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fY2FjaGVkU3RydWN0dXJlSUQpOyB9CiAgICAg
c3RhdGljIHB0cmRpZmZfdCBpbmRleGVkTGVuZ3RoT2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9pbmRleGVkTGVuZ3RoKTsgfQogICAg
IHN0YXRpYyBwdHJkaWZmX3QgZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGVuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciwgbV9lbmRHZW5lcmljUHJvcGVydHlJbmRleCk7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IGNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eSk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG1vZGVTZXRPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX21vZGVTZXQpOyB9CiAgICAgc3RhdGlj
IHB0cmRpZmZfdCBjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkKICAgICB7CiAgICAg
ICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX3By
b3BlcnR5TmFtZXMpOwogICAgIH0KIAorICAgIEpTU3RyaW5nKiBjb21wdXRlTmV4dChKU0dsb2Jh
bE9iamVjdCosIEpTT2JqZWN0KiBiYXNlLCB1aW50MzJfdCYgY3VycmVudEluZGV4LCBNb2RlJiwg
Ym9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nID0gdHJ1ZSk7CisKICAgICBERUNM
QVJFX1ZJU0lUX0NISUxEUkVOOwogCiBwcml2YXRlOgpAQCAtOTIsMTMgKzEwNywxNCBAQCBwcml2
YXRlOgogICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcihWTSYsIFN0cnVjdHVyZSosIHVpbnQz
Ml90LCB1aW50MzJfdCwgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiosIHVuc2lnbmVkKTsKICAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgUmVmUHRyPFByb3BlcnR5TmFtZUFycmF5RGF0YT4mJik7
CiAKLSAgICBBdXhpbGlhcnlCYXJyaWVyPFdyaXRlQmFycmllcjxKU1N0cmluZz4qPiBtX3Byb3Bl
cnR5TmFtZXM7Ci0gICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZUNoYWluPiBtX3Byb3RvdHlwZUNo
YWluOwogICAgIFN0cnVjdHVyZUlEIG1fY2FjaGVkU3RydWN0dXJlSUQ7CiAgICAgdWludDMyX3Qg
bV9pbmRleGVkTGVuZ3RoOwogICAgIHVpbnQzMl90IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eDsKICAgICB1aW50MzJfdCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4OwogICAgIHVpbnQzMl90
IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7CisgICAgdWludDMyX3QgbV9tb2RlU2V0IHsgMCB9Owor
ICAgIEF1eGlsaWFyeUJhcnJpZXI8V3JpdGVCYXJyaWVyPEpTU3RyaW5nPio+IG1fcHJvcGVydHlO
YW1lczsKKyAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlQ2hhaW4+IG1fcHJvdG90eXBlQ2hhaW47
CiB9OwogCiB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIHVpbnQzMl90JiBpbmRleGVkTGVuZ3RoLCB1
aW50MzJfdCYgc3RydWN0dXJlUHJvcGVydHlDb3VudCk7CkBAIC0xMzQsNyArMTUwLDEwIEBAIGlu
bGluZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgICAgIG51bWJlclN0cnVjdHVyZVByb3BlcnRpZXMg
PSAwOwogICAgIH0KIAotICAgIGVudW1lcmF0b3IgPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNyZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5nUHJvcGVydHlOYW1lcywgaW5kZXhlZExl
bmd0aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywgV1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7
CisgICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmICFwcm9wZXJ0eU5hbWVzLnNpemUoKSkKKyAgICAg
ICAgZW51bWVyYXRvciA9IHZtLmVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcigpOworICAgIGVs
c2UKKyAgICAgICAgZW51bWVyYXRvciA9IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y3JlYXRl
KHZtLCBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5hbWVzLCBpbmRleGVkTGVuZ3RoLCBu
dW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzLCBXVEZNb3ZlKHByb3BlcnR5TmFtZXMpKTsKICAgICBp
ZiAoIWluZGV4ZWRMZW5ndGggJiYgc3VjY2Vzc2Z1bGx5Tm9ybWFsaXplZENoYWluICYmIHN0cnVj
dHVyZUFmdGVyR2V0dGluZ1Byb3BlcnR5TmFtZXMgPT0gc3RydWN0dXJlKSB7CiAgICAgICAgIGVu
dW1lcmF0b3ItPnNldENhY2hlZFByb3RvdHlwZUNoYWluKHZtLCBzdHJ1Y3R1cmUtPnByb3RvdHlw
ZUNoYWluKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogICAgICAgICBpZiAoc3RydWN0dXJlLT5jYW5D
YWNoZVByb3BlcnR5TmFtZUVudW1lcmF0b3Iodm0pKQpAQCAtMTQzLDQgKzE2Miw2IEBAIGlubGlu
ZSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIHByb3BlcnR5TmFtZUVudW1lcmF0b3IoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iCiAgICAgcmV0dXJuIGVudW1lcmF0b3I7CiB9CiAKK3VzaW5nIEVu
dW1lcmF0b3JNZXRhZGF0YSA9IHN0ZDo6dW5kZXJseWluZ190eXBlX3Q8SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpNb2RlPjsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdl
bnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVh
dGluZ0Z1enplckFnZW50LmNwcAppbmRleCBjZGNmYTk5ZDQ5YTY5MTc0MDFkNjgzMTY4YmExOWFi
ZGViYWU5YTRkLi5jN2E4ZTMxZjdlNDdiZDY5MTFmZTRhYzQ1ZmRmNzdkNjgzOTY0MTA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0
aW5nRnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
ZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxOS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBTcGVjdWxh
dGVkVHlwZSBQcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVyQWdlbnQ6OmdldFByZWRpY3Rpb25J
bnRlcm5hbChDb2RlQmxvYwogICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgogICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpczoKICAgICBjYXNlIG9wX2dldF9ieV92YWxfd2l0aF90aGlzOgotICAg
IGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZToKKyAgICBjYXNlIG9wX2VudW1lcmF0b3JfZ2V0X2J5
X3ZhbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJh
cmdzOgogICAgIGNhc2Ugb3BfY2FsbDoKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIv
SlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzVkNDA1OTAxZGQyM2JhMzMyOGY3ZjIxYWU2NGZmZjZm
OTEyMzU0My4uNzg4YjFmMTFkZWEyYTU3OGEzMGYwNmM5NGVlYmQzMzVlMDA3MDc4NiAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw0MSBAQAorMjAyMS0wOC0wNSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNv
bT4KKworICAgICAgICBmb3ItaW4gc2hvdWxkIG9ubHkgZW1pdCBvbmUgbG9vcCBpbiBieXRlY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI3OTg5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtaWNy
b2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS13aXRoLW93bi1uYW1lZC5qczogQWRkZWQu
CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJs
ZS1hcnJheS5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNo
bWFya3MvZm9yLWluLWdldHRlcnMuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAg
ICogbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1hcnJheS13aXRoLW93bi1uYW1lZC5qczog
QWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWlu
LWludDMyLWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIG1pY3Jv
YmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLWFuZC1nZXR0ZXJz
LmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9m
b3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHRl
c3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgtb3duLW5h
bWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bSk6CisgICAgICAgIChvcGFxdWVTZXQpOgorICAg
ICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4tc3RyaW5nLWFycmF5LmpzOiBBZGRlZC4KKyAg
ICAgICAgKHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1h
cnJheS1tYXAtc2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKHN1bSk6CisgICAgICAgIChsZXQuZ2Vu
ZXJhdG9yKToKKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanM6CisgICAgICAg
ICh0ZXN0KToKKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5q
czoKKyAgICAgICAgKiBzdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzOgor
ICAgICAgICAqIHN0cmVzcy9mb3ItaW4tcHJpbWl0aXZlLWluZGV4LW9uLXByb3RvdHlwZS5qczog
QWRkZWQuCisgICAgICAgICogc3RyZXNzL2Zvci1pbi10ZXN0cy5qczoKKyAgICAgICAgKiBzdHJl
c3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanM6
CisgICAgICAgICh0ZXN0NSk6CisKIDIwMjEtMDgtMDIgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtp
QGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBZYXJyIEJveWVyTW9vcmUgc2VhcmNoIHNob3Vs
ZCBzdXBwb3J0IGNoYXJhY3Rlci1jbGFzcwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNo
bWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS13aXRoLW93bi1uYW1lZC5qcyBiL0pTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2Zvci1pbi1kb3VibGUtYXJyYXktd2l0aC1vd24tbmFtZWQuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjU4YmY0M2ZlNWFmMGZmMWQzMDEzOGJhNzdlMzczODA0NzQzNWM5NQotLS0gL2Rldi9u
dWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1kb3VibGUtYXJyYXktd2l0
aC1vd24tbmFtZWQuanMKQEAgLTAsMCArMSwxNCBAQAorZnVuY3Rpb24gdGVzdChvYmplY3QpIHsK
KyAgICBzdW0gPSAwOworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0gKz0g
b2JqZWN0W2ldOworICAgIHJldHVybiBzdW07Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9yIChs
ZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHZhciBvID0gQXJyYXkoMTAwKS5maWxsKDEu
MTIzMjE0MjMxKTsKKyAgICBvLmEgPSAwOworICAgIG8uYiA9ICJzdXJwcmlzZSBzdHJpbmciOwor
ICAgIHRlc3Qobyk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3It
aW4tZG91YmxlLWFycmF5LmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJs
ZS1hcnJheS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGEwYzNjNzFkNmU2OTEwNThhMzFkYWNiYjUwNjZmZjI0
YTQwNWJiCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWlu
LWRvdWJsZS1hcnJheS5qcwpAQCAtMCwwICsxLDEwIEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkg
eworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSAr
PSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3Ig
KGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHRlc3QoQXJyYXkoMTAwKS5maWxsKDEuMTIz
MTI0MSkpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWdldHRl
cnMuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZ2V0dGVycy5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4yNGZhMzY0ODYwYTZiMDA5ZGEzMTg4OTUyMzA4YzUzMGUwMDJiMWZhCi0tLSAvZGV2L251
bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWdldHRlcnMuanMKQEAgLTAs
MCArMSwxNSBAQAorZnVuY3Rpb24gdGVzdChvYmplY3QpIHsKKyAgICBzdW0gPSAwOworICAgIGZv
ciAodmFyIGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJldHVy
biBzdW07Cit9Citub0lubGluZSh0ZXN0KTsKKworbGV0IG8gPSB7IH07CitPYmplY3QuZGVmaW5l
UHJvcGVydHkobywgInByb3RvVmFsdWUiLCB7IGdldCgpIHsgcmV0dXJuICJzdHJpbmciOyB9LCBl
bnVtZXJhYmxlOiB0cnVlIH0pOworT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sICJwcm90b1ZhbHVl
MiIsIHsgZ2V0KCkgeyByZXR1cm4gInN0cmluZzEiOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0pOwor
T2JqZWN0LmRlZmluZVByb3BlcnR5KG8sICJwcm90b1ZhbHVlMyIsIHsgZ2V0KCkgeyByZXR1cm4g
InN0cmluZzIiOyB9LCBlbnVtZXJhYmxlOiB0cnVlIH0pOworCitmb3IgKGxldCBpID0gMDsgaSA8
IDFlNTsgKytpKQorICAgIHRlc3Qobyk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9mb3ItaW4taW50MzItYXJyYXktd2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXktd2l0aC1vd24tbmFtZWQuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNGUyZGRiZDJmMDVkYjRlY2NlOWZkOWJhNDU2OWY2YjA2MjRhYTEzNwotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1hcnJheS13aXRoLW93
bi1uYW1lZC5qcwpAQCAtMCwwICsxLDE0IEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAg
IHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmpl
Y3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBp
ID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgdmFyIG8gPSBBcnJheSgxMDApLmZpbGwoMSk7Cisg
ICAgby5hID0gMDsKKyAgICBvLmIgPSAyOworICAgIHRlc3Qobyk7Cit9CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXkuanMgYi9KU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItYXJyYXkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJhZTVjMWI0
MjU4OTQ2NjBkOTY5ODM1ZTRmNGNkNmE4MWVlZDUxMAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1hcnJheS5qcwpAQCAtMCwwICsxLDE1IEBA
CisKK3ZhciBjb3VudCA9IDA7CitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7
CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07Cisg
ICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCisKK3ZhciBhcnJheSA9IG5ldyBB
cnJheSgxMDApOworYXJyYXkuZmlsbCgxKTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kp
CisgICAgdGVzdChhcnJheSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9m
b3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLWFuZC1nZXR0ZXJzLmpzIGIvSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC1hbmQt
Z2V0dGVycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWVmN2ViZGQyNDMyOTQ0ZmRlYjE0ZmFmZjhiNDI2ZGM0
NDYzYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWlu
LWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC1hbmQtZ2V0dGVycy5qcwpAQCAtMCwwICsxLDE1
IEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIg
aSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsK
K30KK25vSW5saW5lKHRlc3QpOworCitPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LnByb3Rv
dHlwZSwgInByb3RvVmFsdWUiLCB7IGdldCgpIHsgcmV0dXJuICJzdHJpbmciOyB9LCBlbnVtZXJh
YmxlOiB0cnVlIH0pOwordmFyIG8gPSB7IGxlbmd0aDogMTAwIH0KK0FycmF5LnByb3RvdHlwZS5m
aWxsLmNhbGwobywgMSk7CitvLmEgPSAwOworby5iID0gMjsKK2ZvciAobGV0IGkgPSAwOyBpIDwg
MWU1OyArK2kpCisgICAgdGVzdChvKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2Zvci1pbi1pbnQzMi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanMgYi9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc1NzBmZDBmNTE2ZGNkNTc1NWIzZjJlYjk2OWM5ODliNTE1ZDc2YzQKLS0tIC9kZXYvbnVs
bAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgt
b3duLW5hbWVkLmpzCkBAIC0wLDAgKzEsMTcgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7Cisg
ICAgc3VtID0gMDsKKyAgICBmb3IgKHZhciBpIGluIG9iamVjdCkgeworICAgICAgICB2YXIgdiA9
IG9iamVjdFtpXTsKKyAgICAgICAgc3VtICs9IHY7CisgICAgfQorICAgIHJldHVybiBzdW07Cit9
Citub0lubGluZSh0ZXN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAg
IHZhciBvID0geyBsZW5ndGg6IDEwMCB9OworICAgIEFycmF5LnByb3RvdHlwZS5maWxsLmNhbGwo
bywgMSk7CisgICAgby5hID0gMDsKKyAgICBvLmIgPSAyOworICAgIHRlc3Qobyk7Cit9CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgtb3duLW5h
bWVkLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLW9iamVjdC13aXRoLW93bi1u
YW1lZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NWY0ZTBmNDYwMDJlYTg4MDQyNGE4ODRlMjJjNDBhYzIzOGFm
ZTVhCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLW9i
amVjdC13aXRoLW93bi1uYW1lZC5qcwpAQCAtMCwwICsxLDE3IEBACitmdW5jdGlvbiBzdW0obykg
eworICAgIGxldCBzdW0gPSAwOworICAgIGZvciAobGV0IHAgaW4gbykKKyAgICAgICAgc3VtICs9
IG9bcF07CisgICAgcmV0dXJuIHN1bTsKK30KKworZnVuY3Rpb24gb3BhcXVlU2V0KG8pIHsKKyAg
ICBvLnogPSAzOworfQorCitsZXQgb2JqZWN0ID0geyB4OiAxLCB5OiAyIH07CitvcGFxdWVTZXQo
b2JqZWN0KTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICBpZiAoc3VtKG9i
amVjdCkgIT09IDYpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHN1bSIpOworfQpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLXN0cmluZy1hcnJheS5qcyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1zdHJpbmctYXJyYXkuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjcyNzRmYmMxMzkwMmE2OTFhMjI4ZWU3ZmM2M2Y3NTAyZWI4YThhYwotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1zdHJpbmctYXJyYXkuanMKQEAg
LTAsMCArMSwxMCBAQAorZnVuY3Rpb24gdGVzdChvYmplY3QpIHsKKyAgICBzdW0gPSAiIjsKKyAg
ICBmb3IgKHZhciBpIGluIG9iamVjdCkKKyAgICAgICAgc3VtICs9IG9iamVjdFtpXTsKKyAgICBy
ZXR1cm4gc3VtOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1
OyArK2kpCisgICAgdGVzdChBcnJheSgxMDApLmZpbGwoImEiKSk7CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL21pY3JvYmVuY2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1hcnJheS1tYXAtc2V0LmpzIGIvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLW9mLWl0ZXJhdGUtYXJyYXktbWFwLXNldC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40NWQ0YTAyNDQyODljNzJlYWM4YTZhYjMyZDA5NzBmNTgyZmVmNTY2Ci0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLW9mLWl0ZXJhdGUtYXJyYXkt
bWFwLXNldC5qcwpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBzdW0ob2JqKSB7CisgICAgbGV0
IHJlc3VsdCA9IDA7CisgICAgZm9yIChsZXQgeCBvZiBvYmopIHsKKyAgICAgICAgaWYgKHR5cGVv
ZiB4ID09ICJudW1iZXIiKQorICAgICAgICAgICAgcmVzdWx0ICs9IHg7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlc3VsdCArPSB4WzBdOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorbm9JbmxpbmUoc3VtKTsKKworbGV0IGFycmF5ID0gWzEsMiwzLDQsNV07CitsZXQgc2V0ID0g
bmV3IFNldChhcnJheSk7CitsZXQgbWFwID0gbmV3IE1hcChhcnJheS5tYXAoeCA9PiBbeCwgeF0p
KTsKK2xldCBnZW5lcmF0b3IgPSBmdW5jdGlvbiogKGFycmF5KSB7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBhcnJheS5sZW5ndGg7ICsraSkKKyAgICAgICAgeWllbGQgYXJyYXlbaV07Cit9CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICBpZiAoc3VtKHNldCkgIT09IDE1
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKKyAgICBpZiAoc3VtKGdlbmVyYXRvcihhcnJh
eSkpICE9PSAxNSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL3N0cmVzcy9mb3ItaW4tYXJyYXktbW9kZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1p
bi1hcnJheS1tb2RlLmpzCmluZGV4IDkwMDJiOTQwYWQ1OTZiNzU0ODFmMDI1NDBlNTBhYzllOWNi
YjUwODguLjNkMmRhNjM5ZDgxMGY4YWI5N2EzZTI2OWZhZTEwNzIxMGI1Y2U3NWMgMTAwNjQ0Ci0t
LSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzCisrKyBiL0pTVGVzdHMvc3Ry
ZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzCkBAIC0yNiw4ICsyNiw5IEBACiB2YXIgZnVuY0FyZ0Fu
ZEJvZHlTdHIgPQogIihhcnIpIHsiICsgIlxuIiArCiAiICAgIHZhciBzdW0gPSAwOyIgKyAiXG4i
ICsKLSIgICAgZm9yICh2YXIgaSBpbiBhcnIpIiArICJcbiIgKworIiAgICBmb3IgKHZhciBpIGlu
IGFycikgeyIgKyAiXG4iICsKICIgICAgICAgIHN1bSArPSBhcnJbaV07IiArICJcbiIgKworIiAg
ICB9ICIgKwogIiAgICByZXR1cm4gc3VtOyIgKyAiXG4iICsKICJ9IjsKIApAQCAtNzUsNiArNzYs
NyBAQCBmdW5jdGlvbiB0ZXN0KG5hbWUsIGRhdGEpIHsKIAogICAgICAgICBpZiAoKGFjdHVhbCAh
PSBleHBlY3RlZCkgJiYgKGFjdHVhbCAhPSBwcmV2aW91c1Jlc3VsdCkpIHsKICAgICAgICAgICAg
IHByaW50KCJGQUlMOiAiICsgbmFtZSArICI6IGV4cGVjdGVkOiAiICsgZXhwZWN0ZWQgKyAiLCBh
Y3R1YWw6ICIgKyBhY3R1YWwgKyAiLCBzdGFydGluZyBAIGxvb3AgaXRlcmF0aW9uICIgKyBpKTsK
KyAgICAgICAgICAgICR2bS5icmVha3BvaW50KCk7CiAgICAgICAgICAgICBwcmV2aW91c1Jlc3Vs
dCA9IGFjdHVhbDsKICAgICAgICAgICAgIGZhaWxlZCA9IHRydWU7CiAgICAgICAgICAgICBudW1i
ZXJPZkZhaWx1cmVzKys7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1y
ZWFzc2lnbmVkLWxhdGVyLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWJhc2UtcmVhc3NpZ25l
ZC1sYXRlci5qcwppbmRleCA4MzExNWI0OTczYzgzN2NhNmQzZmYwNmVhNmZmMTMxYzM0NTExZTYy
Li4wOWY4MWQ5NTY1M2JhYTE1MDZlNWRkYTA2MmZhMmUzNWYxNThiZjMxIDEwMDY0NAotLS0gYS9K
U1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpzCisrKyBiL0pTVGVz
dHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMKQEAgLTE0LDUgKzE0LDUg
QEAgbm9JbmxpbmUoZm9vKTsKIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewogICAg
IHZhciByZXN1bHQgPSBmb28oezA6MCwgMToxLCBhOjIsIGI6M30pOwogICAgIGlmIChyZXN1bHQg
IT0gNykKLSAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogfQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzIGIv
SlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzCmluZGV4IDVh
ZDM1NjZmZDBkMzYxMDI1YTFlNWYzMzY1ZDBiYWQzNzRkNTEyMDIuLmQxMTQ2OTMxYjE0NzVkODhj
NDczOTQ5ZWFkYTJkZGEwZmQzOTMwYTUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Zvci1p
bi1kZWxldGUtZHVyaW5nLWl0ZXJhdGlvbi5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4t
ZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMKQEAgLTEyLDggKzEyLDkgQEAKICAgICB9OwogICAg
IG5vSW5saW5lKGZvbyk7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Ci0g
ICAgICAgIGlmIChmb28oKSAhPT0gIjEyMzUiKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJiYWQgcmVzdWx0Iik7CisgICAgICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPT0gIjEyMzUiKQorICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgcmVz
dWx0IGdvdDogIiArIHJlc3VsdCk7CiAgICAgfQogICAgIGZvbyhudWxsKTsKIH0pKCk7CkBAIC0z
Niw4ICszNyw5IEBACiAgICAgfTsKICAgICBub0lubGluZShmb28pOwogICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgewotICAgICAgICBpZiAoZm9vKCkgIT09ICJ4eiIpCi0gICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGZvbygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAieHoiKQorICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJiYWQgcmVzdWx0OiAiICsgcmVzdWx0KTsKICAgICB9CiB9KSgpOwogKGZ1
bmN0aW9uKCkgewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXByaW1pdGl2ZS1p
bmRleC1vbi1wcm90b3R5cGUuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcHJpbWl0aXZlLWlu
ZGV4LW9uLXByb3RvdHlwZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZWEzZDI5MzQyMWJmMzQ4NjkxZWY3MGM5
Njk1YjY4OWM1OWFmYmZkCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWlu
LXByaW1pdGl2ZS1pbmRleC1vbi1wcm90b3R5cGUuanMKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rp
b24gdGVzdCh2KSB7CisgICAgbGV0IHN1bSA9IDA7CisgICAgZm9yICh2YXIgcCBpbiB2KQorICAg
ICAgICBzdW0gKz0gdltwXTsKKyAgICByZXR1cm4gc3VtOworfQorCitOdW1iZXIucHJvdG90eXBl
WzJdID0gNDsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICBpZiAodGVzdCgw
KSAhPT0gNCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CisKK1N0cmluZy5wcm90b3R5
cGVbMl0gPSA1OworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHZhciByZXN1
bHQgPSB0ZXN0KCIiKTsKKyAgICBpZiAocmVzdWx0ICE9PSA1KQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoKTsKKworICAgIHJlc3VsdCA9IHRlc3QoImEiKTsKKyAgICBpZiAocmVzdWx0ICE9PSAi
MGE1IikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3N0cmVzcy9mb3ItaW4tdGVzdHMuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tdGVzdHMuanMK
aW5kZXggMmU0ZDZiODQyYTI0MmViNzE1OTg2MDBlZTUyOGFlMTRiOWM4OWNlNC4uNjg5NjA5ODE4
NTFlZTM0NGUzYWE3ZjUzMjMxNTFiMjI1MWY2NWQ5MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJl
c3MvZm9yLWluLXRlc3RzLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwpA
QCAtMTA1LDYgKzEwNSw3IEBAIGZ1bmN0aW9uIHNob3VsZFRocm93U3ludGF4RXJyb3Ioc2NyaXB0
KSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQiKTsKICAgICB9CiB9
KSgpOworCiAoZnVuY3Rpb24oKSB7CiAgICAgdmFyIGZvbyA9IGZ1bmN0aW9uKGEsIGIpIHsKICAg
ICAgICAgZm9yICh2YXIgcCBpbiBiKSB7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9oYXMt
b3duLXByb3BlcnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qcyBiL0pTVGVz
dHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3Ru
ZXNzLmpzCmluZGV4IDk5YzU5YWMxMDU2OGNlOGE3OTA4NTIyOTgyMDZmZGM3ZTBlMGY4OWMuLmUw
YWRlMDcxYTJlNGI4ZDAyNzhkOTVjYzkzM2UyNGYxOGJiZWUwNTggMTAwNjQ0Ci0tLSBhL0pTVGVz
dHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3Ru
ZXNzLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2hhcy1vd24tcHJvcGVydHktc3RydWN0dXJlLWZv
ci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzCkBAIC0xMzIsNyArMTMyLDEwIEBAIGZ1bmN0aW9uIHRl
c3Q1KCkgewogICAgIG8uX19wcm90b19fID0gcDsKIAogICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MTAwMDsgKytpKSB7Ci0gICAgICAgIGFzc2VydChjb3VudChvKSA9PT0gMCk7CisgICAgICAgIHZh
ciBjID0gY291bnQobyk7CisgICAgICAgIGlmIChjKQorICAgICAgICAgICAgcHJpbnQoYyk7Cisg
ICAgICAgIGFzc2VydChjID09PSAwKTsKICAgICB9CiB9CiB0ZXN0NSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>435135</attachid>
            <date>2021-08-07 13:21:08 -0700</date>
            <delta_ts>2021-08-07 16:11:30 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-227989-20210807162107.patch</filename>
            <type>text/plain</type>
            <size>391054</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgwNjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MTUxZmJmZTMzNzc1YjQ4ZmUxMTczOWVmOGJhN2NkZWUwZmMyNGJlLi40N2Y3NTQyNDY2ZTY3NTEz
MGNlNjQ0NGRmNGZjMWE5OWVmOGRlNjVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNzYgQEAKKzIwMjEtMDgtMDcgIEtlaXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBs
ZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3VsZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0
ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
Nzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhp
cyBwYXRjaCByZWRlc2lnbnMgaG93IHdlIGltcGxlbWVudCBmb3ItaW4gbG9vcHMuIEJlZm9yZSB0
aGlzIHBhdGNoIHdlIHdvdWxkIGVtaXQgdGhyZWUgY29waWVzIG9mIHRoZSBmb3ItaW4gbG9vcCBi
b2R5LiBPbmUgZm9yIHRoZSBpbmRleGVkIHByb3BlcnRpZXMsIG9uZSBmb3IgdGhlIG5hbWVkLW93
biBwcm9wZXJ0aWVzLCBhbmQgb25lIGZvciBnZW5lcmljIHByb3BlcnRpZXMgKGFueXRoaW5nIGVs
c2UpLiBUaGlzIGhhZCBhIGNvdXBsZSBvZiBwcm9ibGVtcy4gRmlyc3RseSwgaXQgbWVhbnQgYnl0
ZWNvZGUgc2l6ZSBncmV3IGV4cG9uZW50aWFsbHkgdG8gbnVtYmVyIG9mIG5lc3RlZCBmb3ItaW4g
bG9vcHMuIFRoaXMgaW4gdHVybiBtZWFudCBERkcvRlRMIGNvbXBpbGF0aW9uIHRvb2sgbXVjaCBs
b25nZXIuCisKKyAgICAgICAgR29pbmcgb2ZmIG91ciBleHBlcmllbmNlIHdpdGggZmFzdCBmb3It
b2YsIHRoaXMgcGF0Y2ggdHVybnMgZm9yLWluIGxvb3BzIHNwZWNpYWxpemF0aW9ucyBpbnRvCisg
ICAgICAgIGEgImZ1c2VkIiBvcGNvZGUgdGhhdCBpbnRlcm5hbGx5IHN3aXRjaGVzIG9uIHRoZSBl
bnVtZXJhdGlvbiBtb2RlIGl0IGN1cnJlbnRseSBzZWVzLiBGb3IgZXhhbXBsZSwgaWYgd2UgYXJl
IGVudW1lcmF0aW5nIGFuIG93bi1uYW1lZCBwcm9wZXJ0eSwgdGhlIG5ldyBlbnVtZXJhdG9yX2dl
dF9ieV92YWwgYnl0ZWNvZGUgd2lsbCBjaGVjayB0aGUgZW51bWVyYXRvciBjZWxsJ3MgY2FjaGVk
IHN0cnVjdHVyZSBtYXRjaGVzIHRoZSBiYXNlJ3MgdGhlbiBsb2FkIHRoZSBwcm9wZXJ0eSBvZmZz
ZXQgZGlyZWN0bHkuCisKKyAgICAgICAgVGhlcmUgYXJlIGZvdXIgbmV3IG9wY29kZXMgdGhpcyBw
YXRjaCBhZGRzLCB3aGljaCByZXBsYWNlIHRoZSB2YXJpb3VzIG9wZXJhdGlvbnMgd2UgaGFkIGZv
ciB0aGUgc3BlY2lhbGl6ZWQgbG9vcHMgcHJldmlvdXNseS4gVGhlIG5ldyBvcGNvZGVzIGFyZSBF
bnVtZXJhdG9yR2V0QnlWYWwsIEVudW1lcmF0b3JJbkJ5VmFsLCBFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHksIGFuZCBFbnVtZXJhdG9yTmV4dC4gVGhlIGZpcnN0IHRocmVlIGNvcnJlc3BvbmQgdG8g
R2V0QnlWYWwsIEluQnlWYWwsIGFuZCBIYXNPd25Qcm9wZXJ0eSByZXNwZWN0aXZlbHkuIFRoZSBF
bnVtZXJhdG9yTmV4dCBvcGNvZGUgaGFzIHRocmVlIHJlc3VsdHMgaW4gYnl0ZWNvZGUsIHRoZSBu
ZXh0IGVudW1lcmF0aW9uIHZhbHVlJ3MgbW9kZSwgdGhlIGluZGV4IG9mIHRoZSBwcm9wZXJ0eSBu
YW1lLCBhbmQgdGhlIHByb3BlcnR5IG5hbWUgc3RyaW5nIGl0c2VsZi4gV2hlbiBlbnVtZXJhdGlv
biBpcyBkb25lIEVudW1lcmF0b3JOZXh0IHJldHVybnMgSlMgbnVsbCBhcyB0aGUgcHJvcGVydHkg
bmFtZSBzdHJpbmcuIFNpbmNlIHRoZSBERkcgZG9lc24ndCBzdXBwb3J0IHR1cGxlcyB5ZXQgdGhp
cyBvcGNvZGUgaXMgc3BpbHQgaW50byBmb3VyIG5ldyBub2Rlcy4gVGhlIGZpcnN0IGNvbXB1dGVz
IHRoZSB1cGRhdGVkIGluZGV4IGFuZCBtb2RlIGZvciB0aGUgbmV4dCBlbnVtZXJhdGlvbiBrZXks
IHdoaWNoIGlzIGVuY29kZWQgaW50byBhIHNpbmdsZSBKUyBudW1iZXIuIFRoZW4gdGhlcmUgYXJl
IHR3byBub2RlcyB0aGF0IGV4dHJhY3QgdGhlIG1vZGUgYW5kIGluZGV4LiBGaW5hbGx5LCB0aGUg
bGFzdCBuZXcgbm9kZSBwcm9kdWNlcyB0aGUgcHJvcGVydHkgbmFtZSBzdHJpbmcgb3IgbnVsbCBi
YXNlZCBvbiB0aGUgZXh0cmFjdGVkIG1vZGUgYW5kIGluZGV4LgorCisgICAgICAgIFNpbmNlLCBp
biBtb3N0IGJlbmNobWFya3MsIGFueSBnaXZlbiBlbnVtZXJhdGlvbiBvcGNvZGUgdGVuZHMgdG8g
cHJvZmlsZSBleGFjdGx5IG9uZSBlbnVtZXJhdGlvbiBtb2RlLiBUaGlzIHBhdGNoIGZvY3VzZXMg
cHJpbWFyaWx5IG9uIHJlaW1wbGVtZW50aW5nIGFsbCB0aGUgb3B0aW1pemF0aW9ucyB3ZSBoYXZl
IGZvciBhbnkgb25lIHNwZWNpZmljIG1vZGUuIFRoaXMgbWVhbnMgdGhlcmUgYXJlIHN0aWxsIHBv
dGVudGlhbCBvcHRpbWl6YXRpb25zIGZvciB0aGUgbXVsdGktbW9kZSBmbGF2b3JzIG9mIGVhY2gg
bmV3IG9wY29kZS4KKworICAgICAgICBUaGUgbWFpbiBvcHRpbWl6YXRpb25zIGltcGxlbWVudGVk
IGZvciBlYWNoIG5ldyBvcGNvZGUgYXJlOgorCisgICAgICAgIEVudW1lcmF0b3JOZXh0OgorICAg
ICAgICAxKSBJbmRleGVkTW9kZSBsb29wcyBhcmUgbG9hZGVkIGFuZCBjaGVja2VkIGZvciBwcmVz
ZW5jZSBpbmxpbmUgKERGRy9GVEwpLgorICAgICAgICAyKSBOYW1lZE1vZGUgaXMgY29tcHV0ZWQg
aW5saW5lIGFzIGxvbmcgYXMgdGhlIGNhY2hlZCBzdHJ1Y3R1cmUgb24gdGhlIGVudW1lcmF0b3Ig
Y2VsbCBtYXRjaGVzIHRoZSBiYXNlIChCYXNlbGluZSspLiBUaGlzIGNhbiBvbmx5IGRpZmZlciBp
ZiB0aGVyZSdzIGEgdHJhbnNpdGlvbi4KKyAgICAgICAgMykgcHJvcGVydHkgbmFtZXMgYXJlIGV4
dHJhY3RlZCBmcm9tIHRoZSBjYWNoZWQgYnVmZmVyIGlubGluZSAoQmFzZWxpbmUrKS4KKworICAg
ICAgICBFbnVtZXJhdG9yR2V0QnlWYWw6CisgICAgICAgIEVudW1lcmF0b3JJbkJ5VmFsOgorICAg
ICAgICBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CisgICAgICAgIDEpIEluZGV4ZWRNb2RlIGhh
cyBhbGwgdGhlIG9wdGltaXphdGlvbnMgb2YgYSBub3JtYWwgWEJ5VmFsIG9uIGluZGV4ZWQgcHJv
cGVydGllcyAoREZHL0ZUTCkuCisgICAgICAgIDIpIE5hbWVkTW9kZSB3aWxsIGV4dHJhY3QgdGhl
IHZhbHVlIGRpcmVjdGx5IGZyb20gdGhlIGlubGluZS9vdXQtb2YtbGluZSBvZmZzZXQgaWYgdGhl
IHN0cnVjdHVyZSBtYXRjaGVzIHRoZSBlbnVtZXJhdG9yJ3MgKEJhc2VsaW5lKykuCisKKyAgICAg
ICAgVGhlcmUgYXJlIGFsc28gYSBmZXcgaW50ZXJlc3RpbmcgY2hhbmdlcyB3b3J0aCBtZW50aW9u
aW5nIGhlcmU6CisgICAgICAgIDEpIElmIGEgZm9yLWluIGxvb3Agd291bGQgcHJvZHVjZSBhbiBl
bXB0eSBlbnVtZXJhdG9yIHdlIG5vdyBhbHdheXMKKyAgICAgICAgcmV0dXJuIHRoZSBWTXMgZW1w
dHkgZW51bWVyYXRvci4gVGhpcyBoYXMgdHdvIGJlbmVmaXRzLCBtb3N0IGltcG9ydGFudGx5LCBp
dCBkaXN0aW5naXNoZXMgYmV0d2VlbiBhbiB1bnByb2ZpbGVkIGZvci1pbiBsb29wIGFuZCBlbXB0
eSBlbnVtZXJhdGlvbiwgd2hpY2ggcHJldmVudHMgT1NSIGV4aXQgbG9vcHMuIEFsc28sIGl0IG1l
YW5zIHRoYXQgdGhlIHZhcmlvdXMgRW51bWVyYXRvciBvcGNvZGVzIG5vIGxvbmdlciBuZWVkIHRv
IGhhbmRsZSB1bmRlZmluZWQvbnVsbCB3aGVuIGB0b09iamVjdGBpbmcgdGhlIGJhc2UgdmFsdWUu
CisKKyAgICAgICAgMikgVGhlIGVudW1lcmF0b3Igbm93IGNvbnRhaW5zIGEgYml0IHNldCBvZiBh
bGwgdGhlIG1vZGVzIGl0IHdpbGwgcHJvZHVjZS4gVGhpcyByZW1vdmVzIGEgZmV3IGV4dHJhIGJy
YW5jaGVzIHdoZW4gc3BlY3VsYXRpbmcgb24gdGhlIG1vZGVzIHdlIHdpbGwgc2VlIGluIEVudW1l
cmF0b3JOZXh0LgorCisgICAgICAgIDMpIEluIHRoZSBERkcsIGVudW1lcmF0b3IgR2V0QnlWYWwg
cmVsaWVzIG9uIGNvbXBpbGVHZXRCeVZhbCB0byBzZXQgdGhlIHJlc3VsdCBpdCBhbHNvIHBhc3Nl
cyBhIHByZWZpeCBjYWxsYmFjayB3aGljaCBlbWl0cyBjb2RlIGFmdGVyIHRoZSB2YXJpb3VzIGNh
c2VzIHNldCB1cCB0aGVpciBvcGVyYW5kcyBidXQgYmVmb3JlIGNvZGUgaXMgZW1pdHRpbmcgdG8g
aGVscCBzYXRpc2Z5IHRoZSBicmFuY2ggb3ZlciByZWdpc3RlciBhbGxvY2F0aW9uIHZhbGlkYXRp
b24uIEFsc28sIHRoZSBhcnJheSBtb2RlIGJyYW5jaCBpbiBjb21waWxlR2V0QnlWYWwgcGFzc2Vz
IHRoZSBkYXRhIGZvcm1hdCB0aGF0IGl0IHdvdWxkIHByZWZlciwgd2hpY2ggZm9yIG5vcm1hbCBH
ZXRCeVZhbCBpcyByZXR1cm5lZC4gRm9yIEVudW1lcmF0b3JHZXRCeVZhbCwgdGhhdCBwcmVmZXJl
bmNlIGlzIGNvbXBsZXRlbHkgaWdub3JlZCBhbmQgaXQgYWx3YXlzIHJldHVybnMgRGF0YUZvcm1h
dEpTLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6b3I4KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246Om9yOCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0
Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0Ojpyc2hpZnQ2NCk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2XzY0OjpvcjgpOiBEZWxldGVkLgorICAgICAgICAq
IGJ1aWx0aW5zL0J1aWx0aW5OYW1lcy5oOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlz
dC5yYjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHA6CisgICAgICAgIChK
U0M6OmNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRleEltcGwpOgorICAgICAgICAoSlNDOjpjb21w
dXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKToKKyAgICAg
ICAgKiBieXRlY29kZS9MaW5rVGltZUNvbnN0YW50Lmg6CisgICAgICAgICogYnl0ZWNvZGUvT3Bj
b2RlLmg6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJ
bkxvb3ApOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEluQnlWYWwpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yTmV4dCk6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNjb3BlKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUpOgorICAgICAgICAoSlNDOjpy
ZXdyaXRlT3ApOgorICAgICAgICAoSlNDOjpGb3JJbkNvbnRleHQ6OmZpbmFsaXplKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmZpbmRGb3JJbkNvbnRleHQpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cmVjb3JkSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbkZv
ckluTG9vcCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
R2V0RW51bWVyYWJsZUxlbmd0aCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVN0cnVjdHVyZVBy
b3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRI
YXNFbnVtZXJhYmxlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEhhc093blN0cnVjdHVyZVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdG9yU3RydWN0dXJlUHJvcGVydHlO
YW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVt
ZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wSW5kZXhlZEZvckluU2NvcGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVzaFN0cnVjdHVyZUZvcklu
U2NvcGUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wU3Ry
dWN0dXJlRm9ySW5TY29wZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvcklu
Q29udGV4dDo6ZmluYWxpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRleGVkRm9ySW5D
b250ZXh0OjpmaW5hbGl6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjpmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0
Ojppc1ZhbGlkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0OjppbnZhbGlkYXRl
KToKKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpsb2NhbCBjb25zdCk6CisgICAgICAgIChK
U0M6OkZvckluQ29udGV4dDo6cHJvcGVydHlOYW1lIGNvbnN0KToKKyAgICAgICAgKEpTQzo6Rm9y
SW5Db250ZXh0Ojpwcm9wZXJ0eU9mZnNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29u
dGV4dDo6ZW51bWVyYXRvciBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6bW9k
ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6Rm9ySW5Db250ZXh0KToKKyAg
ICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojpib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCBjb25zdCk6
CisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6dHlwZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkZvckluQ29udGV4dDo6aXNJbmRleGVkRm9ySW5Db250ZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojppc1N0cnVjdHVyZUZvckluQ29udGV4
dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZvckluQ29udGV4dDo6YXNJbmRleGVk
Rm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Rm9ySW5Db250ZXh0Ojphc1N0
cnVjdHVyZUZvckluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZv
ckluQ29udGV4dDo6U3RydWN0dXJlRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlRm9ySW5Db250ZXh0OjppbmRleCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6cHJvcGVydHkgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmVudW1lcmF0b3IgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmJhc2VWYXJpYWJs
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4dDo6
YWRkR2V0SW5zdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZUZvckluQ29udGV4
dDo6YWRkSW5JbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlRm9ySW5Db250
ZXh0OjphZGRIYXNPd25Qcm9wZXJ0eUp1bXApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpJbmRl
eGVkRm9ySW5Db250ZXh0OjpJbmRleGVkRm9ySW5Db250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6SW5kZXhlZEZvckluQ29udGV4dDo6aW5kZXggY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpJbmRleGVkRm9ySW5Db250ZXh0OjphZGRHZXRJbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6SGFzT3du
UHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZH
QXJyYXlNb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjppc1NhbmVDaGFpbiBj
b25zdCk6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6
CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NGQVBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDRkFQaGFzZTo6aW5qZWN0T1NSKToKKyAgICAgICAg
KiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5
TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjpzZXRKU0FycmF5U2FuZUNoYWluSWZQb3NzaWJsZSk6CisgICAgICAgICog
ZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAg
ICAgICogZGZnL0RGR0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpoYXNIZWFwUHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6aGFzU3RvcmFnZUNoaWxkIGNvbnN0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpz
dG9yYWdlQ2hpbGRJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzQXJyYXlNb2Rl
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNFbnVtZXJhdG9yTWV0YWRhdGEgY29uc3Qp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmVudW1lcmF0b3JNZXRhZGF0YSk6CisgICAgICAg
ICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09wSW5mby5oOgorICAgICAg
ICAoSlNDOjpERkc6Ok9wSW5mbzo6T3BJbmZvKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNTQUxvd2VyaW5nUGhhc2U6OmhhbmRsZU5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3Jhcnkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0
cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJy
YXlMb2FkUmVzdWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsRm9yT2Jq
ZWN0V2l0aFN5bWJvbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TY29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVy
YXRvck5leHRFeHRyYWN0SW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yR2V0
QnlWYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVy
YXRvckhhc1Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUVudW1lcmF0b3JJbkJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNFbnVtZXJh
YmxlUHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlVG9JbmRleFN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHlJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
RW51bWVyYXRvclBuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YWxs
b2NhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVPcGVyYW5kOjpyZWdzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpKU1ZhbHVlT3BlcmFuZDo6Z3ByKToKKyAgICAgICAgKEpTQzo6REZHOjpT
dG9yYWdlT3BlcmFuZDo6U3RvcmFnZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3Jh
Z2VPcGVyYW5kOjp+U3RvcmFnZU9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6OlN0b3JhZ2VP
cGVyYW5kOjplbXBsYWNlKToKKyAgICAgICAgKEpTQzo6REZHOjpKU1ZhbHVlUmVnc1RlbXBvcmFy
eTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZVJlZ3NUZW1wb3Jh
cnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6
OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpU
eXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hlY2tzKToKKyAg
ICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9G
VExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6OmNvbXBpbGVHZXRCeVZhbEltcGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlU3RyaW5nQ2hhckF0SW1wbCk6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVTdHJpbmdDaGFyQXQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlQ29tcGFyZVN0cmljdEVxKToKKyAgICAg
ICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpwaGkpOgor
ICAgICAgICAqIGdlbmVyYXRvci9EU0wucmI6CisgICAgICAgICogaW50ZXJwcmV0ZXIvUmVnaXN0
ZXIuaDoKKyAgICAgICAgKiBpbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6UmVnaXN0ZXI6Om9wZXJhdG9yPSk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVy
cy5oOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nh
c2VzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3Bw
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19lbnVtZXJhYmxlX3N0cnVj
dHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNf
b3duX3N0cnVjdHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUlt
cGwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVf
c3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3By
b3BlcnR5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3Rf
cG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9z
dHJ1Y3R1cmVfcG5hbWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51
bWVyYXRvcl9nZW5lcmljX3BuYW1lKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmdlbmVyYXRlR2V0QnlWYWxTbG93Q2Fz
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX25leHQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
ZW51bWVyYXRvcl9oYXNfcHJvcGVydHlJbXBsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1l
cmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaW5fYnlfdmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSk6CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6
CisgICAgICAgIChKU0M6OkpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSCk6CisgICAgICAgICog
cnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKiBydW50aW1lL0ZpbGVCYXNlZEZ1
enplckFnZW50LmNwcDoKKyAgICAgICAgKEpTQzo6RmlsZUJhc2VkRnV6emVyQWdlbnQ6OmdldFBy
ZWRpY3Rpb25JbnRlcm5hbCk6CisgICAgICAgICogcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2Vu
dEJhc2UuY3BwOgorICAgICAgICAoSlNDOjpGaWxlQmFzZWRGdXp6ZXJBZ2VudEJhc2U6Om9wY29k
ZUFsaWFzRm9yTG9va3VwS2V5KToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IpOgorICAgICAgICAoSlND
OjpKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNvbXB1dGVOZXh0KToKKyAgICAgICAgKiBydW50
aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oOgorICAgICAgICAoSlNDOjpwcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yKToKKyAgICAgICAgKiBydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRpbmdG
dXp6ZXJBZ2VudC5jcHA6CisgICAgICAgIChKU0M6OlByZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6
ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbkludGVybmFsKToKKwogMjAyMS0wOC0wNSAgTWljaGFlbCBD
YXRhbnphcm8gIDxtY2F0YW56YXJvQGdub21lLm9yZz4KIAogICAgICAgICBHQ0MgMTEgYnVpbGRz
IHNob3VsZCB1c2UgLVduby1hcnJheS1ib3VuZHMsIC1Xbm8tbm9ubnVsbApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTTY0LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAppbmRl
eCA3YjdkODQxMzRhNzQwOTlkMmZiMTc0MzczNWI2M2Y4YWM1ZjQ5MTZmLi5jZGUzMjcwYmE2NDA2
ZjUyZTlkNDFhMmVkYWZiOTQ3OGQ5M2JkMzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaApAQCAtMTA2OSw2ICsxMDY5
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgc3RvcmUzMihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNz
KTsKICAgICB9CiAKKyAgICB2b2lkIG9yOChSZWdpc3RlcklEIHNyYywgQWJzb2x1dGVBZGRyZXNz
IGFkZHJlc3MpCisgICAgeworICAgICAgICBsb2FkOChhZGRyZXNzLm1fcHRyLCBnZXRDYWNoZWRE
YXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCkpOworICAgICAgICBvcjMyKHNyYywgZGF0
YVRlbXBSZWdpc3RlciwgZGF0YVRlbXBSZWdpc3Rlcik7CisgICAgICAgIHN0b3JlOChkYXRhVGVt
cFJlZ2lzdGVyLCBhZGRyZXNzLm1fcHRyKTsKKyAgICB9CisKICAgICB2b2lkIG9yOChUcnVzdGVk
SW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7CiAgICAgICAgIExvZ2lj
YWxJbW1lZGlhdGUgbG9naWNhbEltbSA9IExvZ2ljYWxJbW1lZGlhdGU6OmNyZWF0ZTMyKGltbS5t
X3ZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAppbmRleCA0MzU2ODg4OGZiZjA2NTA1Y2FmMTc5MDc2
MTUzM2U3YTkyOTY0ZTM1Li4xN2JiNjY0ZDRjMGU2ZTljMmI5MzBlYTEwNmU4YWIxMTJkNGZhNDkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oCkBAIC02MjUsNiArNjI1LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgbV9hc3NlbWJsZXIub3JiX3JtKHNyYywgZGVzdC5vZmZzZXQsIGRlc3QuYmFzZSwgZGVzdC5p
bmRleCwgZGVzdC5zY2FsZSk7CiAgICAgfQogCisgICAgdm9pZCBvcjgoUmVnaXN0ZXJJRCBzcmMs
IEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIoKSk7CisgICAgICAgIG9yOChzcmMs
IEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKKyAgICB9CisKICAgICB2b2lkIG9yMzIoQWRk
cmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLm9y
bF9tcihzcmMub2Zmc2V0LCBzcmMuYmFzZSwgZGVzdCk7CkBAIC02NjUsNiArNjcxLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIub3JiX2ltKHN0YXRpY19jYXN0PGludDhfdD4oaW1t
Lm1fdmFsdWUpLCBhZGRyZXNzLm9mZnNldCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmluZGV4LCBh
ZGRyZXNzLnNjYWxlKTsKICAgICB9CiAKKyAgICB2b2lkIG9yOChUcnVzdGVkSW1tMzIgaW1tLCBB
YnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihhZGRyZXNzLm1fcHRyKSwgc2NyYXRjaFJlZ2lzdGVyKCkpOworICAgICAgICBvcjgoaW1tLCBB
ZGRyZXNzKHNjcmF0Y2hSZWdpc3RlcigpKSk7CisgICAgfQorCiAgICAgdm9pZCBvcjMyKFJlZ2lz
dGVySUQgb3AxLCBSZWdpc3RlcklEIG9wMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAg
ICAgaWYgKG9wMSA9PSBvcDIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKaW5kZXggOTQzN2ZkM2JkMmFjMTY2ODE2ZjI4
ZjM3ZGJkOTkwNTFkZjM3YTFjNC4uNjMzNTY1MmZjNTQ0OWZjOWE1NTllY2E2Y2IyNDA4Yjg3MGFi
OWRhZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4Nl82NC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJYODZfNjQuaApAQCAtOTcsMTIgKzk3LDYgQEAgcHVibGljOgogICAgICAgICBv
cjE2KGltbSwgQWRkcmVzcyhzY3JhdGNoUmVnaXN0ZXIoKSkpOwogICAgIH0KIAotICAgIHZvaWQg
b3I4KFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQotICAgIHsKLSAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBzY3JhdGNoUmVnaXN0ZXIo
KSk7Ci0gICAgICAgIG9yOChpbW0sIEFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyKCkpKTsKLSAgICB9
Ci0KICAgICB2b2lkIHN1YjMyKFRydXN0ZWRJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRy
ZXNzKQogICAgIHsKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBz
Y3JhdGNoUmVnaXN0ZXIoKSk7CkBAIC01ODcsNiArNTgxLDEyIEBAIHB1YmxpYzoKICAgICAgICAg
fQogICAgIH0KIAorICAgIHZvaWQgcnNoaWZ0NjQoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0z
MiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsK
KyAgICAgICAgcnNoaWZ0NjQoaW1tLCBkZXN0KTsKKyAgICB9CisKICAgICB2b2lkIHVyc2hpZnQ2
NChUcnVzdGVkSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5zaHJxX2k4cihpbW0ubV92YWx1ZSwgZGVzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKaW5kZXggYjAyZTU2MDIxMDI2NDk5ZWYzNzVi
YzYwOTE0YTlhNGRlMDFiMmRmNi4uZGNhZjBiYTZjYTMxOGYxODAyOTJjYmE4ZDdkYzAwZmE1Nzc5
MWVhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0aW5O
YW1lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMu
aApAQCAtMTgxLDcgKzE4MSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKGhhc093blBy
b3BlcnR5RnVuY3Rpb24pIFwKICAgICBtYWNybyhjcmVhdGVQcml2YXRlU3ltYm9sKSBcCiAgICAg
bWFjcm8oZW50cmllcykgXAotICAgIG1hY3JvKG91dE9mTGluZVJlYWN0aW9uQ291bnRzKQorICAg
IG1hY3JvKG91dE9mTGluZVJlYWN0aW9uQ291bnRzKSBcCisgICAgbWFjcm8oZW1wdHlQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKQogCiAKIG5hbWVzcGFjZSBTeW1ib2xzIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QucmIgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0LnJiCmluZGV4IDE4MjVlYzJhZDVhMDMz
OWQ0ZjNlZjE5NWRkNmY5ZmNmMjJkMDY0OWMuLmI2ZDgzNDk1MjM1NzNhZDEyYTExYjAzMDkzOTA3
ZmNjYWNlOTdjOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5yYgpAQCAtMjksNiArMjksNyBAQCB0eXBlcyBbCiAgICAgOkRlYnVnSG9va1R5cGUs
CiAgICAgOkVDTUFNb2RlLAogICAgIDpFcnJvclR5cGVXaXRoRXh0ZW5zaW9uLAorICAgIDpFbnVt
ZXJhdG9yTWV0YWRhdGEsCiAgICAgOkdldEJ5SWRNb2RlLAogICAgIDpHZXRCeUlkTW9kZU1ldGFk
YXRhLAogICAgIDpHZXRCeVZhbEhpc3RvcnksCkBAIC0xMTU0LDg5ICsxMTU1LDY5IEBAIG9wIDpw
cm9maWxlX2NvbnRyb2xfZmxvdywKICAgICAgICAgYmFzaWNCbG9ja0xvY2F0aW9uOiBCYXNpY0Js
b2NrTG9jYXRpb24uKiwKICAgICB9CiAKLW9wIDpnZXRfZW51bWVyYWJsZV9sZW5ndGgsCitvcCA6
Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IsCiAgICAgYXJnczogewogICAgICAgICBkc3Q6IFZpcnR1
YWxSZWdpc3RlciwKICAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0KIAotb3Ag
Omhhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHksCitvcCA6ZW51bWVyYXRvcl9uZXh0LAog
ICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCisgICAgICAgICMgb3V0
CisgICAgICAgIHByb3BlcnR5TmFtZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICAjIGluL291
dAorICAgICAgICBtb2RlOiBWaXJ0dWFsUmVnaXN0ZXIsICMgV2lsbCBhbHdheXMgYmUgYSBKUyBV
SW50MzIgcmVwcmVzZW50aW5nIGEgSlNGb3JJbk1vZGUuCisgICAgICAgIGluZGV4OiBWaXJ0dWFs
UmVnaXN0ZXIsICMgR2V0cyByZXNldCB0byB6ZXJvIGV2ZXJ5IHRpbWUgbW9kZSBjaGFuZ2VzLgor
ICAgICAgICAjIGluCiAgICAgICAgIGJhc2U6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgcHJv
cGVydHk6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgZW51bWVyYXRvcjogVmlydHVhbFJlZ2lz
dGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJh
eVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRh
LAogICAgIH0KIAotb3AgOmhhc19lbnVtZXJhYmxlX3N0cnVjdHVyZV9wcm9wZXJ0eSwKLSAgICBh
cmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBiYXNlOiBWaXJ0
dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDpoYXNfb3duX3N0cnVj
dHVyZV9wcm9wZXJ0eSwKLSAgICBhcmdzOiB7Ci0gICAgICAgIGRzdDogVmlydHVhbFJlZ2lzdGVy
LAotICAgICAgICBiYXNlOiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAgIHByb3BlcnR5OiBWaXJ0
dWFsUmVnaXN0ZXIsCi0gICAgICAgIGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9
Ci0KLW9wIDppbl9zdHJ1Y3R1cmVfcHJvcGVydHksCi0gICAgYXJnczogewotICAgICAgICBkc3Q6
IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAg
ICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFs
UmVnaXN0ZXIsCi0gICAgfQotCi1vcCA6aGFzX2VudW1lcmFibGVfcHJvcGVydHksCi0gICAgYXJn
czogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKLSAgICAgICAgYmFzZTogVmlydHVh
bFJlZ2lzdGVyLAotICAgICAgICBwcm9wZXJ0eTogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQot
b3AgOmdldF9kaXJlY3RfcG5hbWUsCitvcCA6ZW51bWVyYXRvcl9nZXRfYnlfdmFsLAogICAgIGFy
Z3M6IHsKICAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCiAgICAgICAgIGJhc2U6IFZpcnR1
YWxSZWdpc3RlciwKLSAgICAgICAgcHJvcGVydHk6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAg
bW9kZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdp
c3RlciwKICAgICAgICAgaW5kZXg6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgZW51bWVyYXRv
cjogVmlydHVhbFJlZ2lzdGVyLAogICAgIH0sCiAgICAgbWV0YWRhdGE6IHsKICAgICAgICAgcHJv
ZmlsZTogVmFsdWVQcm9maWxlLAorICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJvZmlsZSwK
KyAgICAgICAgZW51bWVyYXRvck1ldGFkYXRhOiBFbnVtZXJhdG9yTWV0YWRhdGEsCiAgICAgfQog
Ci1vcCA6Z2V0X3Byb3BlcnR5X2VudW1lcmF0b3IsCitvcCA6ZW51bWVyYXRvcl9pbl9ieV92YWws
CiAgICAgYXJnczogewogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgYmFz
ZTogVmlydHVhbFJlZ2lzdGVyLAotICAgIH0KLQotb3AgOmVudW1lcmF0b3Jfc3RydWN0dXJlX3Bu
YW1lLAotICAgIGFyZ3M6IHsKLSAgICAgICAgZHN0OiBWaXJ0dWFsUmVnaXN0ZXIsCi0gICAgICAg
IGVudW1lcmF0b3I6IFZpcnR1YWxSZWdpc3RlciwKKyAgICAgICAgbW9kZTogVmlydHVhbFJlZ2lz
dGVyLAorICAgICAgICBwcm9wZXJ0eU5hbWU6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAgaW5k
ZXg6IFZpcnR1YWxSZWdpc3RlciwKLSAgICB9Ci0KLW9wIDplbnVtZXJhdG9yX2dlbmVyaWNfcG5h
bWUsCi0gICAgYXJnczogewotICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKICAgICAgICAg
ZW51bWVyYXRvcjogVmlydHVhbFJlZ2lzdGVyLAotICAgICAgICBpbmRleDogVmlydHVhbFJlZ2lz
dGVyLAorICAgIH0sCisgICAgbWV0YWRhdGE6IHsKKyAgICAgICAgYXJyYXlQcm9maWxlOiBBcnJh
eVByb2ZpbGUsCisgICAgICAgIGVudW1lcmF0b3JNZXRhZGF0YTogRW51bWVyYXRvck1ldGFkYXRh
LAogICAgIH0KIAotb3AgOnRvX2luZGV4X3N0cmluZywKK29wIDplbnVtZXJhdG9yX2hhc19vd25f
cHJvcGVydHksCiAgICAgYXJnczogewogICAgICAgICBkc3Q6IFZpcnR1YWxSZWdpc3RlciwKKyAg
ICAgICAgYmFzZTogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBtb2RlOiBWaXJ0dWFsUmVnaXN0
ZXIsCisgICAgICAgIHByb3BlcnR5TmFtZTogVmlydHVhbFJlZ2lzdGVyLAogICAgICAgICBpbmRl
eDogVmlydHVhbFJlZ2lzdGVyLAorICAgICAgICBlbnVtZXJhdG9yOiBWaXJ0dWFsUmVnaXN0ZXIs
CisgICAgfSwKKyAgICBtZXRhZGF0YTogeworICAgICAgICBhcnJheVByb2ZpbGU6IEFycmF5UHJv
ZmlsZSwKKyAgICAgICAgZW51bWVyYXRvck1ldGFkYXRhOiBFbnVtZXJhdG9yTWV0YWRhdGEsCiAg
ICAgfQogCiBvcCA6dW5yZWFjaGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuY3BwCmluZGV4IDA3NTYxODk5YTYyMDllMzZjYmZhNzJhMDU0
ZjE1MTJkNjczOGMwY2MuLjMyNDdlMmU3MTUxYjFlZDU4OWE5NmQ5NDg1NzUzMmFjM2JhZjE3Njcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVm
LmNwcApAQCAtMTYzLDExICsxNjMsOSBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVJbmRl
eEltcGwoVmlydHVhbFJlZ2lzdGVyIHNjb3BlUmVnaXN0ZXIsIGNvbnN0IEluc3RydQogCiAgICAg
VVNFUyhPcFNwcmVhZCwgYXJndW1lbnQpCiAgICAgVVNFUyhPcEdldFByb3BlcnR5RW51bWVyYXRv
ciwgYmFzZSkKLSAgICBVU0VTKE9wR2V0RW51bWVyYWJsZUxlbmd0aCwgYmFzZSkKICAgICBVU0VT
KE9wTmV3RnVuY0V4cCwgc2NvcGUpCiAgICAgVVNFUyhPcE5ld0dlbmVyYXRvckZ1bmNFeHAsIHNj
b3BlKQogICAgIFVTRVMoT3BOZXdBc3luY0Z1bmNFeHAsIHNjb3BlKQotICAgIFVTRVMoT3BUb0lu
ZGV4U3RyaW5nLCBpbmRleCkKICAgICBVU0VTKE9wQ3JlYXRlTGV4aWNhbEVudmlyb25tZW50LCBz
Y29wZSwgc3ltYm9sVGFibGUsIGluaXRpYWxWYWx1ZSkKICAgICBVU0VTKE9wQ3JlYXRlR2VuZXJh
dG9yRnJhbWVFbnZpcm9ubWVudCwgc2NvcGUsIHN5bWJvbFRhYmxlLCBpbml0aWFsVmFsdWUpCiAg
ICAgVVNFUyhPcFJlc29sdmVTY29wZSwgc2NvcGUpCkBAIC0yMjEsMTEgKzIxOSw2IEBAIHZvaWQg
Y29tcHV0ZVVzZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdp
c3RlciwgY29uc3QgSW5zdHJ1CiAgICAgVVNFUyhPcEdldEZyb21Bcmd1bWVudHMsIGFyZ3VtZW50
cykKICAgICBVU0VTKE9wTmV3QXJyYXlCdWZmZXIsIGltbXV0YWJsZUJ1dHRlcmZseSkKIAotICAg
IFVTRVMoT3BIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSkKLSAg
ICBVU0VTKE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LCBiYXNlLCBwcm9wZXJ0eSwg
ZW51bWVyYXRvcikKLSAgICBVU0VTKE9wSGFzRW51bWVyYWJsZVByb3BlcnR5LCBiYXNlLCBwcm9w
ZXJ0eSkKLSAgICBVU0VTKE9wRW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBlbnVtZXJhdG9yLCBp
bmRleCkKLSAgICBVU0VTKE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZSwgZW51bWVyYXRvciwgaW5k
ZXgpCiAgICAgVVNFUyhPcEdldEJ5VmFsLCBiYXNlLCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wR2V0
UHJpdmF0ZU5hbWUsIGJhc2UsIHByb3BlcnR5KQogICAgIFVTRVMoT3BQdXRQcml2YXRlTmFtZSwg
YmFzZSwgcHJvcGVydHksIHZhbHVlKQpAQCAtMjY1LDggKzI1OCw2IEBAIHZvaWQgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29u
c3QgSW5zdHJ1CiAKICAgICBVU0VTKE9wR2V0QnlWYWxXaXRoVGhpcywgYmFzZSwgdGhpc1ZhbHVl
LCBwcm9wZXJ0eSkKICAgICBVU0VTKE9wSW5zdGFuY2VvZkN1c3RvbSwgdmFsdWUsIGNvbnN0cnVj
dG9yLCBoYXNJbnN0YW5jZVZhbHVlKQotICAgIFVTRVMoT3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0
eSwgYmFzZSwgcHJvcGVydHksIGVudW1lcmF0b3IpCi0gICAgVVNFUyhPcEluU3RydWN0dXJlUHJv
cGVydHksIGJhc2UsIHByb3BlcnR5LCBlbnVtZXJhdG9yKQogCiAgICAgY2FzZSBvcF9jYWxsX3Zh
cmFyZ3M6IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcENhbGxW
YXJhcmdzPigpOwpAQCAtMjg0LDggKzI3NSw2IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29k
ZUluZGV4SW1wbChWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVSZWdpc3RlciwgY29uc3QgSW5zdHJ1CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBVU0VTKE9wR2V0RGlyZWN0UG5hbWUsIGJhc2Us
IHByb3BlcnR5LCBpbmRleCwgZW51bWVyYXRvcikKLQogICAgIFVTRVMoT3BTd2l0Y2hTdHJpbmcs
IHNjcnV0aW5lZSkKICAgICBVU0VTKE9wU3dpdGNoQ2hhciwgc2NydXRpbmVlKQogICAgIFVTRVMo
T3BTd2l0Y2hJbW0sIHNjcnV0aW5lZSkKQEAgLTI5NSw2ICsyODQsMTEgQEAgdm9pZCBjb21wdXRl
VXNlc0ZvckJ5dGVjb2RlSW5kZXhJbXBsKFZpcnR1YWxSZWdpc3RlciBzY29wZVJlZ2lzdGVyLCBj
b25zdCBJbnN0cnUKIAogICAgIFVTRVMoT3BZaWVsZCwgYXJndW1lbnQpCiAKKyAgICBVU0VTKE9w
RW51bWVyYXRvck5leHQsIG1vZGUsIGluZGV4LCBiYXNlLCBlbnVtZXJhdG9yKQorICAgIFVTRVMo
T3BFbnVtZXJhdG9yR2V0QnlWYWwsIGJhc2UsIG1vZGUsIHByb3BlcnR5TmFtZSwgaW5kZXgsIGVu
dW1lcmF0b3IpCisgICAgVVNFUyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBiYXNlLCBtb2RlLCBwcm9w
ZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKQorICAgIFVTRVMoT3BFbnVtZXJhdG9ySGFzT3du
UHJvcGVydHksIGJhc2UsIG1vZGUsIHByb3BlcnR5TmFtZSwgaW5kZXgsIGVudW1lcmF0b3IpCisK
ICAgICBjYXNlIG9wX2l0ZXJhdG9yX29wZW46IHsKICAgICAgICAgYXV0byBieXRlY29kZSA9IGlu
c3RydWN0aW9uLT5hczxPcEl0ZXJhdG9yT3Blbj4oKTsKICAgICAgICAgdXNlQXRFYWNoQ2hlY2tw
b2ludFN0YXJ0aW5nV2l0aChPcEl0ZXJhdG9yT3Blbjo6c3ltYm9sQ2FsbCwgYnl0ZWNvZGUubV9z
eW1ib2xJdGVyYXRvciwgYnl0ZWNvZGUubV9pdGVyYWJsZSk7CkBAIC00MjQsMTcgKzQxOCw3IEBA
IHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZUluZGV4SW1wbCh1bnNpZ25lZCBudW1WYXJzLCBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1CiAgICAgICAgIHJldHVybjsKICAgICAvLyBUaGVzZSBh
bGwgaGF2ZSBhIHNpbmdsZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGZpcnN0IGFyZ3VtZW50LgogICAg
IERFRlMoT3BBcmd1bWVudENvdW50LCBkc3QpCi0gICAgREVGUyhPcFRvSW5kZXhTdHJpbmcsIGRz
dCkKLSAgICBERUZTKE9wR2V0RW51bWVyYWJsZUxlbmd0aCwgZHN0KQotICAgIERFRlMoT3BIYXNF
bnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBkc3QpCi0gICAgREVGUyhPcEhhc0VudW1lcmFibGVT
dHJ1Y3R1cmVQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BIYXNFbnVtZXJhYmxlUHJvcGVydHks
IGRzdCkKLSAgICBERUZTKE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHksIGRzdCkKLSAgICBERUZT
KE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eSwgZHN0KQotICAgIERFRlMoT3BHZXREaXJlY3RQbmFtZSwg
ZHN0KQogICAgIERFRlMoT3BHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGRzdCkKLSAgICBERUZTKE9w
RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBkc3QpCi0gICAgREVGUyhPcEVudW1lcmF0b3JHZW5l
cmljUG5hbWUsIGRzdCkKICAgICBERUZTKE9wR2V0UGFyZW50U2NvcGUsIGRzdCkKICAgICBERUZT
KE9wUHVzaFdpdGhTY29wZSwgZHN0KQogICAgIERFRlMoT3BDcmVhdGVMZXhpY2FsRW52aXJvbm1l
bnQsIGRzdCkKQEAgLTU2Nyw2ICs1NTEsMTEgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2Rl
SW5kZXhJbXBsKHVuc2lnbmVkIG51bVZhcnMsIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnUKIAog
ICAgIERFRlMoT3BDYXRjaCwgZXhjZXB0aW9uLCB0aHJvd25WYWx1ZSkKIAorICAgIERFRlMoT3BF
bnVtZXJhdG9yTmV4dCwgcHJvcGVydHlOYW1lLCBtb2RlLCBpbmRleCkKKyAgICBERUZTKE9wRW51
bWVyYXRvckdldEJ5VmFsLCBkc3QpCisgICAgREVGUyhPcEVudW1lcmF0b3JJbkJ5VmFsLCBkc3Qp
CisgICAgREVGUyhPcEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgZHN0KQorCiAgICAgY2FzZSBv
cF9pdGVyYXRvcl9vcGVuOiB7CiAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BJdGVyYXRvck9wZW4+KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKaW5kZXggZmNmYTI5MmFkMDRlZjEwNjA1MjVlMzdmMWE4ODY2MTRkMzU0
ODc0OC4uZGNlZmM2YWQ2YzJkYTBhMTQ4OThjZmNmNjE4OWM2ZTk0ZDIwZTU2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAgLTQ3Miw4ICs0NzIs
NiBAQCBib29sIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGluawogICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9
IGluc3RydWN0aW9uLT5vcGNvZGVJRCgpOwogICAgICAgICBtX2J5dGVjb2RlQ29zdCArPSBvcGNv
ZGVMZW5ndGhzW29wY29kZUlEXTsKICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAg
ICBMSU5LKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSkKLQogICAgICAgICBMSU5LKE9w
Q2FsbFZhcmFyZ3MsIHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BUYWlsQ2FsbFZhcmFyZ3MsIHBy
b2ZpbGUpCiAgICAgICAgIExJTksoT3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVudHMsIHByb2ZpbGUp
CkBAIC00ODEsNyArNDc5LDYgQEAgYm9vbCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmsKICAgICAgICAgTElO
SyhPcEdldEJ5VmFsLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wR2V0UHJpdmF0ZU5hbWUsIHBy
b2ZpbGUpCiAKLSAgICAgICAgTElOSyhPcEdldERpcmVjdFBuYW1lLCBwcm9maWxlKQogICAgICAg
ICBMSU5LKE9wR2V0QnlJZFdpdGhUaGlzLCBwcm9maWxlKQogICAgICAgICBMSU5LKE9wVHJ5R2V0
QnlJZCwgcHJvZmlsZSkKICAgICAgICAgTElOSyhPcEdldEJ5SWREaXJlY3QsIHByb2ZpbGUpCkBA
IC01MDMsNiArNTAwLDExIEBAIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rCiAKICAgICAgICAgTElO
SyhPcEdldEJ5SWQsIHByb2ZpbGUpCiAKKyAgICAgICAgTElOSyhPcEVudW1lcmF0b3JOZXh0LCBw
cm9maWxlKQorICAgICAgICBMSU5LKE9wRW51bWVyYXRvckluQnlWYWwsIHByb2ZpbGUpCisgICAg
ICAgIExJTksoT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHksIHByb2ZpbGUpCisgICAgICAgIExJ
TksoT3BFbnVtZXJhdG9yR2V0QnlWYWwsIHByb2ZpbGUpCisKICAgICAgICAgTElOSyhPcENhbGws
IHByb2ZpbGUpCiAgICAgICAgIExJTksoT3BUYWlsQ2FsbCwgcHJvZmlsZSkKICAgICAgICAgTElO
SyhPcENhbGxFdmFsLCBwcm9maWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0xpbmtUaW1lQ29uc3RhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MaW5rVGltZUNvbnN0YW50LmgKaW5kZXggZWU0MDk4OGE4NjFkYjE1YWZjMTBkNDFmYzRi
MWVmYzU5ZjZjYjFkYy4uNWYzMmFmODIwZTQ1ZmE0OWRjOTJmYzQ1NjdhYWY0MDE1M2NiZWFiZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xpbmtUaW1lQ29uc3Rh
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGlua1RpbWVDb25zdGFu
dC5oCkBAIC0xMTEsNiArMTExLDcgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgdihjYWxs
RnVuY3Rpb24sIG51bGxwdHIpIFwKICAgICB2KGhhc093blByb3BlcnR5RnVuY3Rpb24sIG51bGxw
dHIpIFwKICAgICB2KGNyZWF0ZVByaXZhdGVTeW1ib2wsIG51bGxwdHIpIFwKKyAgICB2KGVtcHR5
UHJvcGVydHlOYW1lRW51bWVyYXRvciwgbnVsbHB0cikgXAogCiAKICNkZWZpbmUgREVDTEFSRV9M
SU5LX1RJTUVfQ09OU1RBTlQobmFtZSwgY29kZSkgbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAppbmRleCA0ODZjMTUxMmE5ODQzMGExZDMyNGI2Mzg1YTU1M2MxZjk1
ZGY0ZDE5Li5hYzdmNzEwZDgwNjVkYzgzZjUwMTcyYjk1ZTJhOTZkNjhkMGQxZWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBad2FyaWNoIDxj
d3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtOTksNyArOTksNyBA
QCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdFdpZHRoRm9yTWF4T3Bjb2RlTGVuZ3RoID0g
V1RGOjpnZXRNU0JTZXRDb25zdGV4cHIobQogICAgIG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJn
dW1lbnRzKSBcCiAgICAgbWFjcm8oT3BDb25zdHJ1Y3RWYXJhcmdzKSBcCiAgICAgbWFjcm8oT3BH
ZXRCeVZhbCkgXAotICAgIG1hY3JvKE9wR2V0RGlyZWN0UG5hbWUpIFwKKyAgICBtYWNybyhPcEVu
dW1lcmF0b3JHZXRCeVZhbCkgXAogICAgIG1hY3JvKE9wR2V0QnlJZCkgXAogICAgIG1hY3JvKE9w
R2V0QnlJZFdpdGhUaGlzKSBcCiAgICAgbWFjcm8oT3BUcnlHZXRCeUlkKSBcCkBAIC0xMjcsNyAr
MTI3LDYgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRXaWR0aEZvck1heE9wY29kZUxl
bmd0aCA9IFdURjo6Z2V0TVNCU2V0Q29uc3RleHByKG0KICAgICBtYWNybyhPcEdldFByaXZhdGVO
YW1lKSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfT1BDT0RFX1dJVEhfQVJSQVlfUFJPRklMRShtYWNy
bykgXAotICAgIG1hY3JvKE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eSkgXAogICAgIG1h
Y3JvKE9wQ2FsbFZhcmFyZ3MpIFwKICAgICBtYWNybyhPcFRhaWxDYWxsVmFyYXJncykgXAogICAg
IG1hY3JvKE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzKSBcCkBAIC0xMzYsNiArMTM1LDEwIEBA
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0V2lkdGhGb3JNYXhPcGNvZGVMZW5ndGggPSBX
VEY6OmdldE1TQlNldENvbnN0ZXhwcihtCiAgICAgbWFjcm8oT3BJbkJ5VmFsKSBcCiAgICAgbWFj
cm8oT3BQdXRCeVZhbCkgXAogICAgIG1hY3JvKE9wUHV0QnlWYWxEaXJlY3QpIFwKKyAgICBtYWNy
byhPcEVudW1lcmF0b3JOZXh0KSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9yR2V0QnlWYWwpIFwK
KyAgICBtYWNybyhPcEVudW1lcmF0b3JJbkJ5VmFsKSBcCisgICAgbWFjcm8oT3BFbnVtZXJhdG9y
SGFzT3duUHJvcGVydHkpIFwKIAogI2RlZmluZSBGT1JfRUFDSF9PUENPREVfV0lUSF9BUlJBWV9B
TExPQ0FUSU9OX1BST0ZJTEUobWFjcm8pIFwKICAgICBtYWNybyhPcE5ld0FycmF5KSBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCmluZGV4IDczOTBkNTJjNGFlMWFhMWMzZTIyNmM5NTIyZjdiNDQ2NzljOTZkZTMu
LjZkM2M4NTk4NzVjMmNmMTFhMDQ2Y2VkZTRhN2E5NTNlYmRiZDRiMGMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCkBAIC0xNTAzLDExICsxNTAzLDExIEBAIHVuc2lnbmVkIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0V2lkZUp1bXBJZk5vdEZ1bmN0aW9uSGFzT3duUHJvcGVydHkoUmVnaXN0ZXJJRCoKICAgICBy
ZXR1cm4gbV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJbkxvb3AoU3RydWN0dXJl
Rm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0LCB1bnNpZ25lZCBicmFuY2hPZmZzZXQsIExh
YmVsJiBnZW5lcmljUGF0aCkKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnJlY29yZEhhc093blBy
b3BlcnR5SW5Gb3JJbkxvb3AoRm9ySW5Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBicmFuY2hP
ZmZzZXQsIExhYmVsJiBnZW5lcmljUGF0aCkKIHsKICAgICBSRUxFQVNFX0FTU0VSVChnZW5lcmlj
UGF0aC5pc0JvdW5kKCkpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFnZW5lcmljUGF0aC5pc0Zvcndh
cmQoKSk7Ci0gICAgc3RydWN0dXJlQ29udGV4dC5hZGRIYXNPd25Qcm9wZXJ0eUp1bXAoYnJhbmNo
T2Zmc2V0LCBnZW5lcmljUGF0aC5sb2NhdGlvbigpKTsKKyAgICBjb250ZXh0LmFkZEhhc093blBy
b3BlcnR5SnVtcChicmFuY2hPZmZzZXQsIGdlbmVyaWNQYXRoLmxvY2F0aW9uKCkpOwogfQogCiBi
b29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpoYXNDb25zdGFudChjb25zdCBJZGVudGlmaWVyJiBpZGVu
dCkgY29uc3QKQEAgLTI1ODEsMTIgKzI1ODEsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEluQnlWYWwoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBwcm9wZXJ0eQog
ICAgICAgICBpZiAoY29udGV4dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgaWYgKCFjb250ZXh0LmlzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkp
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQmIHN0
cnVjdHVyZUNvbnRleHQgPSBjb250ZXh0LmFzU3RydWN0dXJlRm9ySW5Db250ZXh0KCk7Ci0gICAg
ICAgIE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eTo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMs
IGRzdCwgYmFzZSwgcHJvcGVydHksIHN0cnVjdHVyZUNvbnRleHQuZW51bWVyYXRvcigpKTsKLSAg
ICAgICAgc3RydWN0dXJlQ29udGV4dC5hZGRJbkluc3QobV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0
KCksIHByb3BlcnR5LT5pbmRleCgpKTsKKyAgICAgICAgT3BFbnVtZXJhdG9ySW5CeVZhbDo6ZW1p
dDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgY29udGV4dC5tb2RlKCksIHBy
b3BlcnR5LCBjb250ZXh0LnByb3BlcnR5T2Zmc2V0KCksIGNvbnRleHQuZW51bWVyYXRvcigpKTsK
KyAgICAgICAgY29udGV4dC5hZGRJbkluc3QobV9sYXN0SW5zdHJ1Y3Rpb24ub2Zmc2V0KCksIHBy
b3BlcnR5LT5pbmRleCgpKTsKICAgICAgICAgcmV0dXJuIGRzdDsKICAgICB9CiAKQEAgLTI3MzQs
MjQgKzI3MzAsOSBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFs
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUgogICAgICAgICBpZiAoY29udGV4
dC5sb2NhbCgpICE9IHByb3BlcnR5KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAg
aWYgKGNvbnRleHQuaXNJbmRleGVkRm9ySW5Db250ZXh0KCkpIHsKLSAgICAgICAgICAgIGF1dG8m
IGluZGV4ZWRDb250ZXh0ID0gY29udGV4dC5hc0luZGV4ZWRGb3JJbkNvbnRleHQoKTsKLSAgICAg
ICAgICAgIGtpbGwoZHN0KTsKLSAgICAgICAgICAgIGlmIChPcEdldEJ5VmFsOjpjaGVja1dpdGhv
dXRNZXRhZGF0YUlEPE9wY29kZVNpemU6Ok5hcnJvdz4odGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0
eSkpCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFsbGVzdFNpemVSZXF1
aXJlbWVudDxPcGNvZGVTaXplOjpOYXJyb3c+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRl
eHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChPcEdldEJ5VmFsOjpjaGVja1dpdGhv
dXRNZXRhZGF0YUlEPE9wY29kZVNpemU6OldpZGUxNj4odGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0
eSkpCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZhbDo6ZW1pdFdpdGhTbWFsbGVzdFNpemVSZXF1
aXJlbWVudDxPcGNvZGVTaXplOjpXaWRlMTY+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRl
eHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT3BHZXRCeVZh
bDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRoaXMsIGRzdCwgYmFzZSwgaW5kZXhlZENvbnRl
eHQuaW5kZXgoKSk7Ci0gICAgICAgICAgICBpbmRleGVkQ29udGV4dC5hZGRHZXRJbnN0KG1fbGFz
dEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gZHN0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV2UgY2Fubm90IGRvIHRoZSBhYm92
ZSBvcHRpbWl6YXRpb24gaGVyZSBzaW5jZSBPcEdldERpcmVjdFBuYW1lID0+IE9wR2V0QnlWYWwg
Y29udmVyc2lvbiBpbnZvbHZlcyBkaWZmZXJlbnQgbWV0YWRhdGEgSUQgYWxsb2NhdGlvbi4KLSAg
ICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0JiBzdHJ1Y3R1cmVDb250ZXh0ID0gY29udGV4dC5h
c1N0cnVjdHVyZUZvckluQ29udGV4dCgpOwotICAgICAgICBPcEdldERpcmVjdFBuYW1lOjplbWl0
PE9wY29kZVNpemU6OldpZGUzMj4odGhpcywga2lsbChkc3QpLCBiYXNlLCBwcm9wZXJ0eSwgc3Ry
dWN0dXJlQ29udGV4dC5pbmRleCgpLCBzdHJ1Y3R1cmVDb250ZXh0LmVudW1lcmF0b3IoKSk7Ci0K
LSAgICAgICAgc3RydWN0dXJlQ29udGV4dC5hZGRHZXRJbnN0KG1fbGFzdEluc3RydWN0aW9uLm9m
ZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
aGF2ZSBhIGJldHRlciBieXRlY29kZSByZXdyaXRlciB0aGF0IGNhbiByZXNpemUgY2h1bmtzLgor
ICAgICAgICBPcEVudW1lcmF0b3JHZXRCeVZhbDo6ZW1pdDxPcGNvZGVTaXplOjpXaWRlMzI+KHRo
aXMsIGtpbGwoZHN0KSwgYmFzZSwgY29udGV4dC5tb2RlKCksIHByb3BlcnR5LCBjb250ZXh0LnBy
b3BlcnR5T2Zmc2V0KCksIGNvbnRleHQuZW51bWVyYXRvcigpKTsKKyAgICAgICAgY29udGV4dC5h
ZGRHZXRJbnN0KG1fbGFzdEluc3RydWN0aW9uLm9mZnNldCgpLCBwcm9wZXJ0eS0+aW5kZXgoKSk7
CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAgfQogCkBAIC00NTUyLDMzICs0NTMzLDE0IEBAIFJl
Z2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0R2xvYmFsUHJpdmF0ZShSZWdpc3Rl
cklEKiBkc3QsIGNvbnN0IElkZW50CiAgICAgcmV0dXJuIGVtaXRHZXRGcm9tU2NvcGUoZHN0LCBz
Y29wZS5nZXQoKSwgdmFyLCBUaHJvd0lmTm90Rm91bmQpOwogfQogCi1SZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlKQotewotICAgIE9wR2V0RW51bWVyYWJsZUxlbmd0aDo6ZW1pdCh0aGlz
LCBkc3QsIGJhc2UpOwotICAgIHJldHVybiBkc3Q7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eShSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSkKLXsKLSAgICBP
cEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9w
ZXJ0eU5hbWUpOwotICAgIHJldHVybiBkc3Q7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0SGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0b3JOZXh0
KFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogbW9kZSwgUmVnaXN0ZXJJRCog
aW5kZXgsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpCiB7Ci0gICAg
T3BIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBw
cm9wZXJ0eU5hbWUsIGVudW1lcmF0b3IpOwotICAgIHJldHVybiBkc3Q7CisgICAgT3BFbnVtZXJh
dG9yTmV4dDo6ZW1pdCh0aGlzLCBwcm9wZXJ0eU5hbWUsIG1vZGUsIGluZGV4LCBiYXNlLCBlbnVt
ZXJhdG9yKTsKIH0KIAotUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIYXNFbnVt
ZXJhYmxlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3Rl
cklEKiBwcm9wZXJ0eU5hbWUpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2Us
IFJlZ2lzdGVySUQqIG1vZGUsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCog
aW5kZXgsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpCiB7Ci0gICAgT3BIYXNFbnVtZXJhYmxlUHJv
cGVydHk6OmVtaXQodGhpcywgZHN0LCBiYXNlLCBwcm9wZXJ0eU5hbWUpOwotICAgIHJldHVybiBk
c3Q7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGFzT3duU3RydWN0
dXJlUHJvcGVydHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklE
KiBwcm9wZXJ0eU5hbWUsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IpCi17Ci0gICAgT3BIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eTo6ZW1pdCh0aGlzLCBkc3QsIGJhc2UsIHByb3BlcnR5TmFtZSwgZW51
bWVyYXRvcik7CisgICAgT3BFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6OmVtaXQodGhpcywgZHN0
LCBiYXNlLCBtb2RlLCBwcm9wZXJ0eU5hbWUsIGluZGV4LCBlbnVtZXJhdG9yKTsKICAgICByZXR1
cm4gZHN0OwogfQogCkBAIC00NTg4LDI0ICs0NTUwLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3QKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdEVudW1lcmF0b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCkKLXsKLSAgICBPcEVudW1lcmF0
b3JTdHJ1Y3R1cmVQbmFtZTo6ZW1pdCh0aGlzLCBkc3QsIGVudW1lcmF0b3IsIGluZGV4KTsKLSAg
ICByZXR1cm4gZHN0OwotfQotCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVu
dW1lcmF0b3JHZW5lcmljUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCog
ZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpCi17Ci0gICAgT3BFbnVtZXJhdG9yR2VuZXJp
Y1BuYW1lOjplbWl0KHRoaXMsIGRzdCwgZW51bWVyYXRvciwgaW5kZXgpOwotICAgIHJldHVybiBk
c3Q7Ci19Ci0KLVJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmlu
ZyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGluZGV4KQotewotICAgIE9wVG9JbmRleFN0
cmluZzo6ZW1pdCh0aGlzLCBkc3QsIGluZGV4KTsKLSAgICByZXR1cm4gZHN0OwotfQotCiBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdElzQ2VsbFdpdGhUeXBlKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc3JjLCBKU1R5cGUgdHlwZSkKIHsKICAgICBPcElzQ2VsbFdpdGhU
eXBlOjplbWl0KHRoaXMsIGRzdCwgc3JjLCB0eXBlKTsKQEAgLTQ2NDgsMjMgKzQ1OTIsNiBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0
LCBSZWdpc3RlcklEKiBzcmMpCiAgICAgcmV0dXJuIGRzdDsKIH0KIAotdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIs
IFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIpCi17Ci0gICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgdW5zaWduZWQgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQgPSBp
bnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9mb3JJbkNvbnRleHRTdGFjay5hcHBlbmQoYWRv
cHRSZWYoKm5ldyBJbmRleGVkRm9ySW5Db250ZXh0KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0
ZXIsIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KSkpOwotfQotCi12b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjpwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyKQotewot
ICAgIGlmICghbG9jYWxSZWdpc3RlcikKLSAgICAgICAgcmV0dXJuOwotICAgIHVuc2lnbmVkIGJv
ZHlCeXRlY29kZUVuZE9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLSAgICBtX2Zvcklu
Q29udGV4dFN0YWNrLmxhc3QoKS0+YXNJbmRleGVkRm9ySW5Db250ZXh0KCkuZmluYWxpemUoKnRo
aXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgIG1fZm9y
SW5Db250ZXh0U3RhY2sucmVtb3ZlTGFzdCgpOwotfQotCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExvYWRBcnJvd0Z1bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KGNvbnN0IElk
ZW50aWZpZXImIGlkZW50aWZpZXIpCiB7CiAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5pc0Fycm93
RnVuY3Rpb24oKSB8fCBtX2NvZGVCbG9jay0+aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCgpIHx8IGNv
bnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RXh0ZW5kcyB8fCBtX2NvZGVUeXBl
ID09IEV2YWxDb2RlIHx8IG1fY29kZUJsb2NrLT5wYXJzZU1vZGUoKSA9PSBTb3VyY2VQYXJzZU1v
ZGU6OkNsYXNzRmllbGRJbml0aWFsaXplck1vZGUpOwpAQCAtNDc2OCwyMCArNDY5NSwyMCBAQCB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHV0VGhpc1RvQXJyb3dGdW5jdGlvbkNvbnRleHRT
Y29wZSgpCiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoU3RydWN0dXJl
Rm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJl
Z2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJh
dG9yUmVnaXN0ZXIsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2VWYXJpYWJsZSkKK3ZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0
ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZVJlZ2lzdGVyLCBSZWdpc3RlcklEKiBwcm9wZXJ0
eU9mZnNldFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yUmVnaXN0ZXIsIFJlZ2lzdGVy
SUQqIG1vZGVSZWdpc3Rlciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlKQog
ewogICAgIGlmICghbG9jYWxSZWdpc3RlcikKICAgICAgICAgcmV0dXJuOwogICAgIHVuc2lnbmVk
IGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOwotICAgIG1f
Zm9ySW5Db250ZXh0U3RhY2suYXBwZW5kKGFkb3B0UmVmKCpuZXcgU3RydWN0dXJlRm9ySW5Db250
ZXh0KGxvY2FsUmVnaXN0ZXIsIGluZGV4UmVnaXN0ZXIsIHByb3BlcnR5UmVnaXN0ZXIsIGVudW1l
cmF0b3JSZWdpc3RlciwgYmFzZVZhcmlhYmxlLCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkpKTsK
KyAgICBtX2ZvckluQ29udGV4dFN0YWNrLmFwcGVuZChhZG9wdFJlZigqbmV3IEZvckluQ29udGV4
dChsb2NhbFJlZ2lzdGVyLCBwcm9wZXJ0eU5hbWVSZWdpc3RlciwgcHJvcGVydHlPZmZzZXRSZWdp
c3RlciwgZW51bWVyYXRvclJlZ2lzdGVyLCBtb2RlUmVnaXN0ZXIsIGJhc2VWYXJpYWJsZSwgYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpKSk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnBv
cFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikKK3ZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OnBvcEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlcikK
IHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCk7Ci0gICAgbV9m
b3JJbkNvbnRleHRTdGFjay5sYXN0KCktPmFzU3RydWN0dXJlRm9ySW5Db250ZXh0KCkuZmluYWxp
emUoKnRoaXMsIG1fY29kZUJsb2NrLmdldCgpLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOworICAg
IG1fZm9ySW5Db250ZXh0U3RhY2subGFzdCgpLT5maW5hbGl6ZSgqdGhpcywgbV9jb2RlQmxvY2su
Z2V0KCksIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7CiAgICAgbV9mb3JJbkNvbnRleHRTdGFjay5y
ZW1vdmVMYXN0KCk7CiB9CiAKQEAgLTUzODQsMzQgKzUzMTEsNyBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0T3B0aW9uYWxDaGVjayhSZWdpc3RlcklEKiBzcmMpCiAgICAgZW1pdEp1bXBJ
ZlRydWUoZW1pdElzVW5kZWZpbmVkT3JOdWxsKG5ld1RlbXBvcmFyeSgpLCBzcmMpLCBtX29wdGlv
bmFsQ2hhaW5UYXJnZXRTdGFjay5sYXN0KCkuZ2V0KCkpOwogfQogCi12b2lkIEZvckluQ29udGV4
dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxv
Y2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5zaWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQot
ewotICAgIC8vIExleGljYWxseSBpbnZhbGlkYXRpbmcgRm9ySW5Db250ZXh0cyBpcyBraW5kIG9m
IHdlYWsgc2F1Y2UsIGJ1dCBpdCBvbmx5IG9jY3VycyBpZgotICAgIC8vIGVpdGhlciBvZiB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgdHJ1ZToKLSAgICAvLwotICAgIC8vICgxKSBUaGUgbG9v
cCBpdGVyYXRpb24gdmFyaWFibGUgaXMgcmUtYXNzaWduZWQgd2l0aGluIHRoZSBib2R5IG9mIHRo
ZSBsb29wLgotICAgIC8vICgyKSBUaGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgaXMgY2FwdHVy
ZWQgaW4gdGhlIGxleGljYWwgc2NvcGUgb2YgdGhlIGZ1bmN0aW9uLgotICAgIC8vCi0gICAgLy8g
VGhlc2UgdHdvIHNpdHVhdGlvbnMgb2NjdXIgc3VmZmljaWVudGx5IHJhcmVseSB0aGF0IGl0J3Mg
b2theSB0byB1c2UgdGhpcyBzdHlsZSBvZgotICAgIC8vICJhbmFseXNpcyIgdG8gbWFrZSBpdGVy
YXRpb24gZmFzdGVyLiBJZiB3ZSBkaWRuJ3Qgd2FudCB0byBkbyB0aGlzLCB3ZSB3b3VsZCBlaXRo
ZXIgaGF2ZQotICAgIC8vIHRvIHBlcmZvcm0gc29tZSBmbG93LXNlbnNpdGl2ZSBhbmFseXNpcyB0
byBzZWUgaWYvd2hlbiB0aGUgbG9vcCBpdGVyYXRpb24gdmFyaWFibGUgd2FzCi0gICAgLy8gcmVh
c3NpZ25lZCwgb3Igd2UnZCBoYXZlIHRvIHJlc29ydCB0byBydW50aW1lIGNoZWNrcyB0byBzZWUg
aWYgdGhlIHZhcmlhYmxlIGhhZCBiZWVuCi0gICAgLy8gcmVhc3NpZ25lZCBmcm9tIGl0cyBvcmln
aW5hbCB2YWx1ZS4KLQotICAgIGZvciAodW5zaWduZWQgb2Zmc2V0ID0gYm9keUJ5dGVjb2RlU3Rh
cnRPZmZzZXQoKTsgaXNWYWxpZCgpICYmIG9mZnNldCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDsp
IHsKLSAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5h
dChvZmZzZXQpOwotICAgICAgICBBU1NFUlQoIWluc3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsK
LSAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNrcG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVy
T2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07KSB7Ci0gICAgICAgICAgICBjb21wdXRlRGVm
c0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBpbnN0cnVjdGlvbi5wdHIoKSwgY2hlY2twb2lu
dCwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgIGlmIChs
b2NhbCgpLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBvcGVyYW5kKQotICAgICAgICAgICAgICAgICAg
ICBpbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgICAgICBvZmZz
ZXQgKz0gaW5zdHJ1Y3Rpb24tPnNpemUoKTsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBPbGRPcFR5cGUsIHR5cGVuYW1lIFR1cGxlVHlwZT4KK3RlbXBsYXRlIDx0eXBlbmFtZSBPbGRP
cFR5cGUsIHR5cGVuYW1lIE5ld09wVHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgogQUxXQVlTX0lO
TElORSB2b2lkIHJld3JpdGVPcChCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBUdXBsZVR5
cGUmIGluc3RUdXBsZSkKIHsKICAgICB1bnNpZ25lZCBpbnN0SW5kZXggPSBzdGQ6OmdldDwwPihp
bnN0VHVwbGUpOwpAQCAtNTQzMSwzNCArNTMzMSw1MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgcmV3
cml0ZU9wKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFR1cGxlVHlwZSYgaW5zdFR1cGxl
KQogICAgIC8vIDIuIGJhc2Ugc3RheXMgdGhlIHNhbWUuCiAgICAgLy8gMy4gcHJvcGVydHkgZ2V0
cyBzd2l0Y2hlZCB0byB0aGUgb3JpZ2luYWwgcHJvcGVydHkuCiAKLSAgICBpZiBjb25zdGV4cHIg
KHN0ZDo6aXNfc2FtZTxPbGRPcFR5cGUsIE9wR2V0RGlyZWN0UG5hbWU+Ojp2YWx1ZSkgewotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEdldEJ5VmFsKSA8PSBzaXplb2YoT3BHZXREaXJl
Y3RQbmFtZSkpOwotICAgICAgICBPcEdldEJ5VmFsOjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4o
JmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKLSAgICB9IGVsc2UgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWU8T2xkT3BUeXBlLCBPcEluU3RydWN0dXJlUHJvcGVydHk+Ojp2YWx1ZSkgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KHNpemVvZihPcEluQnlWYWwpIDw9IHNpemVvZihPcEluU3RydWN0dXJl
UHJvcGVydHkpKTsKLSAgICAgICAgT3BJbkJ5VmFsOjplbWl0PE9wY29kZVNpemU6OldpZGUzMj4o
JmdlbmVyYXRvciwgYnl0ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lz
dGVyKHByb3BlcnR5UmVnSW5kZXgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihOZXdPcFR5cGUpIDw9
IHNpemVvZihPbGRPcFR5cGUpKTsKKyAgICBOZXdPcFR5cGU6OmVtaXQoJmdlbmVyYXRvciwgYnl0
ZWNvZGUubV9kc3QsIGJ5dGVjb2RlLm1fYmFzZSwgVmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5UmVn
SW5kZXgpKTsKIAogICAgIC8vIDQuIG5vcCBvdXQgdGhlIHJlbWFpbmluZyBieXRlcwogICAgIHdo
aWxlIChnZW5lcmF0b3IubV93cml0ZXIucG9zaXRpb24oKSA8IGVuZCkKICAgICAgICAgT3BOb3A6
OmVtaXQ8T3Bjb2RlU2l6ZTo6TmFycm93PigmZ2VuZXJhdG9yKTsKIH0KIAotdm9pZCBTdHJ1Y3R1
cmVGb3JJbkNvbnRleHQ6OmZpbmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVu
bGlua2VkQ29kZUJsb2NrR2VuZXJhdG9yKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJvZHlCeXRlY29k
ZUVuZE9mZnNldCkKK3ZvaWQgRm9ySW5Db250ZXh0OjpmaW5hbGl6ZShCeXRlY29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciogY29kZUJsb2NrLCB1bnNp
Z25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpCiB7Ci0gICAgQmFzZTo6ZmluYWxpemUoZ2VuZXJh
dG9yLCBjb2RlQmxvY2ssIGJvZHlCeXRlY29kZUVuZE9mZnNldCk7Ci0gICAgaWYgKGlzVmFsaWQo
KSkKKyAgICAvLyBMZXhpY2FsbHkgaW52YWxpZGF0aW5nIEZvckluQ29udGV4dHMgaXMga2luZCBv
ZiB3ZWFrIHNhdWNlLCBidXQgaXQgb25seSBvY2N1cnMgaWYKKyAgICAvLyBlaXRoZXIgb2YgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGlzIHRydWU6CisgICAgLy8KKyAgICAvLyAoMSkgVGhlIGxv
b3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIHJlLWFzc2lnbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0
aGUgbG9vcC4KKyAgICAvLyAoMikgVGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIGlzIGNhcHR1
cmVkIGluIHRoZSBsZXhpY2FsIHNjb3BlIG9mIHRoZSBmdW5jdGlvbi4KKyAgICAvLworICAgIC8v
IFRoZXNlIHR3byBzaXR1YXRpb25zIG9jY3VyIHN1ZmZpY2llbnRseSByYXJlbHkgdGhhdCBpdCdz
IG9rYXkgdG8gdXNlIHRoaXMgc3R5bGUgb2YKKyAgICAvLyAiYW5hbHlzaXMiIHRvIG1ha2UgaXRl
cmF0aW9uIGZhc3Rlci4gSWYgd2UgZGlkbid0IHdhbnQgdG8gZG8gdGhpcywgd2Ugd291bGQgZWl0
aGVyIGhhdmUKKyAgICAvLyB0byBwZXJmb3JtIHNvbWUgZmxvdy1zZW5zaXRpdmUgYW5hbHlzaXMg
dG8gc2VlIGlmL3doZW4gdGhlIGxvb3AgaXRlcmF0aW9uIHZhcmlhYmxlIHdhcworICAgIC8vIHJl
YXNzaWduZWQsIG9yIHdlJ2QgaGF2ZSB0byByZXNvcnQgdG8gcnVudGltZSBjaGVja3MgdG8gc2Vl
IGlmIHRoZSB2YXJpYWJsZSBoYWQgYmVlbgorICAgIC8vIHJlYXNzaWduZWQgZnJvbSBpdHMgb3Jp
Z2luYWwgdmFsdWUuCisKKyAgICBib29sIGVzY2FwZWQgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2ln
bmVkIG9mZnNldCA9IGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCk7ICFlc2NhcGVkICYmIG9mZnNl
dCA8IGJvZHlCeXRlY29kZUVuZE9mZnNldDspIHsKKyAgICAgICAgYXV0byBpbnN0cnVjdGlvbiA9
IGdlbmVyYXRvci5pbnN0cnVjdGlvbnMoKS5hdChvZmZzZXQpOworICAgICAgICBBU1NFUlQoIWlu
c3RydWN0aW9uLT5pczxPcEVudGVyPigpKTsKKyAgICAgICAgZm9yIChDaGVja3BvaW50IGNoZWNr
cG9pbnQgPSBpbnN0cnVjdGlvbi0+bnVtYmVyT2ZDaGVja3BvaW50cygpOyBjaGVja3BvaW50LS07
KSB7CisgICAgICAgICAgICBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlSW5kZXgoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbi5wdHIoKSwgY2hlY2twb2ludCwgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkgeworICAgICAgICAgICAgICAgIGlmIChsb2NhbCgpLT52aXJ0dWFsUmVnaXN0ZXIoKSA9PSBv
cGVyYW5kKQorICAgICAgICAgICAgICAgICAgICBlc2NhcGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIG9mZnNldCArPSBpbnN0cnVjdGlvbi0+c2l6ZSgpOwor
ICAgIH0KKworICAgIGlmICghZXNjYXBlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgT3Bjb2Rl
SUQgbGFzdE9wY29kZUlEID0gZ2VuZXJhdG9yLm1fbGFzdE9wY29kZUlEOwogICAgIEluc3RydWN0
aW9uU3RyZWFtOjpNdXRhYmxlUmVmIGxhc3RJbnN0cnVjdGlvbiA9IGdlbmVyYXRvci5tX2xhc3RJ
bnN0cnVjdGlvbjsKIAogICAgIGZvciAoY29uc3QgYXV0byYgaW5zdFR1cGxlIDogbV9nZXRJbnN0
cykKLSAgICAgICAgcmV3cml0ZU9wPE9wR2V0RGlyZWN0UG5hbWU+KGdlbmVyYXRvciwgaW5zdFR1
cGxlKTsKKyAgICAgICAgcmV3cml0ZU9wPE9wRW51bWVyYXRvckdldEJ5VmFsLCBPcEdldEJ5VmFs
PihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RUdXBs
ZSA6IG1faW5JbnN0cykKLSAgICAgICAgcmV3cml0ZU9wPE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0eT4o
Z2VuZXJhdG9yLCBpbnN0VHVwbGUpOworICAgICAgICByZXdyaXRlT3A8T3BFbnVtZXJhdG9ySW5C
eVZhbCwgT3BJbkJ5VmFsPihnZW5lcmF0b3IsIGluc3RUdXBsZSk7CiAKICAgICBmb3IgKGNvbnN0
IGF1dG8mIGhhc093blByb3BlcnR5VHVwbGUgOiBtX2hhc093blByb3BlcnR5SnVtcEluc3RzKSB7
CiAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKE9wSm1wKSA8PSBzaXplb2YoT3BKbmVxUHRy
KSk7CkBAIC01NDg3LDIyICs1NDA1LDYgQEAgdm9pZCBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ6OmZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFVubGlua2VkQ29kZUIKICAgICB9
CiB9CiAKLXZvaWQgSW5kZXhlZEZvckluQ29udGV4dDo6ZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0
b3ImIGdlbmVyYXRvciwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqIGNvZGVCbG9jaywgdW5z
aWduZWQgYm9keUJ5dGVjb2RlRW5kT2Zmc2V0KQotewotICAgIEJhc2U6OmZpbmFsaXplKGdlbmVy
YXRvciwgY29kZUJsb2NrLCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwotICAgIGlmIChpc1ZhbGlk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoY29uc3QgYXV0byYgaW5zdFBhaXIgOiBt
X2dldEluc3RzKSB7Ci0gICAgICAgIHVuc2lnbmVkIGluc3RJbmRleCA9IGluc3RQYWlyLmZpcnN0
OwotICAgICAgICBpbnQgcHJvcGVydHlSZWdJbmRleCA9IGluc3RQYWlyLnNlY29uZDsKLSAgICAg
ICAgZ2VuZXJhdG9yLm1fd3JpdGVyLnJlZihpbnN0SW5kZXgpLT5jYXN0PE9wR2V0QnlWYWw+KCkt
PnNldFByb3BlcnR5KFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eVJlZ0luZGV4KSwgW10oKSB7Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiBWaXJ0
dWFsUmVnaXN0ZXIoKTsKLSAgICAgICAgfSk7Ci0gICAgfQotfQotCiB2b2lkIFN0YXRpY1Byb3Bl
cnR5QW5hbHlzaXM6OnJlY29yZCgpCiB7CiAgICAgYXV0byogaW5zdHJ1Y3Rpb24gPSBtX2luc3Ry
dWN0aW9uUmVmLnB0cigpOwpAQCAtNTUyOCwxNyArNTQzMCwxNCBAQCB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0VG9UaGlzKCkKICAgICBPcFRvVGhpczo6ZW1pdCh0aGlzLCBraWxsKCZtX3Ro
aXNSZWdpc3RlciksIGVjbWFNb2RlKCkpOwogfQogCi1TdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjpmaW5kU3RydWN0dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIHBy
b3BlcnR5KQorRm9ySW5Db250ZXh0KiBCeXRlY29kZUdlbmVyYXRvcjo6ZmluZEZvckluQ29udGV4
dChSZWdpc3RlcklEKiBwcm9wZXJ0eSkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gbV9mb3JJbkNv
bnRleHRTdGFjay5zaXplKCk7IGktLTsgKSB7CiAgICAgICAgIEZvckluQ29udGV4dCYgY29udGV4
dCA9IG1fZm9ySW5Db250ZXh0U3RhY2tbaV0uZ2V0KCk7CiAgICAgICAgIGlmIChjb250ZXh0Lmxv
Y2FsKCkgIT0gcHJvcGVydHkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAo
IWNvbnRleHQuaXNTdHJ1Y3R1cmVGb3JJbkNvbnRleHQoKSkKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIHJldHVybiAmY29udGV4dC5hc1N0cnVjdHVyZUZvckluQ29udGV4dCgpOworICAg
ICAgICByZXR1cm4gJmNvbnRleHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgKaW5kZXggMmY1ZmY3MjMyNjQyNmIxMmU0YTAzY2NjN2NmZGI2ODRkYWU1OTkxNC4uZjU0
ZDg0ZmVkZTIzZjU5ZmE3YTEzOTQ4OThmZWVmMWQ0MzhmNTQzZCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAt
NjEsOCArNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEpTSW1tdXRhYmxlQnV0
dGVyZmx5OwogICAgIGNsYXNzIElkZW50aWZpZXI7Ci0gICAgY2xhc3MgSW5kZXhlZEZvckluQ29u
dGV4dDsKLSAgICBjbGFzcyBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQ7CisgICAgY2xhc3MgRm9ySW5D
b250ZXh0OwogCiAgICAgZW51bSBFeHBlY3RlZEZ1bmN0aW9uIHsKICAgICAgICAgTm9FeHBlY3Rl
ZEZ1bmN0aW9uLApAQCAtMjU1LDcyICsyNTQsMTkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgRm9ySW5Db250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8Rm9ySW5Db250ZXh0PiB7CiAgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShGb3JJbkNvbnRleHQpOwotICAgIHB1YmxpYzoKLSAgICAgICAgdmlydHVhbCB+Rm9ySW5Db250
ZXh0KCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IG1faXNWYWxpZDsgfQotICAgICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1faXNWYWxpZCA9IGZh
bHNlOyB9Ci0KLSAgICAgICAgZW51bSBjbGFzcyBUeXBlIDogdWludDhfdCB7Ci0gICAgICAgICAg
ICBJbmRleGVkRm9ySW4sCi0gICAgICAgICAgICBTdHJ1Y3R1cmVGb3JJbgotICAgICAgICB9Owot
Ci0gICAgICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgICAgICBi
b29sIGlzSW5kZXhlZEZvckluQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBl
OjpJbmRleGVkRm9ySW47IH0KLSAgICAgICAgYm9vbCBpc1N0cnVjdHVyZUZvckluQ29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpTdHJ1Y3R1cmVGb3JJbjsgfQotCi0gICAg
ICAgIEluZGV4ZWRGb3JJbkNvbnRleHQmIGFzSW5kZXhlZEZvckluQ29udGV4dCgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChpc0luZGV4ZWRGb3JJbkNvbnRleHQoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8SW5kZXhlZEZvckluQ29udGV4dCo+KHRoaXMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgU3RydWN0dXJlRm9ySW5Db250ZXh0JiBhc1N0cnVjdHVy
ZUZvckluQ29udGV4dCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChpc1N0cnVjdHVy
ZUZvckluQ29udGV4dCgpKTsKLSAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxT
dHJ1Y3R1cmVGb3JJbkNvbnRleHQqPih0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZ2lz
dGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9Ci0K
LSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIEZvckluQ29udGV4dChSZWdpc3RlcklEKiBsb2NhbFJl
Z2lzdGVyLCBUeXBlIHR5cGUsIHVuc2lnbmVkIGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQotICAg
ICAgICAgICAgOiBtX2xvY2FsUmVnaXN0ZXIobG9jYWxSZWdpc3RlcikKLSAgICAgICAgICAgICwg
bV90eXBlKHR5cGUpCi0gICAgICAgICAgICAsIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQoYm9k
eUJ5dGVjb2RlU3RhcnRPZmZzZXQpCi0gICAgICAgIHsgfQotCi0gICAgICAgIHVuc2lnbmVkIGJv
ZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldDsgfQotCi0gICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNvZGVHZW5lcmF0b3ImLCBV
bmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlCeXRlY29kZUVuZE9mZnNl
dCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJl
Z2lzdGVyOwotICAgICAgICBib29sIG1faXNWYWxpZCB7IHRydWUgfTsKLSAgICAgICAgVHlwZSBt
X3R5cGU7Ci0gICAgICAgIHVuc2lnbmVkIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7Ci0gICAg
fTsKLQotICAgIGNsYXNzIFN0cnVjdHVyZUZvckluQ29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRl
eHQgewotICAgICAgICB1c2luZyBCYXNlID0gRm9ySW5Db250ZXh0OwogICAgIHB1YmxpYzoKICAg
ICAgICAgdXNpbmcgR2V0SW5zdCA9IHN0ZDo6dHVwbGU8dW5zaWduZWQsIGludD47CiAgICAgICAg
IHVzaW5nIEluSW5zdCA9IEdldEluc3Q7CiAgICAgICAgIHVzaW5nIEhhc093blByb3BlcnR5SnVt
cEluc3QgPSBzdGQ6OnR1cGxlPHVuc2lnbmVkLCB1bnNpZ25lZD47CiAKLSAgICAgICAgU3RydWN0
dXJlRm9ySW5Db250ZXh0KFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGlu
ZGV4UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGVu
dW1lcmF0b3JSZWdpc3Rlciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgIDogRm9ySW5Db250
ZXh0KGxvY2FsUmVnaXN0ZXIsIFR5cGU6OlN0cnVjdHVyZUZvckluLCBib2R5Qnl0ZWNvZGVTdGFy
dE9mZnNldCkKLSAgICAgICAgICAgICwgbV9pbmRleFJlZ2lzdGVyKGluZGV4UmVnaXN0ZXIpCi0g
ICAgICAgICAgICAsIG1fcHJvcGVydHlSZWdpc3Rlcihwcm9wZXJ0eVJlZ2lzdGVyKQotICAgICAg
ICAgICAgLCBtX2VudW1lcmF0b3JSZWdpc3RlcihlbnVtZXJhdG9yUmVnaXN0ZXIpCi0gICAgICAg
ICAgICAsIG1fYmFzZVZhcmlhYmxlKGJhc2VWYXJpYWJsZSkKLSAgICAgICAgewotICAgICAgICB9
CisgICAgICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorICAg
ICAgICB2b2lkIGludmFsaWRhdGUoKSB7IG1faXNWYWxpZCA9IGZhbHNlOyB9CiAKLSAgICAgICAg
UmVnaXN0ZXJJRCogaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4UmVnaXN0ZXIuZ2V0KCk7
IH0KLSAgICAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnR5UmVnaXN0ZXIuZ2V0KCk7IH0KLSAgICAgICAgUmVnaXN0ZXJJRCogZW51bWVyYXRvcigpIGNv
bnN0IHsgcmV0dXJuIG1fZW51bWVyYXRvclJlZ2lzdGVyLmdldCgpOyB9CisgICAgICAgIFJlZ2lz
dGVySUQqIGxvY2FsKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbFJlZ2lzdGVyLmdldCgpOyB9Cisg
ICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVy
dHlOYW1lLmdldCgpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIHByb3BlcnR5T2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9wcm9wZXJ0eU9mZnNldC5nZXQoKTsgfQorICAgICAgICBSZWdpc3RlcklE
KiBlbnVtZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9lbnVtZXJhdG9yLmdldCgpOyB9CisgICAg
ICAgIFJlZ2lzdGVySUQqIG1vZGUoKSBjb25zdCB7IHJldHVybiBtX21vZGUuZ2V0KCk7IH0KICAg
ICAgICAgY29uc3Qgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4mIGJhc2VWYXJpYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFzZVZhcmlhYmxlOyB9CiAKICAgICAgICAgdm9pZCBhZGRHZXRJbnN0KHVu
c2lnbmVkIGluc3RJbmRleCwgaW50IHByb3BlcnR5UmVnSW5kZXgpCkBAIC0zMzgsMzcgKzI4NCwz
NCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIG1faGFzT3duUHJvcGVydHlKdW1wSW5z
dHMuYXBwZW5kKEhhc093blByb3BlcnR5SnVtcEluc3QgeyBicmFuY2hJbnN0SW5kZXgsIGdlbmVy
aWNQYXRoVGFyZ2V0IH0pOwogICAgICAgICB9CiAKKyAgICAgICAgRm9ySW5Db250ZXh0KFJlZ2lz
dGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJ
RCogcHJvcGVydHlPZmZzZXQsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIG1v
ZGUsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2VWYXJpYWJsZSwgdW5zaWduZWQgYm9keUJ5
dGVjb2RlU3RhcnRPZmZzZXQpCisgICAgICAgICAgICA6IG1fbG9jYWxSZWdpc3Rlcihsb2NhbFJl
Z2lzdGVyKQorICAgICAgICAgICAgLCBtX3Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpCisgICAg
ICAgICAgICAsIG1fcHJvcGVydHlPZmZzZXQocHJvcGVydHlPZmZzZXQpCisgICAgICAgICAgICAs
IG1fZW51bWVyYXRvcihlbnVtZXJhdG9yKQorICAgICAgICAgICAgLCBtX21vZGUobW9kZSkKKyAg
ICAgICAgICAgICwgbV9iYXNlVmFyaWFibGUoYmFzZVZhcmlhYmxlKQorICAgICAgICAgICAgLCBt
X2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KGJvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0KQorICAgICAg
ICB7IH0KKworICAgICAgICB1bnNpZ25lZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQ7IH0KKwogICAgICAgICB2b2lkIGZp
bmFsaXplKEJ5dGVjb2RlR2VuZXJhdG9yJiwgVW5saW5rZWRDb2RlQmxvY2tHZW5lcmF0b3IqLCB1
bnNpZ25lZCBib2R5Qnl0ZWNvZGVFbmRPZmZzZXQpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IG1faW5kZXhSZWdpc3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IG1fcHJvcGVydHlSZWdpc3RlcjsKLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1f
ZW51bWVyYXRvclJlZ2lzdGVyOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sb2NhbFJl
Z2lzdGVyOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9wZXJ0eU5hbWU7CisgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBtX3Byb3BlcnR5T2Zmc2V0OworICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gbV9lbnVtZXJhdG9yOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9t
b2RlOwogICAgICAgICBzdGQ6Om9wdGlvbmFsPFZhcmlhYmxlPiBtX2Jhc2VWYXJpYWJsZTsKLSAg
ICAgICAgVmVjdG9yPEdldEluc3Q+IG1fZ2V0SW5zdHM7CisgICAgICAgIGJvb2wgbV9pc1ZhbGlk
IHsgdHJ1ZSB9OworICAgICAgICB1bnNpZ25lZCBtX2JvZHlCeXRlY29kZVN0YXJ0T2Zmc2V0Owog
ICAgICAgICBWZWN0b3I8SW5JbnN0PiBtX2luSW5zdHM7CisgICAgICAgIFZlY3RvcjxHZXRJbnN0
PiBtX2dldEluc3RzOwogICAgICAgICBWZWN0b3I8SGFzT3duUHJvcGVydHlKdW1wSW5zdD4gbV9o
YXNPd25Qcm9wZXJ0eUp1bXBJbnN0czsKICAgICB9OwogCi0gICAgY2xhc3MgSW5kZXhlZEZvcklu
Q29udGV4dCA6IHB1YmxpYyBGb3JJbkNvbnRleHQgewotICAgICAgICB1c2luZyBCYXNlID0gRm9y
SW5Db250ZXh0OwotICAgIHB1YmxpYzoKLSAgICAgICAgSW5kZXhlZEZvckluQ29udGV4dChSZWdp
c3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyLCB1bnNpZ25l
ZCBib2R5Qnl0ZWNvZGVTdGFydE9mZnNldCkKLSAgICAgICAgICAgIDogRm9ySW5Db250ZXh0KGxv
Y2FsUmVnaXN0ZXIsIFR5cGU6OkluZGV4ZWRGb3JJbiwgYm9keUJ5dGVjb2RlU3RhcnRPZmZzZXQp
Ci0gICAgICAgICAgICAsIG1faW5kZXhSZWdpc3RlcihpbmRleFJlZ2lzdGVyKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICBSZWdpc3RlcklEKiBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXhSZWdpc3Rlci5nZXQoKTsgfQotCi0gICAgICAgIHZvaWQgZmluYWxpemUoQnl0ZWNv
ZGVHZW5lcmF0b3ImLCBVbmxpbmtlZENvZGVCbG9ja0dlbmVyYXRvciosIHVuc2lnbmVkIGJvZHlC
eXRlY29kZUVuZE9mZnNldCk7Ci0gICAgICAgIHZvaWQgYWRkR2V0SW5zdCh1bnNpZ25lZCBpbnN0
SW5kZXgsIGludCBwcm9wZXJ0eUluZGV4KSB7IG1fZ2V0SW5zdHMuYXBwZW5kKHsgaW5zdEluZGV4
LCBwcm9wZXJ0eUluZGV4IH0pOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gbV9pbmRleFJlZ2lzdGVyOwotICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPHVuc2ln
bmVkLCBpbnQ+PiBtX2dldEluc3RzOwotICAgIH07Ci0KICAgICBzdHJ1Y3QgVHJ5RGF0YSB7CiAg
ICAgICAgIFJlZjxMYWJlbD4gdGFyZ2V0OwogICAgICAgICBIYW5kbGVyVHlwZSBoYW5kbGVyVHlw
ZTsKQEAgLTM5OSwxMSArMzQyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShCeXRlY29kZUdlbmVyYXRvcik7CiAKICAgICAgICAgZnJpZW5kIGNsYXNz
IEZpbmFsbHlDb250ZXh0OwotICAgICAgICBmcmllbmQgY2xhc3MgSW5kZXhlZEZvckluQ29udGV4
dDsKLSAgICAgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZUZvckluQ29udGV4dDsKKyAgICAgICAg
ZnJpZW5kIGNsYXNzIEZvckluQ29udGV4dDsKICAgICAgICAgZnJpZW5kIGNsYXNzIFN0cmljdE1v
ZGVTY29wZTsKIAotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT2xkT3BUeXBlLCB0eXBlbmFt
ZSBUdXBsZVR5cGU+CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBPbGRPcFR5cGUsIHR5cGVu
YW1lIE5ld09wVHlwZSwgdHlwZW5hbWUgVHVwbGVUeXBlPgogICAgICAgICBmcmllbmQgdm9pZCBy
ZXdyaXRlT3AoQnl0ZWNvZGVHZW5lcmF0b3ImLCBUdXBsZVR5cGUmKTsKIAogICAgIHB1YmxpYzoK
QEAgLTY4MSw3ICs2MjMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGhvaXN0
U2xvcHB5TW9kZUZ1bmN0aW9uSWZOZWNlc3NhcnkoY29uc3QgSWRlbnRpZmllciYgZnVuY3Rpb25O
YW1lKTsKIAotICAgICAgICBTdHJ1Y3R1cmVGb3JJbkNvbnRleHQqIGZpbmRTdHJ1Y3R1cmVGb3JJ
bkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpOworICAgICAgICBGb3JJbkNvbnRleHQqIGZp
bmRGb3JJbkNvbnRleHQoUmVnaXN0ZXJJRCogcHJvcGVydHkpOwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCBlbWl0VHlwZVByb2ZpbGVyRXhwcmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9z
aXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBlbmREaXZvdCk7CkBAIC05
MTcsNyArODU5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEp1bXBJZk5v
dEZ1bmN0aW9uQ2FsbChSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYgdGFyZ2V0KTsKICAgICAgICAg
dm9pZCBlbWl0SnVtcElmTm90RnVuY3Rpb25BcHBseShSZWdpc3RlcklEKiBjb25kLCBMYWJlbCYg
dGFyZ2V0KTsKICAgICAgICAgdW5zaWduZWQgZW1pdFdpZGVKdW1wSWZOb3RGdW5jdGlvbkhhc093
blByb3BlcnR5KFJlZ2lzdGVySUQqIGNvbmQsIExhYmVsJiB0YXJnZXQpOwotICAgICAgICB2b2lk
IHJlY29yZEhhc093blN0cnVjdHVyZVByb3BlcnR5SW5Gb3JJbkxvb3AoU3RydWN0dXJlRm9ySW5D
b250ZXh0JiwgdW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpOworICAg
ICAgICB2b2lkIHJlY29yZEhhc093blByb3BlcnR5SW5Gb3JJbkxvb3AoRm9ySW5Db250ZXh0Jiwg
dW5zaWduZWQgYnJhbmNoT2Zmc2V0LCBMYWJlbCYgZ2VuZXJpY1BhdGgpOwogCiAgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEJpbk9wLCB0eXBlbmFtZSBKbXBPcD4KICAgICAgICAgYm9vbCBmdXNl
Q29tcGFyZUFuZEp1bXAoUmVnaXN0ZXJJRCogY29uZCwgTGFiZWwmIHRhcmdldCwgYm9vbCBzd2Fw
T3BlcmFuZHMgPSBmYWxzZSk7CkBAIC05MjgsMTcgKzg3MCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIGVtaXRFbnRlcigpOwogICAgICAgICB2b2lkIGVtaXRDaGVja1RyYXBzKCk7
CiAKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eU5h
bWUpOwotICAgICAgICBSZWdpc3RlcklEKiBlbWl0SGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3Bl
cnR5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJvcGVy
dHlOYW1lLCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dEhhc0VudW1lcmFibGVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2Us
IFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRIYXNP
d25TdHJ1Y3R1cmVQcm9wZXJ0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFJl
Z2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogZW51bWVyYXRvcik7CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRHZXRQcm9wZXJ0eUVudW1lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBiYXNlKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEdldEVudW1lcmFibGVM
ZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKTsKLSAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdEdldFN0cnVjdHVyZVByb3BlcnR5RW51bWVyYXRvcihSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGxlbmd0aCk7Ci0gICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRHZXRHZW5lcmljUHJvcGVydHlFbnVtZXJhdG9yKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbGVuZ3RoLCBSZWdpc3RlcklEKiBzdHJ1Y3R1cmVF
bnVtZXJhdG9yKTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
cm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdp
c3RlcklEKiBpbmRleCk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXRFbnVtZXJhdG9yR2VuZXJp
Y1Byb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJl
Z2lzdGVySUQqIGluZGV4KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRvSW5kZXhTdHJpbmco
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCk7CisgICAgICAgIHZvaWQgZW1pdEVu
dW1lcmF0b3JOZXh0KFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVnaXN0ZXJJRCogbW9kZSwg
UmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIGJhc2UsIFJlZ2lzdGVySUQqIGVudW1lcmF0
b3IpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0RW51bWVyYXRvckhhc093blByb3BlcnR5KFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogbW9kZSwgUmVnaXN0
ZXJJRCogcHJvcGVydHlOYW1lLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvcik7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzQ2VsbFdpdGhUeXBlKFJlZ2lzdGVy
SUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjLCBKU1R5cGUpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXNHZW5lcmF0b3IoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJu
IGVtaXRJc0NlbGxXaXRoVHlwZShkc3QsIHNyYywgSlNHZW5lcmF0b3JUeXBlKTsgfQpAQCAtMTA1
NywxMCArOTkxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcG9wT3B0aW9uYWxD
aGFpblRhcmdldChSZWdpc3RlcklEKiBkc3QsIGJvb2wgaXNEZWxldGUpOwogICAgICAgICB2b2lk
IGVtaXRPcHRpb25hbENoZWNrKFJlZ2lzdGVySUQqIHNyYyk7CiAKLSAgICAgICAgdm9pZCBwdXNo
SW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIGluZGV4KTsK
LSAgICAgICAgdm9pZCBwb3BJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7Ci0g
ICAgICAgIHZvaWQgcHVzaFN0cnVjdHVyZUZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJl
Z2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogZW51bWVy
YXRvciwgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZSk7Ci0gICAgICAgIHZvaWQgcG9wU3Ry
dWN0dXJlRm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbCk7CisgICAgICAgIHZvaWQgcHVzaEZv
ckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwsIFJlZ2lzdGVySUQqIHByb3BlcnR5TmFtZSwgUmVn
aXN0ZXJJRCogcHJvcGVydHlPZmZzZXQsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVy
SUQqIG1vZGUsIHN0ZDo6b3B0aW9uYWw8VmFyaWFibGU+IGJhc2UpOworICAgICAgICB2b2lkIHBv
cEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWwpOwogCiAgICAgICAgIExhYmVsU2NvcGUqIGJy
ZWFrVGFyZ2V0KGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTGFiZWxTY29wZSogY29udGlu
dWVUYXJnZXQoY29uc3QgSWRlbnRpZmllciYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCmluZGV4IDlhY2E1MTRlNjU1M2JhYWU0
NDgzYWU0NGNhYjVlZGM5NjYxYzRmZjcuLmMyNmM1NDkxYTdiZDZjYzM2ZWNkNmUyNjBiNGJmNTcz
MWNiZDNmNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L05vZGVzQ29kZWdlbi5jcHAKQEAgLTIxMzEsMjQgKzIxMzEsMjQgQEAgUmVnaXN0ZXJJRCogSGFz
T3duUHJvcGVydHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGcKICAgICBSRUxFQVNFX0FTU0VSVChtX2FyZ3MtPm1fbGlzdE5vZGUgJiYgbV9hcmdz
LT5tX2xpc3ROb2RlLT5tX2V4cHIgJiYgIW1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0KTsgIAog
ICAgIEV4cHJlc3Npb25Ob2RlKiBhcmd1bWVudCA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9leHBy
OwogICAgIFJFTEVBU0VfQVNTRVJUKGFyZ3VtZW50LT5pc1Jlc29sdmVOb2RlKCkpOwotICAgIFN0
cnVjdHVyZUZvckluQ29udGV4dCogc3RydWN0dXJlQ29udGV4dCA9IG51bGxwdHI7CisgICAgRm9y
SW5Db250ZXh0KiBjb250ZXh0ID0gbnVsbHB0cjsKICAgICBWYXJpYWJsZSBhcmd1bWVudFZhcmlh
YmxlID0gZ2VuZXJhdG9yLnZhcmlhYmxlKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4oYXJndW1l
bnQpLT5pZGVudGlmaWVyKCkpOwogICAgIGlmIChhcmd1bWVudFZhcmlhYmxlLmlzTG9jYWwoKSkg
ewogICAgICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGFyZ3VtZW50VmFyaWFibGUubG9jYWwo
KTsKLSAgICAgICAgc3RydWN0dXJlQ29udGV4dCA9IGdlbmVyYXRvci5maW5kU3RydWN0dXJlRm9y
SW5Db250ZXh0KHByb3BlcnR5KTsKKyAgICAgICAgY29udGV4dCA9IGdlbmVyYXRvci5maW5kRm9y
SW5Db250ZXh0KHByb3BlcnR5KTsKICAgICB9CiAKICAgICBhdXRvIGNhblVzZUZhc3RIYXNPd25Q
cm9wZXJ0eSA9IFsmXSB7Ci0gICAgICAgIGlmICghc3RydWN0dXJlQ29udGV4dCkKKyAgICAgICAg
aWYgKCFjb250ZXh0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXN0
cnVjdHVyZUNvbnRleHQtPmJhc2VWYXJpYWJsZSgpKQorICAgICAgICBpZiAoIWNvbnRleHQtPmJh
c2VWYXJpYWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAobV9i
YXNlLT5pc1Jlc29sdmVOb2RlKCkpCi0gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLnZhcmlh
YmxlKHN0YXRpY19jYXN0PFJlc29sdmVOb2RlKj4obV9iYXNlKS0+aWRlbnRpZmllcigpKSA9PSBz
dHJ1Y3R1cmVDb250ZXh0LT5iYXNlVmFyaWFibGUoKS52YWx1ZSgpOworICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci52YXJpYWJsZShzdGF0aWNfY2FzdDxSZXNvbHZlTm9kZSo+KG1fYmFzZSkt
PmlkZW50aWZpZXIoKSkgPT0gY29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKICAgICAg
ICAgaWYgKG1fYmFzZS0+aXNUaGlzTm9kZSgpKSB7CiAgICAgICAgICAgICAvLyBBZnRlciBnZW5l
cmF0b3IuZW5zdXJlVGhpcyAod2hpY2ggbXVzdCBiZSBpbnZva2VkIGluIHxiYXNlfCdzIG1hdGVy
aWFsaXphdGlvbiksIHdlIGNhbiBlbnN1cmUgdGhhdCB8dGhpc3wgaXMgaW4gbG9jYWwgdGhpcy1y
ZWdpc3Rlci4KICAgICAgICAgICAgIEFTU0VSVChiYXNlKTsKLSAgICAgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMo
KS50aGlzUHJpdmF0ZU5hbWUoKSwgVGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCkgPT0gc3RydWN0
dXJlQ29udGV4dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKKyAgICAgICAgICAgIHJldHVybiBn
ZW5lcmF0b3IudmFyaWFibGUoZ2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMo
KS50aGlzUHJpdmF0ZU5hbWUoKSwgVGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCkgPT0gY29udGV4
dC0+YmFzZVZhcmlhYmxlKCkudmFsdWUoKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfTsKQEAgLTIxNjAsNyArMjE2MCw3IEBAIFJlZ2lzdGVySUQqIEhhc093blByb3Bl
cnR5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBn
CiAgICAgICAgIFJlZjxMYWJlbD4gZW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7CiAKICAgICAg
ICAgdW5zaWduZWQgYnJhbmNoSW5zbk9mZnNldCA9IGdlbmVyYXRvci5lbWl0V2lkZUp1bXBJZk5v
dEZ1bmN0aW9uSGFzT3duUHJvcGVydHkoZnVuY3Rpb24uZ2V0KCksIHJlYWxDYWxsLmdldCgpKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShyZXR1cm5WYWx1
ZS5nZXQoKSwgYmFzZS5nZXQoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3VtZW50KSwgc3RydWN0
dXJlQ29udGV4dC0+ZW51bWVyYXRvcigpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJh
dG9ySGFzT3duUHJvcGVydHkocmV0dXJuVmFsdWUuZ2V0KCksIGJhc2UuZ2V0KCksIGNvbnRleHQt
Pm1vZGUoKSwgZ2VuZXJhdG9yLmVtaXROb2RlKGFyZ3VtZW50KSwgY29udGV4dC0+cHJvcGVydHlP
ZmZzZXQoKSwgY29udGV4dC0+ZW51bWVyYXRvcigpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRK
dW1wKGVuZC5nZXQoKSk7CiAKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChyZWFsQ2FsbC5n
ZXQoKSk7CkBAIC0yMTcyLDcgKzIxNzIsNyBAQCBSZWdpc3RlcklEKiBIYXNPd25Qcm9wZXJ0eUZ1
bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZwogCiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKIAotICAgICAgICBnZW5lcmF0
b3IucmVjb3JkSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbkZvckluTG9vcCgqc3RydWN0dXJlQ29u
dGV4dCwgYnJhbmNoSW5zbk9mZnNldCwgcmVhbENhbGwpOworICAgICAgICBnZW5lcmF0b3IucmVj
b3JkSGFzT3duUHJvcGVydHlJbkZvckluTG9vcCgqY29udGV4dCwgYnJhbmNoSW5zbk9mZnNldCwg
cmVhbENhbGwpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5tb3ZlKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwpAQCAtNDE4NCw4ICs0MTg0LDYgQEAg
dm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9y
LCBSZWdpc3RlcklEKiBkc3QpCiAgICAgaWYgKGdlbmVyYXRvci5zaG91bGRCZUNvbmNlcm5lZFdp
dGhDb21wbGV0aW9uVmFsdWUoKSAmJiBtX3N0YXRlbWVudC0+aGFzRWFybHlCcmVha09yQ29udGlu
dWUoKSkKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGRzdCwganNVbmRlZmluZWQoKSk7CiAK
LSAgICBSZWY8TGFiZWw+IGVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotCiAgICAgUmVnaXN0
ZXJJRCogZm9yTG9vcFN5bWJvbFRhYmxlID0gbnVsbHB0cjsKICAgICBnZW5lcmF0b3IucHVzaExl
eGljYWxTY29wZSh0aGlzLCBCeXRlY29kZUdlbmVyYXRvcjo6U2NvcGVUeXBlOjpMZXRDb25zdFNj
b3BlLCBCeXRlY29kZUdlbmVyYXRvcjo6VERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplLCBC
eXRlY29kZUdlbmVyYXRvcjo6TmVzdGVkU2NvcGVUeXBlOjpJc05lc3RlZCwgJmZvckxvb3BTeW1i
b2xUYWJsZSk7CiAKQEAgLTQxOTMsMTIgKzQxOTEsMTAgQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShnZW5lcmF0b3IuaWdub3JlZFJlc3VsdCgpLCBtX2xl
eHByKTsKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLm5ld1RlbXBv
cmFyeSgpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBsZW5ndGg7Ci0gICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGVudW1lcmF0b3I7CiAKICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYmFzZS5nZXQoKSwg
bV9leHByKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSB0aGlzLT50cnlHZXRCb3Vu
ZExvY2FsKGdlbmVyYXRvcik7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGVudW1lcmF0b3JJbmRl
eDsKKwogCiAgICAgc3RkOjpvcHRpb25hbDxWYXJpYWJsZT4gYmFzZVZhcmlhYmxlOwogICAgIGlm
IChtX2V4cHItPmlzUmVzb2x2ZU5vZGUoKSkKQEAgLTQyMDksMTM3ICs0MjA1LDQ2IEBAIHZvaWQg
Rm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogICAgICAgICBiYXNlVmFyaWFibGUgPSBnZW5lcmF0b3IudmFyaWFibGUo
Z2VuZXJhdG9yLnByb3BlcnR5TmFtZXMoKS5idWlsdGluTmFtZXMoKS50aGlzUHJpdmF0ZU5hbWUo
KSwgVGhpc1Jlc29sdXRpb25UeXBlOjpMb2NhbCk7CiAgICAgfQogCi0gICAgLy8gUGF1c2UgYXQg
dGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBmb3IgZWFjaCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAg
ICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhtX2xleHByKTsKLQogICAgIGludCBwcm9maWxlclN0
YXJ0T2Zmc2V0ID0gbV9zdGF0ZW1lbnQtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgaW50IHByb2ZpbGVy
RW5kT2Zmc2V0ID0gbV9zdGF0ZW1lbnQtPmVuZE9mZnNldCgpICsgKG1fc3RhdGVtZW50LT5pc0Js
b2NrKCkgPyAxIDogMCk7CiAKLSAgICBlbnVtZXJhdG9yID0gZ2VuZXJhdG9yLmVtaXRHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpKTsKLQot
ICAgIEJ5dGVjb2RlR2VuZXJhdG9yOjpQcmVzZXJ2ZWRURFpTdGFjayBwcmVzZXJ2ZWRURFpTdGFj
azsKLSAgICBnZW5lcmF0b3IucHJlc2VydmVURFpTdGFjayhwcmVzZXJ2ZWRURFpTdGFjayk7Ci0K
LSAgICAvLyBJbmRleGVkIHByb3BlcnR5IGxvb3AuCiAgICAgewotICAgICAgICBSZWY8TGFiZWxT
Y29wZT4gc2NvcGUgPSBnZW5lcmF0b3IubmV3TGFiZWxTY29wZShMYWJlbFNjb3BlOjpMb29wKTsK
LSAgICAgICAgUmVmPExhYmVsPiBsb29wU3RhcnQgPSBnZW5lcmF0b3IubmV3TGFiZWwoKTsKLSAg
ICAgICAgUmVmPExhYmVsPiBsb29wRW5kID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0KLSAgICAg
ICAgbGVuZ3RoID0gZ2VuZXJhdG9yLmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKSwgZW51bWVyYXRvci5nZXQoKSk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBpID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNO
dW1iZXIoMCkpOworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZW51bWVyYXRvciA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG1vZGUgPSBn
ZW5lcmF0b3IuZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcihzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbml0TW9kZSkpKTsK
KyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGluZGV4ID0gZ2VuZXJhdG9yLmVtaXRMb2FkKGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKSwganNOdW1iZXIoMCkpOwogICAgICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotCi0gICAg
ICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKLSAgICAgICAgZ2VuZXJh
dG9yLmVtaXRMb29wSGludCgpOwotCi0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQg
PSBnZW5lcmF0b3IuZW1pdEJpbmFyeU9wPE9wTGVzcz4oZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBpLmdldCgpLCBsZW5ndGguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZh
bHNlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
SGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eShyZXN1bHQuZ2V0KCksIGJhc2UuZ2V0KCksIGku
Z2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZkZhbHNlKHJlc3VsdC5nZXQoKSwg
KnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLQotICAgICAgICBnZW5lcmF0b3IuZW1pdFRvSW5k
ZXhTdHJpbmcocHJvcGVydHlOYW1lLmdldCgpLCBpLmdldCgpKTsKLSAgICAgICAgdGhpcy0+ZW1p
dExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUuZ2V0KCkpOwotCi0gICAgICAgIGdl
bmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2ZpbGVyU3RhcnRPZmZzZXQpOwotCi0g
ICAgICAgIGdlbmVyYXRvci5wdXNoSW5kZXhlZEZvckluU2NvcGUobG9jYWwuZ2V0KCksIGkuZ2V0
KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX3N0YXRlbWVudCk7Ci0gICAg
ICAgIGdlbmVyYXRvci5wb3BJbmRleGVkRm9ySW5TY29wZShsb2NhbC5nZXQoKSk7Ci0KLSAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxlQ29udHJvbEZsb3cocHJvZmlsZXJFbmRPZmZzZXQpOwot
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsK
LSAgICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJh
dGlvbih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdElu
YyhpLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1Z0hvb2sobV9sZXhwcik7IC8v
IFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9yIGVhY2ggZm9yLi5pbiBpdGVy
YXRpb24uCi0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOwotCi0g
ICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRM
YWJlbChsb29wRW5kLmdldCgpKTsKLSAgICB9Ci0gICAgZ2VuZXJhdG9yLnJlc3RvcmVURFpTdGFj
ayhwcmVzZXJ2ZWRURFpTdGFjayk7Ci0KLSAgICAvLyBTdHJ1Y3R1cmUgcHJvcGVydHkgbG9vcC4K
LSAgICB7CiAgICAgICAgIFJlZjxMYWJlbFNjb3BlPiBzY29wZSA9IGdlbmVyYXRvci5uZXdMYWJl
bFNjb3BlKExhYmVsU2NvcGU6Okxvb3ApOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BTdGFydCA9
IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotICAgICAgICBSZWY8TGFiZWw+IGxvb3BFbmQgPSBnZW5l
cmF0b3IubmV3TGFiZWwoKTsKIAotICAgICAgICBlbnVtZXJhdG9ySW5kZXggPSBnZW5lcmF0b3Iu
ZW1pdExvYWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBqc051bWJlcigwKSk7Ci0gICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5
KCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0RW51bWVyYXRvclN0cnVjdHVyZVByb3BlcnR5TmFt
ZShwcm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5n
ZXQoKSk7Ci0KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7Ci0KLSAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZU
cnVlKHJlc3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0
SGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQoKSwg
cHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9y
LmVtaXRKdW1wSWZGYWxzZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7
Ci0KLSAgICAgICAgdGhpcy0+ZW1pdExvb3BIZWFkZXIoZ2VuZXJhdG9yLCBwcm9wZXJ0eU5hbWUu
Z2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmlsZUNvbnRyb2xGbG93KHByb2Zp
bGVyU3RhcnRPZmZzZXQpOwotCi0gICAgICAgIGdlbmVyYXRvci5wdXNoU3RydWN0dXJlRm9ySW5T
Y29wZShsb2NhbC5nZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpLCBwcm9wZXJ0eU5hbWUuZ2V0
KCksIGVudW1lcmF0b3IuZ2V0KCksIGJhc2VWYXJpYWJsZSk7Ci0gICAgICAgIGdlbmVyYXRvci5l
bWl0Tm9kZShkc3QsIG1fc3RhdGVtZW50KTsKLSAgICAgICAgZ2VuZXJhdG9yLnBvcFN0cnVjdHVy
ZUZvckluU2NvcGUobG9jYWwuZ2V0KCkpOwotCi0gICAgICAgIGdlbmVyYXRvci5lbWl0UHJvZmls
ZUNvbnRyb2xGbG93KHByb2ZpbGVyRW5kT2Zmc2V0KTsKKyAgICAgICAgZW51bWVyYXRvciA9IGdl
bmVyYXRvci5lbWl0R2V0UHJvcGVydHlFbnVtZXJhdG9yKGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KSwgYmFzZS5nZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5tb3ZlTGlua1RpbWVDb25zdGFudChw
cm9wZXJ0eU5hbWUuZ2V0KCksIExpbmtUaW1lQ29uc3RhbnQ6OmVtcHR5UHJvcGVydHlOYW1lRW51
bWVyYXRvcik7CisgICAgICAgIGdlbmVyYXRvci5lbWl0RXF1YWxpdHlPcDxPcFN0cmljdGVxPihw
cm9wZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZS5nZXQoKSk7
CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElmVHJ1ZShwcm9wZXJ0eU5hbWUuZ2V0KCksIHNj
b3BlLT5icmVha1RhcmdldCgpKTsKIAogICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKCpzY29w
ZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0TG9vcEhpbnQoKTsK
ICAgICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJh
dGlvbih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdElu
YyhlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1lcmF0
b3JTdHJ1Y3R1cmVQcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lLmdldCgpLCBlbnVtZXJhdG9yLmdl
dCgpLCBlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVn
SG9vayhtX2xleHByKTsgLy8gUGF1c2UgYXQgdGhlIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiBmb3Ig
ZWFjaCBmb3IuLmluIGl0ZXJhdGlvbi4KLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGxvb3BT
dGFydC5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKHNjb3Bl
LT5icmVha1RhcmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7
Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwobG9vcEVuZC5nZXQoKSk7Ci0gICAgfQotICAg
IGdlbmVyYXRvci5yZXN0b3JlVERaU3RhY2socHJlc2VydmVkVERaU3RhY2spOwotCi0gICAgLy8g
R2VuZXJpYyBwcm9wZXJ0eSBsb29wLgotICAgIHsKLSAgICAgICAgUmVmPExhYmVsU2NvcGU+IHNj
b3BlID0gZ2VuZXJhdG9yLm5ld0xhYmVsU2NvcGUoTGFiZWxTY29wZTo6TG9vcCk7Ci0gICAgICAg
IFJlZjxMYWJlbD4gbG9vcFN0YXJ0ID0gZ2VuZXJhdG9yLm5ld0xhYmVsKCk7Ci0gICAgICAgIFJl
ZjxMYWJlbD4gbG9vcEVuZCA9IGdlbmVyYXRvci5uZXdMYWJlbCgpOwotCi0gICAgICAgIFJlZlB0
cjxSZWdpc3RlcklEPiBwcm9wZXJ0eU5hbWUgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7Ci0K
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRFbnVtZXJhdG9yR2VuZXJpY1Byb3BlcnR5TmFtZShwcm9w
ZXJ0eU5hbWUuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIGVudW1lcmF0b3JJbmRleC5nZXQoKSk7
CiAKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwotICAgICAg
ICBnZW5lcmF0b3IuZW1pdExvb3BIaW50KCk7Ci0KLSAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0SXNOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
cHJvcGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZUcnVlKHJl
c3VsdC5nZXQoKSwgbG9vcEVuZC5nZXQoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
aGF2ZSBhIHdheSB0byBzZWUgaWYgYW55b25lIGlzIGFjdHVhbGx5IHVzaW5nIHRoZSBwcm9wZXJ0
eU5hbWUgZm9yIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZ2V0X2J5X3ZhbC4gSWYgbm90LCB3ZSBj
b3VsZCBlbGltaW5hdGUgdGhlIHRvU3RyaW5nIGluIHRoaXMgb3Bjb2RlLgorICAgICAgICBnZW5l
cmF0b3IuZW1pdEVudW1lcmF0b3JOZXh0KHByb3BlcnR5TmFtZS5nZXQoKSwgbW9kZS5nZXQoKSwg
aW5kZXguZ2V0KCksIGJhc2UuZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCkpOwogCi0gICAgICAgIGdl
bmVyYXRvci5lbWl0SGFzRW51bWVyYWJsZVByb3BlcnR5KHJlc3VsdC5nZXQoKSwgYmFzZS5nZXQo
KSwgcHJvcGVydHlOYW1lLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZGYWxz
ZShyZXN1bHQuZ2V0KCksICpzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CisgICAgICAgIC8vIE5v
dGUsIGNob29zaW5nIHVuZGVmaW5lZCBvciBudWxsIGhlbHBzIHBsZWFzZSBERkcncyBBYnN0cmFj
dCBJbnRlcnByZXRlciBhcyBpdCBkb2Vzbid0IGRpc3Rpbmd1aXNoIG51bGwgYW5kIHVuZGVmaW5l
ZCBhcyB0eXBlcyAodmlhIFNwZWNPdGhlcikuCisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcElm
VHJ1ZShnZW5lcmF0b3IuZW1pdElzVW5kZWZpbmVkT3JOdWxsKGdlbmVyYXRvci5uZXdUZW1wb3Jh
cnkoKSwgcHJvcGVydHlOYW1lLmdldCgpKSwgc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOwogCiAgICAg
ICAgIHRoaXMtPmVtaXRMb29wSGVhZGVyKGdlbmVyYXRvciwgcHJvcGVydHlOYW1lLmdldCgpKTsK
IAogICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxlclN0YXJ0
T2Zmc2V0KTsKIAorICAgICAgICBnZW5lcmF0b3IucHVzaEZvckluU2NvcGUobG9jYWwuZ2V0KCks
IHByb3BlcnR5TmFtZS5nZXQoKSwgaW5kZXguZ2V0KCksIGVudW1lcmF0b3IuZ2V0KCksIG1vZGUu
Z2V0KCksIGJhc2VWYXJpYWJsZSk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1f
c3RhdGVtZW50KTsKKyAgICAgICAgZ2VuZXJhdG9yLnBvcEZvckluU2NvcGUobG9jYWwuZ2V0KCkp
OwogCi0gICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoKnNjb3BlLT5jb250aW51ZVRhcmdldCgp
KTsKLSAgICAgICAgZ2VuZXJhdG9yLnByZXBhcmVMZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0
ZXJhdGlvbih0aGlzLCBmb3JMb29wU3ltYm9sVGFibGUpOwotICAgICAgICBnZW5lcmF0b3IuZW1p
dEluYyhlbnVtZXJhdG9ySW5kZXguZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEVudW1l
cmF0b3JHZW5lcmljUHJvcGVydHlOYW1lKHByb3BlcnR5TmFtZS5nZXQoKSwgZW51bWVyYXRvci5n
ZXQoKSwgZW51bWVyYXRvckluZGV4LmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVtaXREZWJ1
Z0hvb2sobV9sZXhwcik7IC8vIFBhdXNlIGF0IHRoZSBhc3NpZ25tZW50IGV4cHJlc3Npb24gZm9y
IGVhY2ggZm9yLi5pbiBpdGVyYXRpb24uCi0gICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChsb29w
U3RhcnQuZ2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhw
cm9maWxlckVuZE9mZnNldCk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcCgqc2NvcGUtPmNv
bnRpbnVlVGFyZ2V0KCkpOwogCiAgICAgICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoc2NvcGUtPmJy
ZWFrVGFyZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdEp1bXAoZW5kLmdldCgpKTsKLSAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChsb29wRW5kLmdldCgpKTsKICAgICB9CiAKLSAgICBn
ZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLnBvcExleGljYWxT
Y29wZSh0aGlzKTsKICAgICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVDb250cm9sRmxvdyhwcm9maWxl
ckVuZE9mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggNGI1ZjBkNjIwMDllZTY5MGJk
ZGY0MzMwMTAyMjhhZDBhNGFlNDY3NS4uZDFjMGI0NmE2YTkwNzM5MDM1OWRkMzBjMGNlNjhjMTFj
MTdiMjgyMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMjE1MSw3ICsyMTUxLDE0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CiAgICAgICAgIHNldEZv
ck5vZGUobm9kZSwgbV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAorCisgICAgY2FzZSBFbnVtZXJhdG9yR2V0QnlWYWw6IHsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFibGUgdG8gZG8gY29kZSBtb3Rpb24gZm9yIE93blN0
cnVjdHVyZU1vZGUgYnV0IHdlJ2QgbmVlZCB0byB0ZWFjaCBBSSBhYm91dCB0aGUgZW51bWVyYXRv
cidzIGNhY2hlZCBzdHJ1Y3R1cmUgZm9yIHRoYXQgdG8gYmUgcHJvZml0YWJsZS4KKyAgICAgICAg
Y2xvYmJlcldvcmxkKCk7CisgICAgICAgIG1ha2VIZWFwVG9wRm9yTm9kZShub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBHZXRCeVZhbDoKICAgICBjYXNlIEF0b21pY3NB
ZGQ6CiAgICAgY2FzZSBBdG9taWNzQW5kOgpAQCAtNDI0NCwyNSArNDI1MSw4IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2ln
bmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVj
Qm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgICAgIAotICAgIGNhc2Ug
R2V0RW51bWVyYWJsZUxlbmd0aDogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9k
ZSwgU3BlY0ludDMyT25seSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0Vu
dW1lcmFibGVQcm9wZXJ0eTogewotICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwg
U3BlY0Jvb2xlYW4pOwotICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0cnVj
dHVyZVByb3BlcnR5OgotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7
Ci0gICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9kZShub2RlLCBTcGVjQm9vbGVhbik7Ci0gICAg
ICAgIGNsb2JiZXJXb3JsZCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBIYXNJ
bmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7
CisKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICBBcnJheU1vZGUgbW9k
ZSA9IG5vZGUtPmFycmF5TW9kZSgpOwogICAgICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgpAQCAtNDI4MSwyNiArNDI3MSw1MyBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaQogICAgICAgICBzZXROb25DZWxsVHlwZUZvck5vZGUobm9kZSwgU3Bl
Y0Jvb2xlYW4pOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFt
ZTogewotICAgICAgICBjbG9iYmVyV29ybGQoKTsKLSAgICAgICAgbWFrZUhlYXBUb3BGb3JOb2Rl
KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9CisKICAgICBjYXNlIEdldFByb3BlcnR5RW51
bWVyYXRvcjogewogICAgICAgICBzZXRUeXBlRm9yTm9kZShub2RlLCBTcGVjQ2VsbCk7CiAgICAg
ICAgIGNsb2JiZXJXb3JsZCgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRF
bnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6IHsKLSAgICAgICAgc2V0VHlwZUZvck5vZGUobm9kZSwg
U3BlY1N0cmluZyB8IFNwZWNPdGhlcik7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
SW5kZXhBbmRNb2RlOiB7CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJh
eU1vZGUoKTsKKyAgICAgICAgaWYgKGFycmF5TW9kZS5pc1NhbmVDaGFpbigpKQorICAgICAgICAg
ICAgQVNTRVJUKG5vZGUtPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6SW5kZXhlZE1vZGUpOworICAgICAgICBlbHNlIGlmIChub2RlLT5lbnVtZXJhdG9y
TWV0YWRhdGEoKSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUg
fHwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKKyAg
ICAgICAgICAgIGNsb2JiZXJXb3JsZCgpOworCisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9yTm9k
ZShub2RlLCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc051bWJlcihz
dGF0aWNfY2FzdDx1aW50OF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2Rl
KSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPmVudW1lcmF0b3JNZXRhZGF0YSgpID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6T3duU3RydWN0dXJlTW9kZSAmJiBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSwgMCkudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsIGpzTnVtYmVyKHN0YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQorICAgIGNhc2UgRW51bWVyYXRvck5l
eHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgc2V0Tm9uQ2VsbFR5cGVGb3JOb2RlKG5vZGUsIFNw
ZWNJbnQzMk9ubHkpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJh
dG9yR2VuZXJpY1BuYW1lOiB7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVy
dHlOYW1lOiB7CiAgICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcgfCBTcGVj
T3RoZXIpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBUb0luZGV4U3RyaW5nOiB7
Ci0gICAgICAgIHNldFR5cGVGb3JOb2RlKG5vZGUsIFNwZWNTdHJpbmcpOworCisgICAgY2FzZSBF
bnVtZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eTogewor
ICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZp
bml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAorICAgICAgICAvLyB2YWx1ZSBpbmZvcm1h
dGlvbi4KKyAgICAgICAgY2xvYmJlcldvcmxkKCk7CisgICAgICAgIHNldE5vbkNlbGxUeXBlRm9y
Tm9kZShub2RlLCBTcGVjQm9vbGVhbik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKaW5kZXggMTExMWY4OWY5ZDdiNWI5Nzc3
OGMxNmM4ZDU0NjQwYmVhMzc0NDJiMi4uYTAyNmFhZDE4OTNiZjIzYzU3MTk2ZmNjNmM5MWZjMjAw
MDNjNDU2NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1v
ZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCkBAIC0y
ODksNiArMjg5LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uKCkgPT0g
QXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOwogICAgIH0KIAorICAgIGJvb2wgaXNTYW5lQ2hh
aW4oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSB8
fCBpc091dE9mQm91bmRzU2FuZUNoYWluKCk7CisgICAgfQorCiAgICAgYm9vbCBpc091dE9mQm91
bmRzKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbigpID09IEFycmF5
OjpPdXRPZkJvdW5kcyB8fCBzcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kc1NhbmVD
aGFpbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IGRiMzdmNGRkZGJmODBjZDY2ZWI1Nzg3ZDdi
YWEyYmY1M2FmODkwNzYuLjlkYmQwYjQ3ZDlkZmY0Y2Y2MDM4YWY1MDAxNzkzNDhiZTBhZWEyOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2Fy
ZHNQcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtMzkwLDcgKzM5MCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBub2RlLT5jaGlsZDIoKS0+bWVyZ2VGbGFncyhmbGFncyAmIH5Ob2RlQnl0ZWNvZGVO
ZWVkc05lZ1plcm8pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAg
IAorCisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5
VmFsOiB7CiAgICAgICAgICAgICBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLT5tZXJnZUZs
YWdzKE5vZGVCeXRlY29kZVVzZXNBc1ZhbHVlKTsKICAgICAgICAgICAgIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSktPm1lcmdlRmxhZ3MoTm9kZUJ5dGVjb2RlVXNlc0FzTnVtYmVyIHwgTm9k
ZUJ5dGVjb2RlVXNlc0FzT3RoZXIgfCBOb2RlQnl0ZWNvZGVVc2VzQXNJbnQgfCBOb2RlQnl0ZWNv
ZGVVc2VzQXNBcnJheUluZGV4KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKaW5kZXggYTI5NmM0Yjg3Yzg1ODg2NGZiZGVkZDc0ZWY3MjdlNTRk
OTVmZDY5NC4uNjNlNjhkMDM3ZmUxMTEwMWFlNDEyYTI3ODIyNTNmNTk0M2JkNjI3YiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTgz
ODcsMTAzICs4Mzg3LDEzNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkIGxpbWl0KQogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaGFzX3ByaXZhdGVfYnJhbmQp
OwogICAgICAgICB9CiAKLSAgICAgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsK
LSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0
RW51bWVyYWJsZUxlbmd0aD4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRk
VG9HcmFwaChHZXRFbnVtZXJhYmxlTGVuZ3RoLCBnZXQoYnl0ZWNvZGUubV9iYXNlKSkpOwotICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29k
ZS5tX2RzdCwgYWRkVG9HcmFwaChIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHksCi0gICAg
ICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5
dGVjb2RlLm1fcHJvcGVydHkpLAotICAgICAgICAgICAgICAgIGdldChieXRlY29kZS5tX2VudW1l
cmF0b3IpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51bWVyYWJsZV9zdHJ1
Y3R1cmVfcHJvcGVydHkpOworICAgICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9y
OiB7CisgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByb3BlcnR5RW51bWVyYXRvcj4oKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5tX2Rz
dCwgYWRkVG9HcmFwaChHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGdldChieXRlY29kZS5tX2Jhc2Up
KSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7
CiAgICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5OiB7
Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c0VudW1lcmFibGVQcm9wZXJ0eT4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwg
YWRkVG9HcmFwaChIYXNFbnVtZXJhYmxlUHJvcGVydHksIGdldChieXRlY29kZS5tX2Jhc2UpLCBn
ZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2hh
c19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKLSAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2VudW1l
cmF0b3JfbmV4dDogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBh
cnJheU1vZGUgPSBnZXRBcnJheU1vZGUobWV0YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpS
ZWFkKTsKKyAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKKyAg
ICAgICAgICAgIE5vZGUqIGluZGV4ID0gZ2V0KGJ5dGVjb2RlLm1faW5kZXgpOworICAgICAgICAg
ICAgTm9kZSogZW51bWVyYXRvciA9IGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpOworICAgICAg
ICAgICAgTm9kZSogbW9kZSA9IGdldChieXRlY29kZS5tX21vZGUpOwogCi0gICAgICAgIGNhc2Ug
b3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KCk7
Ci0gICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSGFzT3duU3RydWN0
dXJlUHJvcGVydHksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fYmFzZSksCi0gICAg
ICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fcHJvcGVydHkpLAotICAgICAgICAgICAgICAgIGdl
dChieXRlY29kZS5tX2VudW1lcmF0b3IpKSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9o
YXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8g
c2Vlbk1vZGVzID0gT3B0aW9uU2V0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT46OmZy
b21SYXcobWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEpOwogCi0gICAgICAgIGNhc2Ugb3Bf
aW5fc3RydWN0dXJlX3Byb3BlcnR5OiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEluU3RydWN0dXJlUHJvcGVydHk+KCk7Ci0gICAgICAgICAg
ICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoSW5TdHJ1Y3R1cmVQcm9wZXJ0eSwKLSAg
ICAgICAgICAgICAgICBnZXQoYnl0ZWNvZGUubV9iYXNlKSwKLSAgICAgICAgICAgICAgICBnZXQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eSksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51
bWVyYXRvcikpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX3N0cnVjdHVyZV9wcm9w
ZXJ0eSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc2Vlbk1vZGVzKQorICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKIAotICAgICAgICBjYXNlIG9wX2hhc19l
bnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHk6IHsKLSAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4o
KTsKLSAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoYnl0ZWNvZGUubV9iYXNlKTsKLSAgICAg
ICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoYnl0ZWNvZGUubWV0YWRh
dGEoY29kZUJsb2NrKS5tX2FycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwotICAgICAgICAgICAg
Tm9kZSogcHJvcGVydHkgPSBnZXQoYnl0ZWNvZGUubV9wcm9wZXJ0eSk7CiAgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChiYXNlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5
KTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOwotICAgICAgICAgICAgTm9k
ZSogaGFzSXRlcmFibGVQcm9wZXJ0eSA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBIYXNFbnVt
ZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSk7Ci0gICAg
ICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOyAvLyBIYXNJbmRleGVkUHJvcGVydHkgbXVzdCBiZSB0
cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIHNpbmNlIEZpeHVwUGhhc2UgbWF5
IG1ha2UgaXQgZ2VuZXJpYy4KLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgaGFzSXRl
cmFibGVQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsK
KyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG1vZGUpOworICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZW51bWVyYXRvcik7CisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChudWxscHRyKTsg
Ly8gc3RvcmFnZSBmb3IgSW5kZXhlZE1vZGUgb25seS4KKyAgICAgICAgICAgIE5vZGUqIHVwZGF0
ZWRJbmRleEFuZE1vZGUgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGUsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oc2Vl
bk1vZGVzKSk7CisKKyAgICAgICAgICAgIE5vZGUqIHVwZGF0ZWRNb2RlID0gYWRkVG9HcmFwaChF
bnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCB1cGRhdGVkSW5kZXhBbmRNb2RlKTsKKyAgICAgICAg
ICAgIHNldChieXRlY29kZS5tX21vZGUsIHVwZGF0ZWRNb2RlKTsKKworICAgICAgICAgICAgTm9k
ZSogdXBkYXRlZEluZGV4ID0gYWRkVG9HcmFwaChFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCwg
dXBkYXRlZEluZGV4QW5kTW9kZSk7CisgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9pbmRleCwg
dXBkYXRlZEluZGV4KTsKKworICAgICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1l
LCBhZGRUb0dyYXBoKEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBPcEluZm8oKSwg
T3BJbmZvKHNlZW5Nb2RlcyksIHVwZGF0ZWRJbmRleCwgdXBkYXRlZE1vZGUsIGVudW1lcmF0b3Ip
KTsKKworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9uZXh0KTsKICAgICAg
ICAgfQogCi0gICAgICAgIGNhc2Ugb3BfZ2V0X2RpcmVjdF9wbmFtZTogewotICAgICAgICAgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4o
KTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9u
V2l0aG91dE9TUkV4aXQoKTsKLSAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2VudW1lcmF0
b3JfZ2V0X2J5X3ZhbDogeworICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2V0QnlWYWw+KCk7CisgICAgICAgICAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJh
eU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBB
cnJheTo6UmVhZCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbiA9IGdl
dFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCgpOworCiAgICAgICAgICAgICBOb2RlKiBiYXNlID0g
Z2V0KGJ5dGVjb2RlLm1fYmFzZSk7Ci0gICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChi
eXRlY29kZS5tX3Byb3BlcnR5KTsKKyAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5TmFtZSA9IGdl
dChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBOb2RlKiBpbmRleCA9IGdl
dChieXRlY29kZS5tX2luZGV4KTsKKyAgICAgICAgICAgIE5vZGUqIG1vZGUgPSBnZXQoYnl0ZWNv
ZGUubV9tb2RlKTsKICAgICAgICAgICAgIE5vZGUqIGVudW1lcmF0b3IgPSBnZXQoYnl0ZWNvZGUu
bV9lbnVtZXJhdG9yKTsKIAorICAgICAgICAgICAgYXV0byBzZWVuTW9kZXMgPSBPcHRpb25TZXQ8
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPjo6ZnJvbVJhdyhtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSk7CisgICAgICAgICAgICBpZiAoIXNlZW5Nb2RlcykKKyAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CisKKyAgICAgICAgICAgIGlmIChzZWVuTW9k
ZXMgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICAg
ICAgICAgIE5vZGUqIGJhZE1vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQml0QW5kLCBtb2RlLCBqc0Nv
bnN0YW50KGpzTnVtYmVyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUgfCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUpKSk7CisKKyAgICAgICAg
ICAgICAgICAvLyBXZSBrbm93IHRoZSBBcml0aEJpdEFuZCBjYW5ub3QgaGF2ZSBlZmZlY3RzIHNv
IGl0J3Mgb2sgdG8gZXhpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CisKKyAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKENoZWNrSXNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGpz
TnVtYmVyKDApKSksIGJhZE1vZGUpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
YmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOyAvLyBVc2UgaW5k
ZXggc28gd2UnbGwgdXNlIHRoZSBub3JtYWwgaW5kZXhlZCBvcHRpbWl6YXRpb25zLgorICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKG51bGxwdHIpOyAvLyBGb3IgcHJvcGVydHkgc3RvcmFn
ZSB0byBtYXRjaCBHZXRCeVZhbC4KKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3Qs
IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dv
cmQoKSksIE9wSW5mbyhzcGVjdWxhdGlvbikpKTsKKworICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGVudW1lcmF0b3IpOworICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1l
cmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBDaGVja2luZyBmb3IgYSBCYWRDb25zdGFudFZhbHVlIGNhdXNlcyB1cyB0byBhbHdheXMgdXNl
IHRoZSBHZW5lcmljIHZhcmlhbnQgaWYgd2Ugc3dpdGNoZWQgZnJvbSBJbmRleGVkTW9kZSAtPiBJ
bmRleGVkTW9kZSArIE93blN0cnVjdHVyZU1vZGUgZXZlbiB0aG91Z2ggdGhhdCBtaWdodCBiZSBm
aW5lLgorICAgICAgICAgICAgaWYgKCFzZWVuTW9kZXMuY29udGFpbnNBbnkoeyBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhh
c1NlZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2ggfSkKKyAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkQ29uc3RhbnRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBtb2Rl
VGVzdCA9IGFkZFRvR3JhcGgoU2FtZVZhbHVlLCBtb2RlLCBqc0NvbnN0YW50KGpzTnVtYmVyKHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUp
KSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJc0NvbnN0YW50LCBPcEluZm8o
bV9ncmFwaC5mcmVlemVTdHJvbmcoanNCb29sZWFuKGZhbHNlKSkpLCBtb2RlVGVzdCk7CisKKyAg
ICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAgICAgICAgICAgICAgICBhZGRW
YXJBcmdDaGlsZChpbmRleCk7IC8vIFVzZSBpbmRleCBzbyB3ZSdsbCB1c2UgdGhlIG5vcm1hbCBp
bmRleGVkIG9wdGltaXphdGlvbnMuCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQobnVs
bHB0cik7IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNoIEdldEJ5VmFsLgorICAgICAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGluZGV4KTsKKyAgICAgICAgICAgICAgICBhZGRWYXJB
cmdDaGlsZChtb2RlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9y
KTsKKyAgICAgICAgICAgICAgICBzZXQoYnl0ZWNvZGUubV9kc3QsIGFkZFRvR3JhcGgoTm9kZTo6
VmFyQXJnLCBFbnVtZXJhdG9yR2V0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBP
cEluZm8oc3BlY3VsYXRpb24pKSk7CisKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVy
YXRvcl9nZXRfYnlfdmFsKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoYmFzZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7CisgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQobnVsbHB0cik7IC8vIEZvciBwcm9wZXJ0eSBzdG9yYWdlIHRvIG1hdGNoIEdldEJ5
VmFsLgogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoaW5kZXgpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQobW9kZSk7CiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChlbnVtZXJhdG9y
KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJB
cmcsIEdldERpcmVjdFBuYW1lLCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOworICAg
ICAgICAgICAgc2V0KGJ5dGVjb2RlLm1fZHN0LCBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgRW51
bWVyYXRvckdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHNwZWN1
bGF0aW9uKSkpOwogCi0gICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfZGlyZWN0X3BuYW1l
KTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBjYXNlIG9wX2dldF9wcm9wZXJ0eV9lbnVtZXJhdG9yOiB7Ci0g
ICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBy
b3BlcnR5RW51bWVyYXRvcj4oKTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRk
VG9HcmFwaChHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIGdldChieXRlY29kZS5tX2Jhc2UpKSk7Ci0g
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcik7Ci0gICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbDogeworICAgICAgICAg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySW5C
eVZhbD4oKTsKKyAgICAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
Y29kZUJsb2NrKTsKKyAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1v
ZGUobWV0YWRhdGEubV9hcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkKTsKIAotICAgICAgICBjYXNl
IG9wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4o
KTsKLSAgICAgICAgICAgIHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChHZXRFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWUsCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1fZW51bWVy
YXRvciksCi0gICAgICAgICAgICAgICAgZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKSk7Ci0gICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2Jhc2UpKTsKKyAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkpOwor
ICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKTsKKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX21vZGUpKTsKKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKTsKKyAgICAgICAgICAg
IHNldChieXRlY29kZS5tX2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JJ
bkJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKG1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhKSkpOwogCi0gICAgICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5lcmlj
X3BuYW1lOiB7Ci0gICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7Ci0gICAgICAgICAgICBzZXQoYnl0ZWNv
ZGUubV9kc3QsIGFkZFRvR3JhcGgoR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSwKLSAgICAgICAg
ICAgICAgICBnZXQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKSwKLSAgICAgICAgICAgICAgICBnZXQo
Ynl0ZWNvZGUubV9pbmRleCkpKTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnVtZXJhdG9y
X2luX2J5X3ZhbCk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX3Rv
X2luZGV4X3N0cmluZzogewotICAgICAgICAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb0luZGV4U3RyaW5nPigpOwotICAgICAgICAgICAgc2V0KGJ5dGVjb2Rl
Lm1fZHN0LCBhZGRUb0dyYXBoKFRvSW5kZXhTdHJpbmcsIGdldChieXRlY29kZS5tX2luZGV4KSkp
OwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG9faW5kZXhfc3RyaW5nKTsKKworICAgICAg
ICBjYXNlIG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eTogeworICAgICAgICAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySGFzT3duUHJv
cGVydHk+KCk7CisgICAgICAgICAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jayk7CisgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlN
b2RlKG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCk7CisKKyAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKGdldChieXRlY29kZS5tX2Jhc2UpKTsKKyAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKGdldChieXRlY29kZS5tX3Byb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KGJ5dGVjb2RlLm1faW5kZXgpKTsKKyAgICAgICAgICAgIGFkZFZhckFy
Z0NoaWxkKGdldChieXRlY29kZS5tX21vZGUpKTsKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KGdldChieXRlY29kZS5tX2VudW1lcmF0b3IpKTsKKyAgICAgICAgICAgIHNldChieXRlY29kZS5t
X2RzdCwgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwg
T3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhtZXRhZGF0YS5tX2VudW1lcmF0b3JN
ZXRhZGF0YSkpKTsKKworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW51bWVyYXRvcl9oYXNf
b3duX3Byb3BlcnR5KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2ludGVybmFs
X2ZpZWxkOiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCmluZGV4
IGNjMGQwMTRkYTI5MzFmZjNlY2RjZTk0MjljYzI2MjU2MWUyZjdmNzYuLjA2ZDE5ZDE3Mzk3MzAz
Zjc0MWJlNmIwMmJmMDEwNTdmNzIyNTY0ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZBUGhhc2UuY3BwCkBAIC0xNjQsNyArMTY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGRhdGFMb2coIiAgIEZvdW5kIG11c3QtaGFuZGxlIGJsb2NrOiAiLCAqYmxvY2ssICJcbiIpOwog
ICAgICAgICAKICAgICAgICAgLy8gVGhpcyBtZXJnZXMgc25hcHNob3Qgb2Ygc3RhY2sgdmFsdWVz
IHdoaWxlIENGQSBwaGFzZSB3YW50IHRvIGhhdmUgcHJvdmVuIHR5cGVzIGFuZCB2YWx1ZXMuIFRo
aXMgaXMgc29tZXdoYXQgdHJpY2t5LgotICAgICAgICAvLyBCdXQgdGhpcyBpcyBPSyBhcyBsb25n
IGFzIERGRyBPU1IgZW50cnkgdmFsaWRhdGVzIHRoZSBpbnB1dHMgd2l0aCAqcHJvdmVuKiBBYnN0
cmFjVmFsdWUgdmFsdWVzLiBBbmQgaXQgdHVybnMgb3V0IHRoYXQgdGhpcworICAgICAgICAvLyBC
dXQgdGhpcyBpcyBPSyBhcyBsb25nIGFzIERGRyBPU1IgZW50cnkgdmFsaWRhdGVzIHRoZSBpbnB1
dHMgd2l0aCAqcHJvdmVuKiBBYnN0cmFjdFZhbHVlIHZhbHVlcy4gQW5kIGl0IHR1cm5zIG91dCB0
aGF0IHRoaXMKICAgICAgICAgLy8gdHlwZSB3aWRlbmluZyBpcyBjcml0aWNhbCB0byBuYXZpZXIt
c3Rva2VzLiBXaXRob3V0IGl0LCBuYXZpZXItc3Rva2VzIGhhcyBtb3JlIHN0cmljdCBjb25zdHJh
aW50IG9uIE9TUiBlbnRyeSBhbmQKICAgICAgICAgLy8gZmFpbHMgT1NSIGVudHJ5IHJlcGVhdGVk
bHkuCiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGM3MTY0YjMwZjQ2NGViMGQ0MzgyZTJj
Y2E0MmQ1Njk5NjRkMWJmNjcuLmFjNzgyZDk5YjQ1M2M1MDgyNjFhN2YzYTg3OTU1ODgwMGQwMDVm
NzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAK
QEAgLTI1NCwxNyArMjU0LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNv
ZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIGNvbnN0IEkKICAgICBjYXNlIG9w
X2hhc19wcml2YXRlX2JyYW5kOgogICAgIGNhc2Ugb3BfZ2V0X3Njb3BlOgogICAgIGNhc2Ugb3Bf
Z2V0X2Zyb21fc2NvcGU6Ci0gICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6Ci0gICAg
Y2FzZSBvcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFz
X2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5OgotICAgIGNhc2Ugb3BfaGFzX2VudW1lcmFi
bGVfcHJvcGVydHk6Ci0gICAgY2FzZSBvcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAg
ICBjYXNlIG9wX2luX3N0cnVjdHVyZV9wcm9wZXJ0eToKLSAgICBjYXNlIG9wX2dldF9kaXJlY3Rf
cG5hbWU6CiAgICAgY2FzZSBvcF9nZXRfcHJvcGVydHlfZW51bWVyYXRvcjoKLSAgICBjYXNlIG9w
X2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lOgotICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZW5l
cmljX3BuYW1lOgotICAgIGNhc2Ugb3BfdG9faW5kZXhfc3RyaW5nOgogICAgIGNhc2Ugb3BfbmV3
X2Z1bmM6CiAgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CiAgICAgY2FzZSBvcF9uZXdfZ2VuZXJh
dG9yX2Z1bmM6CkBAIC0yOTksNiArMjg5LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5
TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29kZUJsb2NrLCBjb25zdCBJCiAg
ICAgY2FzZSBvcF9zZXRfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX2NoZWNrX3ByaXZhdGVf
YnJhbmQ6CiAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfZW51bWVyYXRv
cl9uZXh0OgorICAgIGNhc2Ugb3BfZW51bWVyYXRvcl9nZXRfYnlfdmFsOgorICAgIGNhc2Ugb3Bf
ZW51bWVyYXRvcl9pbl9ieV92YWw6CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2hhc19vd25fcHJv
cGVydHk6CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogCiAgICAgY2FzZSBv
cF9jYWxsX2V2YWw6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmlu
ZGV4IDlkMTAwNGZlNTNmM2Q0NDdkZjEwM2ZhY2EwZDJlMTBlYzRmZjVmNDYuLjkxNjQ3MGQxN2Q1
M2FmMzU2YmQ1MTQ0Yzk0ZTYwN2RhMDc5NThiNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0xNDcsNiArMTQ3LDEwIEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBX
cml0ZUZ1CiAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgY2FzZSBDaGVja0FycmF5
T3JFbXB0eToKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHk6CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAg
ICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKICAgICAgICAgY2FzZSBHZXRWZWN0b3JMZW5ndGg6
CkBAIC0xNjQsNyArMTY4LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAgICAgY2Fz
ZSBBcnJheVBvcDoKICAgICAgICAgY2FzZSBBcnJheUluZGV4T2Y6CiAgICAgICAgIGNhc2UgSGFz
SW5kZXhlZFByb3BlcnR5OgotICAgICAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVy
dHk6CiAgICAgICAgIGNhc2UgQXRvbWljc0FkZDoKICAgICAgICAgY2FzZSBBdG9taWNzQW5kOgog
ICAgICAgICBjYXNlIEF0b21pY3NDb21wYXJlRXhjaGFuZ2U6CkBAIC0zMzcsMjEgKzM0MCw4NCBA
QCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVu
Y3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgICAgICB3cml0ZShNYXRoRG90UmFuZG9tU3Rh
dGUpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsK
LSAgICAgICAgcmVhZChIZWFwKTsKLSAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICBjYXNl
IEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGRlZihQdXJlVmFs
dWUobm9kZSwgbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkudG9SYXcoKSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBUb0luZGV4U3RyaW5nOgotICAgIGNhc2UgR2V0RW51
bWVyYXRvclN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFt
ZTogeworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZToKKyAgICBjYXNlIEVudW1l
cmF0b3JOZXh0RXh0cmFjdEluZGV4OiB7CiAgICAgICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0g
ICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7CisgICAgY2FzZSBFbnVtZXJh
dG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICByZWFkKEpTT2JqZWN0X2J1dHRl
cmZseSk7CisgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgJiYgZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIHJlYWQoTmFtZWRQ
cm9wZXJ0aWVzKTsKKyAgICAgICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9y
TWV0YWRhdGEoKSAhPSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7Cisg
ICAgICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBBcnJheU1vZGUgbW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpOworICAgICAgICBz
d2l0Y2ggKG1vZGUudHlwZSgpKSB7CisgICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDogewor
ICAgICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjogeworICAgICAgICAgICAgaWYgKG1vZGUu
aXNTYW5lQ2hhaW4oKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3B1YmxpY0xl
bmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkSW50MzJQcm9wZXJ0aWVzKTsKKyAg
ICAgICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5k
ZXhlZEludDMyUHJvcGVydGllcywgZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCksIGdyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBBcnJheTo6RG91YmxlOiB7CisgICAgICAgICAgICBpZiAobW9kZS5pc1NhbmVD
aGFpbigpKSB7CisgICAgICAgICAgICAgICAgcmVhZChCdXR0ZXJmbHlfcHVibGljTGVuZ3RoKTsK
KyAgICAgICAgICAgICAgICByZWFkKEluZGV4ZWREb3VibGVQcm9wZXJ0aWVzKTsKKyAgICAgICAg
ICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhlZERv
dWJsZVByb3BlcnRpZXMsIGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgICAgIGlmIChtb2RlLmlzU2FuZUNo
YWluKCkpIHsKKyAgICAgICAgICAgICAgICByZWFkKEJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpOwor
ICAgICAgICAgICAgICAgIHJlYWQoSW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzKTsKKyAgICAg
ICAgICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEhhc0luZGV4ZWRQcm9wZXJ0eUxvYywgSW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLCBncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMSkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsKKyAgICAgICAgICAgIGlmIChtb2Rl
LmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgICAgIHJlYWQoQnV0dGVyZmx5X3ZlY3Rvckxl
bmd0aCk7CisgICAgICAgICAgICAgICAgcmVhZChJbmRleGVkQXJyYXlTdG9yYWdlUHJvcGVydGll
cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKworICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogewogICAgICAgICByZWFkKEpTT2Jq
ZWN0X2J1dHRlcmZseSk7CiAgICAgICAgIEFycmF5TW9kZSBtb2RlID0gbm9kZS0+YXJyYXlNb2Rl
KCk7CiAgICAgICAgIHN3aXRjaCAobW9kZS50eXBlKCkpIHsKQEAgLTcwNSw2ICs3NzEsOCBAQCB2
b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBjb25zdCBSZWFkRnVuY3Rv
ciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgVG9QcmltaXRpdmU6CiAgICAgY2FzZSBU
b1Byb3BlcnR5S2V5OgogICAgIGNhc2UgSW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5
VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgIGNhc2UgSW5CeUlk
OgogICAgIGNhc2UgSGFzUHJpdmF0ZU5hbWU6CiAgICAgY2FzZSBIYXNQcml2YXRlQnJhbmQ6CkBA
IC03MTYsMTIgKzc4NCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAgY2FzZSBSZXNv
bHZlU2NvcGVGb3JIb2lzdGluZ0Z1bmNEZWNsSW5FdmFsOgogICAgIGNhc2UgUmVzb2x2ZVNjb3Bl
OgogICAgIGNhc2UgVG9PYmplY3Q6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJv
cGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25T
dHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6CiAgICAgY2Fz
ZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICBj
YXNlIEluc3RhbmNlT2ZDdXN0b206CiAgICAgY2FzZSBUb051bWJlcjoKICAgICBjYXNlIFRvTnVt
ZXJpYzoKQEAgLTkwNiw2ICs5NjksMTEgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICAg
ICAgICAgIHdyaXRlKEFic3RyYWN0SGVhcChTdGFjaywgZGF0YS0+c3RhcnQgKyBzdGF0aWNfY2Fz
dDxpbnQ+KGkpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBjYXNlIEVudW1lcmF0
b3JHZXRCeVZhbDogeworICAgICAgICBjbG9iYmVyVG9wKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgQXJyYXlNb2RlIG1v
ZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAppbmRleCA1M2FiZmVhOTFkZjIyNGJkNDgyNTUwZGJlNTc4MmQ1OWNhZGQ5OGI1Li42MGZi
YjE1YzU5MTZiODlkYjRjNmQ1NTE1MGM2NjUzYzM3ZTE4ZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC0yMDUsNyArMjA1LDYgQEAgYm9vbCBkb2VzR0MoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2Ug
R2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICBjYXNl
IEdldEVudW1lcmFibGVMZW5ndGg6CiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2FzZSBCb29s
ZWFuVG9OdW1iZXI6CiAgICAgY2FzZSBDaGVja0JhZFZhbHVlOgpAQCAtMjk3LDE2ICsyOTYsMTAg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgR2V0QnlJ
ZEZsdXNoOgogICAgIGNhc2UgR2V0QnlJZFdpdGhUaGlzOgogICAgIGNhc2UgR2V0QnlWYWxXaXRo
VGhpczoKLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgIGNhc2UgR2V0RHluYW1pY1ZhcjoK
ICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAg
ICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJh
YmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6CiAg
ICAgY2FzZSBIYXNPd25Qcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5
OgotICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKICAgICBjYXNlIEluQnlJZDoKICAgICBj
YXNlIEluQnlWYWw6CiAgICAgY2FzZSBIYXNQcml2YXRlTmFtZToKQEAgLTM5Miw5ICszODUsMTAg
QEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgTmV3VHlw
ZWRBcnJheToKICAgICBjYXNlIFRocm93U3RhdGljRXJyb3I6CiAgICAgY2FzZSBHZXRQcm9wZXJ0
eUVudW1lcmF0b3I6Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0gICAg
Y2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOgotICAgIGNhc2UgVG9JbmRleFN0cmluZzoK
KyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgIGNhc2UgRW51bWVyYXRvckhhc093blBy
b3BlcnR5OgorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6CisgICAg
Y2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZToKICAgICBjYXNlIE1hdGVyaWFs
aXplTmV3T2JqZWN0OgogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdJbnRlcm5hbEZpZWxkT2JqZWN0
OgogICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0aW9uOgpAQCAtNTA0LDEwICs0OTgs
MTUgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogCiAgICAgY2FzZSBH
ZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgR2V0QnlWYWw6CisgICAgY2FzZSBF
bnVtZXJhdG9yR2V0QnlWYWw6CiAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkg
PT0gQXJyYXk6OlN0cmluZykKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2Fz
ZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICBjYXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CmluZGV4IDQ3MjAyZDZkYmFkOTFjNzZmNTk3OGRhMjhjYTFjNDk3NzE1NWE4MTkuLmFhNDk2NGU5
YTVjZjJkNTZjNjQ4M2QyMmFiYmE2NjcyYWM3Mzg1MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMTAyNCw2ICsxMDI0LDEzIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgRW51bWVyYXRv
ckdldEJ5VmFsOiB7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duSW50MzJVc2U+KG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNl
PihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDQpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDUpKTsKKyAgICAgICAgICAgIEZB
TExUSFJPVUdIOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAg
ICAgICAgaWYgKCFub2RlLT5wcmVkaWN0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKApAQCAtMTA2Miw2ICsxMDY5LDE1IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MTE3MgogICAgICAgICAgICAgICAgIG5vZGUtPnNldEFycmF5TW9kZShBcnJheU1vZGUoQXJyYXk6
OkdlbmVyaWMsIG5vZGUtPmFycmF5TW9kZSgpLmFjdGlvbigpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CisKKworICAgICAgICAgICAgY2FzZSBBcnJheTo6Rm9yY2VFeGl0OiB7CisgICAgICAg
ICAgICAgICAgLy8gRG9uJ3QgZm9yY2UgT1NSIGJlY2F1c2Ugd2UgaGF2ZSBvbmx5IHNlZW4gT3du
U3RydWN0dXJlTW9kZS4KKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV0Ugc2hvdWxkIGhhdmUg
YSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMuLi4KKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3Ao
KSA9PSBFbnVtZXJhdG9yR2V0QnlWYWwpCisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldEFy
cmF5TW9kZShub2RlLT5hcnJheU1vZGUoKS53aXRoVHlwZShBcnJheTo6R2VuZXJpYykpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTEwNzMsNjMgKzEwODks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMy
OiB7Ci0gICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNh
bmVDaGFpblNwZWN1bGF0aW9uOwotICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNKU0Fy
cmF5V2l0aE9yaWdpbmFsU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgaWYgSW5Cb3VuZHNTYW5lQ2hhaW4gd2lsbCB3b3JrIG9uIGEgcGVyLXR5cGUgYmFzaXMuIE5v
dGUgdGhhdDoKLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8g
MSkgV2UgZG9uJ3Qgd2FudCBkb3VibGUgYXJyYXlzIHRvIHNvbWV0aW1lcyByZXR1cm4gdW5kZWZp
bmVkLCBzaW5jZQotICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBj
aGFuZ2UgdG8gdGhlIHJldHVybiB0eXBlIGFuZCBpdCB3b3VsZCBwZXNzaW1pc2UKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhh
dCBpZiB3ZSBhY3R1YWxseSBoYWQKLSAgICAgICAgICAgICAgICAgICAgLy8gZXZpZGVuY2UgdGhh
dCB3ZSBjb3VsZCByZWFkIGZyb20gYSBob2xlLiBUaGF0J3MgcHJldHR5IGFubm95aW5nLgotICAg
ICAgICAgICAgICAgICAgICAvLyBMaWtlbHkgdGhlIGJlc3Qgd2F5IHRvIGhhbmRsZSB0aGF0IGNh
c2UgaXMgd2l0aCBhbiBlcXVpdmFsZW50IG9mCi0gICAgICAgICAgICAgICAgICAgIC8vIEluQm91
bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9yIG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVu
IFVuZGVmaW5lZCBhbmQKLSAgICAgICAgICAgICAgICAgICAgLy8gTmFOIGFyZSBpbmRpc3Rpbmd1
aXNoYWJsZSBhY2NvcmRpbmcgdG8gYmFja3dhcmRzIHByb3BhZ2F0aW9uLCBhbmQganVzdAotICAg
ICAgICAgICAgICAgICAgICAvLyB1c2UgSW5Cb3VuZHNTYW5lQ2hhaW4gaW4gdGhhdCBjYXNlLiBU
aGlzIGhhcHBlbnMgdG8gY2F0Y2ggYSBsb3Qgb2YgY2FzZXMuCi0gICAgICAgICAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIDIpIFdlIGRvbid0IHdhbnQgaW50MzIgYXJyYXkg
bG9hZHMgdG8gaGF2ZSB0byBkbyBhIGhvbGUgY2hlY2sganVzdCB0bwotICAgICAgICAgICAgICAg
ICAgICAvLyBjb2VyY2UgdG8gVW5kZWZpbmVkLCBzaW5jZSB0aGF0IHdvdWxkIG1lYW4gdHdpY2Ug
dGhlIGNoZWNrcy4gV2Ugd2FudCB0bwotICAgICAgICAgICAgICAgICAgICAvLyBiZSBhYmxlIHRv
IHNheSB3ZSBhbHdheXMgcmV0dXJuIEludDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUg
cHJvZmlsaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIGJhc2VkPwotICAgICAgICAgICAgICAg
ICAgICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1wbGljYXRpb25z
LiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKLSAgICAgICAgICAg
ICAgICAgICAgLy8gbGlrZS4gSXQncyB1bmZvcnR1bmF0ZSB0aGF0IHdlIGhhdmUgdG8gZG8gdGhl
IGhvbGUgY2hlY2suIFNlY29uZCwKLSAgICAgICAgICAgICAgICAgICAgLy8gc29tZSBhY2Nlc3Nl
cyB0aGF0IGhpdCBhIGhvbGUgd2lsbCBub3cgbmVlZCB0byB0YWtlIHRoZSBmdWxsLWJsb3duCi0g
ICAgICAgICAgICAgICAgICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4
IHRoYXQgd2l0aDoKLSAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NDY2OAotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzNjRC
aXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZCb3VuZHMgJiYg
IW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdhdGl2ZUluZGV4
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFy
cmF5OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3VzOgotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVudGlyZWx5IG5hdHVyYWwu
IFdlIGFscmVhZHkgd291bGQgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJu
ZWQgYW55IEpTVmFsdWUsIGFuZCBub3cgd2UnbGwgcmV0dXJuIFVuZGVmaW5lZC4gV2Ugc3RpbGwg
ZG8KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjaGVjayBidXQgaXQgZG9lc24ndCBy
ZXF1aXJlIHRha2luZyBhbnkga2luZCBvZiBzbG93IHBhdGguCi0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpP
dXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMs
IE5lZ2F0aXZlSW5kZXgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNw
ZWN1bGF0aW9uID0gQXJyYXk6Ok91dE9mQm91bmRzU2FuZUNoYWluOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6OkluQm91
bmRzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0aW9uID0g
QXJyYXk6OkluQm91bmRzU2FuZUNoYWluOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVCeXRlY29kZVVzZXNBc090aGVyKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBB
cnJheTo6SW5Cb3VuZHMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIb2xlcyBs
b29rIGxpa2UgTmFOIGFscmVhZHksIHNvIGlmIHRoZSB1c2VyIGRvZXNuJ3QgY2FyZQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gVW5k
ZWZpbmVkIGFuZCBOYU4gdGhlbiB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBkbyB0aGlzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbmVDaGFpblNwZWN1bGF0
aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOwotICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChpczY0Qml0KCkgJiYgYXJyYXlNb2RlLnNwZWN1bGF0aW9uKCkgPT0gQXJyYXk6
Ok91dE9mQm91bmRzICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YywgTmVnYXRpdmVJbmRleCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWlu
U3BlY3VsYXRpb24gPSBBcnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
c2FuZUNoYWluU3BlY3VsYXRpb24pCi0gICAgICAgICAgICAgICAgICAgIHNldFNhbmVDaGFpbklm
UG9zc2libGUobm9kZSwgKnNhbmVDaGFpblNwZWN1bGF0aW9uKTsKLQorICAgICAgICAgICAgICAg
IHNldEpTQXJyYXlTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTE3OCw3ICsxMTM4LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAxKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKKworICAgICAgICAgICAgLy8gRG9uJ3Qgc2V0IGEgbm9uLUpTVmFs
dWUgcmVzdWx0IGZvciBFbnVtZXJhdG9yR2V0QnlWYWwgYXMgdGhlIGluZGV4aW5nIG1vZGUgZG9l
c24ndCB0ZWxsIHVzIGFib3V0IHRoZSB0eXBlIG9mIE93blN0cnVjdHVyZQorICAgICAgICAgICAg
Ly8gcHJvcGVydGllcy4gVGhpcyBpc24ndCBhbiBpc3N1ZSBmb3IgSW5kZXhlZE1vZGUgb25seSBh
cyBCeXRlY29kZVBhcnNpbmcgd2lsbCBlbWl0IGEgbm9ybWFsIEdldEJ5VmFsIGlmIHdlJ3ZlIHBy
b2ZpbGVkIHRoYXQuCisgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBFbnVtZXJhdG9yR2V0
QnlWYWwpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBzd2l0Y2ggKGFycmF5
TW9kZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAg
ICAgICAgICBpZiAoIWFycmF5TW9kZS5pc091dE9mQm91bmRzKCkKQEAgLTIyNzUsMjggKzIyMzks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBj
YXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4o
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVz
ZT4obm9kZS0+Y2hpbGQyKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgICAgIGZp
eEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQzKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBJ
blN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25TdHJpbmdVc2U+KG5vZGUtPmNo
aWxkMigpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDMo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OiB7
CisgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OiB7CiAgICAgICAgICAgICBub2RlLT5z
ZXRBcnJheU1vZGUoCiAgICAgICAgICAgICAgICAgbm9kZS0+YXJyYXlNb2RlKCkucmVmaW5lKAog
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLApAQCAtMjMxNSwzNiArMjI1OCw2NCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHNldFNhbmVDaGFpbklmUG9zc2libGUobm9kZSwg
QXJyYXk6OkluQm91bmRzU2FuZUNoYWluKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6IHsKLSAgICAgICAgICAgIEVkZ2UmIGJhc2Ug
PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApOwotICAgICAgICAgICAgRWRnZSYgcHJvcGVy
dHkgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpOwotICAgICAgICAgICAgRWRnZSYgaW5k
ZXggPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpOwotICAgICAgICAgICAgRWRnZSYgZW51
bWVyYXRvciA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMyk7Ci0gICAgICAgICAgICBmaXhF
ZGdlPENlbGxVc2U+KGJhc2UpOwotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KGluZGV4KTsKLSAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihlbnVtZXJhdG9yKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQogICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWU6IHsKLSAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7Ci0gICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICAg
ICAgRWRnZSYgYmFzZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgICAgICAg
ICBFZGdlJiBpbmRleCA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSk7CisgICAgICAgICAg
ICBFZGdlJiBzdG9yYWdlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3Rv
cmFnZUNoaWxkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGlmIChub2RlLT5lbnVtZXJhdG9yTWV0
YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0QXJyYXlNb2RlKAorICAgICAgICAgICAgICAgICAgICBub2Rl
LT5hcnJheU1vZGUoKS5yZWZpbmUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KS0+cHJlZGljdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS0+cHJlZGljdGlvbigpKSk7CisKKyAgICAgICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KGJhc2UpOworICAgICAgICAgICAgICAgIGJsZXNzQXJyYXlPcGVyYXRpb24oYmFz
ZSwgaW5kZXgsIHN0b3JhZ2VFZGdlKTsKKworICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LmJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0U2Fu
ZUNoYWluSWZQb3NzaWJsZShub2RlLCBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6
SW5Cb3VuZHMgPyBBcnJheTo6SW5Cb3VuZHNTYW5lQ2hhaW4gOiBBcnJheTo6T3V0T2ZCb3VuZHNT
YW5lQ2hhaW4pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobm9kZS0+ZW51bWVy
YXRvck1ldGFkYXRhKCkgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVN
b2RlICYmICFtX2dyYXBoLmhhc0V4aXRTaXRlKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgQmFkQ2Fj
aGUpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4oYmFzZSk7CisKKyAgICAgICAg
ICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4oaW5kZXgpOworICAgICAgICAgICAgZml4RWRnZTxL
bm93bkludDMyVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvckdl
bmVyaWNQbmFtZTogewotICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICBjYXNl
IEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6IHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgZml4RWRnZTxJ
bnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25JbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNlPihub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hp
bGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEVu
dW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDog
eworICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCktPnNob3VsZFNw
ZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgMCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkludDMyVXNl
PihtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25v
d25JbnQzMlVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAzKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEtub3duQ2VsbFVzZT4obV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCA0KSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorCiAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsK
ICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gaW5zZXJ0IHR5cGUgY2hlY2tzIGJhc2VkIG9uIHRo
ZSBpbnN0cnVjdGlvblR5cGVTZXQgb2YgdGhlIFR5cGVMb2NhdGlvbiwgbm90IHRoZSBnbG9iYWxU
eXBlU2V0LgogICAgICAgICAgICAgLy8gQmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb25UeXBlU2V0IGlz
IGNvbnRhaW5lZCBpbiBnbG9iYWxUeXBlU2V0LCBpZiB3ZSBwcm9kdWNlIGEgdHlwZSBjaGVjayBm
b3IKQEAgLTM2OTAsNiArMzY2MSw2NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgT3BJbmZvKGFy
cmF5TW9kZS5hc1dvcmQoKSksIEVkZ2UoYXJyYXksIEtub3duQ2VsbFVzZSkpOwogICAgIH0KIAor
ICAgIHZvaWQgc2V0SlNBcnJheVNhbmVDaGFpbklmUG9zc2libGUoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKKyAgICAg
ICAgc3RkOjpvcHRpb25hbDxBcnJheTo6U3BlY3VsYXRpb24+IHNhbmVDaGFpblNwZWN1bGF0aW9u
OworICAgICAgICBpZiAoYXJyYXlNb2RlLmlzSlNBcnJheVdpdGhPcmlnaW5hbFN0cnVjdHVyZSgp
KSB7CisgICAgICAgICAgICAvLyBDaGVjayBpZiBJbkJvdW5kc1NhbmVDaGFpbiB3aWxsIHdvcmsg
b24gYSBwZXItdHlwZSBiYXNpcy4gTm90ZSB0aGF0OgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIDEpIFdlIGRvbid0IHdhbnQgZG91YmxlIGFycmF5cyB0byBzb21ldGltZXMgcmV0dXJu
IHVuZGVmaW5lZCwgc2luY2UKKyAgICAgICAgICAgIC8vIHRoYXQgd291bGQgcmVxdWlyZSBhIGNo
YW5nZSB0byB0aGUgcmV0dXJuIHR5cGUgYW5kIGl0IHdvdWxkIHBlc3NpbWlzZQorICAgICAgICAg
ICAgLy8gdGhpbmdzIGEgbG90LiBTbywgd2UnZCBvbmx5IHdhbnQgdG8gZG8gdGhhdCBpZiB3ZSBh
Y3R1YWxseSBoYWQKKyAgICAgICAgICAgIC8vIGV2aWRlbmNlIHRoYXQgd2UgY291bGQgcmVhZCBm
cm9tIGEgaG9sZS4gVGhhdCdzIHByZXR0eSBhbm5veWluZy4KKyAgICAgICAgICAgIC8vIExpa2Vs
eSB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHRoYXQgY2FzZSBpcyB3aXRoIGFuIGVxdWl2YWxlbnQg
b2YKKyAgICAgICAgICAgIC8vIEluQm91bmRzU2FuZUNoYWluIGZvciBPdXRPZkJvdW5kcy4gRm9y
IG5vdyB3ZSBqdXN0IGRldGVjdCB3aGVuIFVuZGVmaW5lZCBhbmQKKyAgICAgICAgICAgIC8vIE5h
TiBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYWNjb3JkaW5nIHRvIGJhY2t3YXJkcyBwcm9wYWdhdGlv
biwgYW5kIGp1c3QKKyAgICAgICAgICAgIC8vIHVzZSBJbkJvdW5kc1NhbmVDaGFpbiBpbiB0aGF0
IGNhc2UuIFRoaXMgaGFwcGVucyB0byBjYXRjaCBhIGxvdCBvZiBjYXNlcy4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAvLyAyKSBXZSBkb24ndCB3YW50IGludDMyIGFycmF5IGxvYWRzIHRv
IGhhdmUgdG8gZG8gYSBob2xlIGNoZWNrIGp1c3QgdG8KKyAgICAgICAgICAgIC8vIGNvZXJjZSB0
byBVbmRlZmluZWQsIHNpbmNlIHRoYXQgd291bGQgbWVhbiB0d2ljZSB0aGUgY2hlY2tzLiBXZSB3
YW50IHRvCisgICAgICAgICAgICAvLyBiZSBhYmxlIHRvIHNheSB3ZSBhbHdheXMgcmV0dXJuIElu
dDMyLiBGSVhNRTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcHJvZmlsaW5nCisgICAgICAgICAgICAv
LyBiYXNlZD8KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIGhhcyB0d28gaW1w
bGljYXRpb25zLiBGaXJzdCwgd2UgaGF2ZSB0byBkbyBtb3JlIGNoZWNrcyB0aGFuIHdlJ2QKKyAg
ICAgICAgICAgIC8vIGxpa2UuIEl0J3MgdW5mb3J0dW5hdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRo
ZSBob2xlIGNoZWNrLiBTZWNvbmQsCisgICAgICAgICAgICAvLyBzb21lIGFjY2Vzc2VzIHRoYXQg
aGl0IGEgaG9sZSB3aWxsIG5vdyBuZWVkIHRvIHRha2UgdGhlIGZ1bGwtYmxvd24KKyAgICAgICAg
ICAgIC8vIG91dC1vZi1ib3VuZHMgc2xvdyBwYXRoLiBXZSBjYW4gZml4IHRoYXQgd2l0aDoKKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDQ2
NjgKKworICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpICYmIGFy
cmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5kcyAmJiAhbV9ncmFwaC5o
YXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZlSW5kZXgpKQorICAgICAg
ICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5OjpPdXRPZkJvdW5kc1Nh
bmVDaGFpbjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6
OkNvbnRpZ3VvdXM6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXBwZW5zIHRvIGJlIGVu
dGlyZWx5IG5hdHVyYWwuIFdlIGFscmVhZHkgd291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8v
IHJldHVybmVkIGFueSBKU1ZhbHVlLCBhbmQgbm93IHdlJ2xsIHJldHVybiBVbmRlZmluZWQuIFdl
IHN0aWxsIGRvCisgICAgICAgICAgICAgICAgLy8gdGhlIGNoZWNrIGJ1dCBpdCBkb2Vzbid0IHJl
cXVpcmUgdGFraW5nIGFueSBraW5kIG9mIHNsb3cgcGF0aC4KKyAgICAgICAgICAgICAgICBpZiAo
aXM2NEJpdCgpICYmIGFycmF5TW9kZS5zcGVjdWxhdGlvbigpID09IEFycmF5OjpPdXRPZkJvdW5k
cyAmJiAhbV9ncmFwaC5oYXNFeGl0U2l0ZShub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5lZ2F0aXZl
SW5kZXgpKQorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxhdGlvbiA9IEFycmF5
OjpPdXRPZkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChhcnJheU1v
ZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpCisgICAgICAgICAgICAgICAgICAg
IHNhbmVDaGFpblNwZWN1bGF0aW9uID0gQXJyYXk6OkluQm91bmRzU2FuZUNoYWluOworICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CisgICAg
ICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVy
KSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6SW5Cb3VuZHMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSG9sZXMgbG9vayBsaWtlIE5hTiBhbHJlYWR5LCBzbyBpZiB0aGUg
dXNlciBkb2Vzbid0IGNhcmUKKyAgICAgICAgICAgICAgICAgICAgLy8gYWJvdXQgdGhlIGRpZmZl
cmVuY2UgYmV0d2VlbiBVbmRlZmluZWQgYW5kIE5hTiB0aGVuIHdlIGNhbgorICAgICAgICAgICAg
ICAgICAgICAvLyBkbyB0aGlzLgorICAgICAgICAgICAgICAgICAgICBzYW5lQ2hhaW5TcGVjdWxh
dGlvbiA9IEFycmF5OjpJbkJvdW5kc1NhbmVDaGFpbjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzNjRCaXQoKSAmJiBhcnJheU1vZGUuc3BlY3VsYXRpb24oKSA9PSBBcnJheTo6T3V0T2ZC
b3VuZHMgJiYgIW1fZ3JhcGguaGFzRXhpdFNpdGUobm9kZS0+b3JpZ2luLnNlbWFudGljLCBOZWdh
dGl2ZUluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgc2FuZUNoYWluU3BlY3VsYXRpb24gPSBB
cnJheTo6T3V0T2ZCb3VuZHNTYW5lQ2hhaW47CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoc2FuZUNoYWluU3BlY3VsYXRpb24pCisgICAgICAg
ICAgICBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKG5vZGUsICpzYW5lQ2hhaW5TcGVjdWxhdGlvbik7
CisgICAgfQorCiAgICAgdm9pZCBzZXRTYW5lQ2hhaW5JZlBvc3NpYmxlKE5vZGUqIG5vZGUsIEFy
cmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAppbmRleCA5ZDQ5
ZmU2MzI1YzVkNGVmNGY4MTI0ZmZlMzZmYTBjZmJkYmQ2MWJmLi5hODQwNjhlNzc0NmM5ZGM0Mzk0
MWU1MWM4ZTMxNWRhNzM1ZGZlMGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcApAQCAtMzg3LDYgKzM4Nyw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4U3RyLCBOb2RlKiBub2RlLCBEdW1wQ29udGV4CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgKm5vZGUtPmluQnlTdGF0dXMoKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1B1dEJ5SWRTdGF0dXMoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAqbm9kZS0+cHV0QnlJ
ZFN0YXR1cygpKTsKKyAgICBpZiAobm9kZS0+aGFzRW51bWVyYXRvck1ldGFkYXRhKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgImVudW1lcmF0b3JNb2RlcyA9ICIsIG5vZGUtPmVudW1lcmF0
b3JNZXRhZGF0YSgpLnRvUmF3KCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiVDoiLCAqbm9kZS0+dGFyZ2V0QmxvY2soKSk7CiAgICAgaWYgKG5v
ZGUtPmlzQnJhbmNoKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ludGVnZXJSYW5nZU9wdGltaXphdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCmluZGV4IDZjYWUwN2U5
MDZmOWMxZDBlZjQwMzMwYzIzMzQ2YzVkNGMyM2Y5YzAuLjFiYWExYzhiY2Y1MTkzMTQwNDMwYTEx
ZmJjMGYzYTg5MjIxNTFlNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW50ZWdlclJhbmdlT3B0aW1pemF0aW9uUGhhc2UuY3BwCkBAIC0xMzQ0
LDYgKzEzNDQsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgog
ICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlWYWw6IHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSAhPSBBcnJheTo6VW5kZWNpZGVkKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMzgwLDYgKzEzODEsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAvLyBGSVhNRTogVGVhY2ggdGhpcyBhYm91dCBFbnVtZXJhdG9y
TmV4dEV4dHJhY3RJbmRleC4KICAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOiB7CiAgICAgICAg
ICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpLCBSZWxhdGlvbnNoaXA6Okxlc3NUaGFu
KSk7CiAgICAgICAgICAgICBzZXRSZWxhdGlvbnNoaXAoUmVsYXRpb25zaGlwOjpzYWZlQ3JlYXRl
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbV96ZXJvLCBSZWxhdGlvbnNoaXA6OkdyZWF0ZXJUaGFu
LCAtMSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKaW5kZXggMGE1
OTNlNTZhNzg2ZDM5M2ZkODdiNjU1N2QzNTJlM2YwZDQwNmFhNS4uZWM1YThmYjZlYWNlMjlkMzVl
ZDA1N2NkNjRmMGQ2ZjQ2NDY2NGQwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNYXlFeGl0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01h
eUV4aXQuY3BwCkBAIC0xMTEsOCArMTExLDExIEBAIEV4aXRNb2RlIG1heUV4aXRJbXBsKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgU3RhdGVUeXBlJiBzdGF0ZSkKICAgICBjYXNlIEZpbHRlckRl
bGV0ZUJ5U3RhdHVzOgogICAgIGNhc2UgRmlsdGVyQ2hlY2tQcml2YXRlQnJhbmRTdGF0dXM6CiAg
ICAgY2FzZSBGaWx0ZXJTZXRQcml2YXRlQnJhbmRTdGF0dXM6CisgICAgY2FzZSBFbnVtZXJhdG9y
TmV4dEV4dHJhY3RNb2RlOgorICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6CiAg
ICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFt
ZToKICAgICBjYXNlIFN0ckNhdDoKICAgICBjYXNlIENhbGw6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDY5MTYyYmNmZjRmZDI3MzYyMDkz
MGM5NzA3YTZkMGE0MzhlNWVkODEuLmFjMmI0YjVmMDI4MzljOGFiYWExZDM5YjM1MWQyNzdhMTli
ZDFjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC01Miw2ICs1Miw3IEBA
CiAjaW5jbHVkZSAiRGVsZXRlQnlWYXJpYW50LmgiCiAjaW5jbHVkZSAiR2V0QnlWYXJpYW50Lmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0
S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRWYXJpYW50LmgiCkBAIC0xNzY0LDcgKzE3NjUsNiBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQXJpdGhGbG9vcjoKICAgICAgICAgY2FzZSBBcml0aENl
aWw6CiAgICAgICAgIGNhc2UgQXJpdGhUcnVuYzoKLSAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFt
ZToKICAgICAgICAgY2FzZSBHZXRCeUlkOgogICAgICAgICBjYXNlIEdldEJ5SWRGbHVzaDoKICAg
ICAgICAgY2FzZSBHZXRCeUlkV2l0aFRoaXM6CkBAIC0xNzcyLDYgKzE3NzIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNhc2UgR2V0QnlJZERpcmVjdEZsdXNoOgogICAgICAgICBjYXNlIEdldFByb3Rv
dHlwZU9mOgogICAgICAgICBjYXNlIFRyeUdldEJ5SWQ6CisgICAgICAgIGNhc2UgRW51bWVyYXRv
ckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFs
V2l0aFRoaXM6CiAgICAgICAgIGNhc2UgR2V0UHJpdmF0ZU5hbWU6CkBAIC0xOTQxLDYgKzE5NDIs
ODIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8dm9pZCo+KCk7CiAgICAg
fQogCisgICAgYm9vbCBoYXNTdG9yYWdlQ2hpbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0
cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGNhc2UgU3RyaW5nQ29kZVBvaW50QXQ6CisgICAgICAg
IGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAg
ICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgorICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICBj
YXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGNhc2UgQXRvbWljc0FkZDoKKyAgICAgICAgY2Fz
ZSBBdG9taWNzQW5kOgorICAgICAgICBjYXNlIEF0b21pY3NDb21wYXJlRXhjaGFuZ2U6CisgICAg
ICAgIGNhc2UgQXRvbWljc0V4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NMb2FkOgorICAg
ICAgICBjYXNlIEF0b21pY3NPcjoKKyAgICAgICAgY2FzZSBBdG9taWNzU3RvcmU6CisgICAgICAg
IGNhc2UgQXRvbWljc1N1YjoKKyAgICAgICAgY2FzZSBBdG9taWNzWG9yOgorICAgICAgICBjYXNl
IEFycmF5UHVzaDoKKyAgICAgICAgY2FzZSBBcnJheVBvcDoKKyAgICAgICAgY2FzZSBHZXRBcnJh
eUxlbmd0aDoKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAgIGNhc2Ug
RW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgQXJyYXlJbmRl
eE9mOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgdW5zaWduZWQgc3RvcmFnZUNoaWxkSW5kZXgoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhh
c1N0b3JhZ2VDaGlsZCgpKTsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2Ug
U3RyaW5nQ2hhckF0OgorICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGNh
c2UgU3RyaW5nQ29kZVBvaW50QXQ6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgor
ICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNh
c2UgUHV0QnlWYWxEaXJlY3Q6CisgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgIGNhc2Ug
UHV0QnlWYWxBbGlhczoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBjYXNlIEF0b21p
Y3NBZGQ6CisgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKKyAgICAgICAgY2FzZSBBdG9taWNzQ29t
cGFyZUV4Y2hhbmdlOgorICAgICAgICBjYXNlIEF0b21pY3NFeGNoYW5nZToKKyAgICAgICAgY2Fz
ZSBBdG9taWNzTG9hZDoKKyAgICAgICAgY2FzZSBBdG9taWNzT3I6CisgICAgICAgIGNhc2UgQXRv
bWljc1N0b3JlOgorICAgICAgICBjYXNlIEF0b21pY3NTdWI6CisgICAgICAgIGNhc2UgQXRvbWlj
c1hvcjoKKyAgICAgICAgICAgIHJldHVybiAyICsgbnVtRXh0cmFBdG9taWNzQXJncyhvcCgpKTsK
KyAgICAgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg
ICBjYXNlIEFycmF5UG9wOgorICAgICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6CisgICAgICAg
ICAgICByZXR1cm4gMjsKKworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhB
bmRNb2RlOgorICAgICAgICAgICAgcmV0dXJuIDQ7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBBZGQgQXJyYXlJbmRleE9mIGJ1dCBpdCBkb2VzIG5vbi10cml2aWFs
IHRoaW5ncyB0byBkZXRlcm1pbmUgc3RvcmFnZSBlZGdlLgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgaGFzVWlk
T3BlcmFuZCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBDaGVja0lkZW50OwpAQCAt
MjIwNSw2ICsyMjgyLDEwIEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBQdXRCeVZhbDoKICAgICAg
ICAgY2FzZSBQdXRCeVZhbEFsaWFzOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBj
YXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOgorICAgICAgICBjYXNlIEVudW1l
cmF0b3JHZXRCeVZhbDoKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySW5CeVZhbDoKKyAgICAgICAg
Y2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAgICAgIGNhc2UgU3RyaW5nQ2hhckF0
OgogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CiAgICAgICAgIGNhc2UgU3RyaW5nQ29k
ZVBvaW50QXQ6CkBAIC0yMjE2LDcgKzIyOTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgQXJy
YXlQb3A6CiAgICAgICAgIGNhc2UgQXJyYXlJbmRleE9mOgogICAgICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5Ogog
ICAgICAgICBjYXNlIEF0b21pY3NBZGQ6CiAgICAgICAgIGNhc2UgQXRvbWljc0FuZDoKICAgICAg
ICAgY2FzZSBBdG9taWNzQ29tcGFyZUV4Y2hhbmdlOgpAQCAtMzE3NCw2ICszMjU0LDI1IEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPFNldFByaXZhdGVCcmFuZFN0YXR1cyo+
KCk7CiAgICAgfQogCisgICAgYm9vbCBoYXNFbnVtZXJhdG9yTWV0YWRhdGEoKSBjb25zdAorICAg
IHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRV
cGRhdGVJbmRleEFuZE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVQcm9w
ZXJ0eU5hbWU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgorICAgICAg
ICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBPcHRpb25TZXQ8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPiBlbnVtZXJh
dG9yTWV0YWRhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc0VudW1lcmF0b3JNZXRhZGF0
YSgpKTsKKyAgICAgICAgcmV0dXJuIE9wdGlvblNldDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
Ok1vZGU+Ojpmcm9tUmF3KG1fb3BJbmZvMi5hczx1bnNpZ25lZD4oKSk7CisgICAgfQorCiAgICAg
dm9pZCBkdW1wQ2hpbGRyZW4oUHJpbnRTdHJlYW0mIG91dCkKICAgICB7CiAgICAgICAgIGlmICgh
Y2hpbGQxKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggNWQ0
YjE3ZmIzNzY1Mjg4ODk4YTkzMDhjZjY2NTgxNDIxN2M1MGFkMS4uZTc1YmNmZThhMWFjMzcxYTAy
ZTU2NTQ5NmI5ODc4ZDk4N2VlNGFkMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaApAQCAtNTAxLDIwICs1MDEsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKFN0b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1h
Y3JvKEZlbmNlZFN0b3JlQmFycmllciwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKLSAgICAv
KiBGb3ItaW4gZW51bWVyYXRpb24gb3Bjb2RlcyAqL1wKLSAgICBtYWNybyhHZXRFbnVtZXJhYmxl
TGVuZ3RoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgLyogTXVzdCBn
ZW5lcmF0ZSBiZWNhdXNlIG9mIFByb3hpZXMgb24gdGhlIHByb3RvdHlwZSBjaGFpbiAqLyBcCiAg
ICAgbWFjcm8oSGFzSW5kZXhlZFByb3BlcnR5LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3Vs
dEJvb2xlYW4gfCBOb2RlSGFzVmFyQXJncykgXAotICAgIG1hY3JvKEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHksIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVI
YXNWYXJBcmdzKSBcCi0gICAgbWFjcm8oSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5LCBO
b2RlUmVzdWx0Qm9vbGVhbikgXAotICAgIG1hY3JvKEhhc0VudW1lcmFibGVQcm9wZXJ0eSwgTm9k
ZVJlc3VsdEJvb2xlYW4pIFwKLSAgICBtYWNybyhIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eSwgTm9k
ZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oSW5TdHJ1Y3R1
cmVQcm9wZXJ0eSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29sZWFuKSBcCi0gICAg
bWFjcm8oR2V0RGlyZWN0UG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncyB8
IE5vZGVSZXN1bHRKUykgXAorICAgIC8qIEZvci1pbiBlbnVtZXJhdGlvbiBvcGNvZGVzICovXAog
ICAgIG1hY3JvKEdldFByb3BlcnR5RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVS
ZXN1bHRKUykgXAotICAgIG1hY3JvKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5l
cmljUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhU
b0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhFbnVtZXJhdG9yTmV4dFVw
ZGF0ZUluZGV4QW5kTW9kZSwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFyZ3MpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlLCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAg
bWFjcm8oRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIE5vZGVSZXN1bHRKUykgXAor
ICAgIG1hY3JvKEVudW1lcmF0b3JHZXRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZUhhc1ZhckFy
Z3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRW51bWVyYXRvckluQnlWYWwsIE5v
ZGVSZXN1bHRCb29sZWFuIHwgTm9kZUhhc1ZhckFyZ3MgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCisg
ICAgbWFjcm8oRW51bWVyYXRvckhhc093blByb3BlcnR5LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5v
ZGVIYXNWYXJBcmdzIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIC8qIE5vZGVzIGZvciBKU01h
cCBhbmQgSlNTZXQgKi8gXAogICAgIG1hY3JvKE1hcEhhc2gsIE5vZGVSZXN1bHRJbnQzMikgXAog
ICAgIG1hY3JvKE5vcm1hbGl6ZU1hcEtleSwgTm9kZVJlc3VsdEpTKSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcEluZm8uaAppbmRleCA0MzM1MjY1OWIyYWUwYWMzNTk3ZDlkNWRhODg5MGVl
OThhODQ0MmEyLi43MmYxZmI3ZjYwZGNiZDQ0ZTUxM2IyNDE4OTI5MGU1NzQ5YTc4YTUyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wSW5mby5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BJbmZvLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNs
dWRlICJERkdSZWdpc3RlcmVkU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiSGVhcENlbGwuaCIKICNp
bmNsdWRlICJQcml2YXRlRmllbGRQdXRLaW5kLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAogI2lmIEVOQUJMRShERkdfSklUKQpA
QCAtNTAsNiArNTEsOCBAQCBzdHJ1Y3QgT3BJbmZvIHsKICAgICBleHBsaWNpdCBPcEluZm8oQ2Fj
aGVhYmxlSWRlbnRpZmllciBpZGVudGlmaWVyKSA6IG1fdmFsdWUoc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KGlkZW50aWZpZXIucmF3Qml0cygpKSkgeyB9CiAgICAgZXhwbGljaXQgT3BJbmZvKEVDTUFN
b2RlIGVjbWFNb2RlKSA6IG1fdmFsdWUoZWNtYU1vZGUudmFsdWUoKSkgeyB9CiAgICAgZXhwbGlj
aXQgT3BJbmZvKFByaXZhdGVGaWVsZFB1dEtpbmQgcHV0S2luZCkgOiBtX3ZhbHVlKHB1dEtpbmQu
dmFsdWUoKSkgeyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRW51bVR5cGU+CisgICAgZXhwbGlj
aXQgT3BJbmZvKE9wdGlvblNldDxFbnVtVHlwZT4gb3B0aW9uU2V0KSA6IG1fdmFsdWUob3B0aW9u
U2V0LnRvUmF3KCkpIHsgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgZXhwbGlj
aXQgT3BJbmZvKFQqIHB0cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCmluZGV4IDhkMTVkNmFiMzUxNmI1ZWIwMmI3ZjYzZjQ0ODYxNzllOWI4ZTg0NGQuLjg4
ZmUyYzhkODZkYzk1ODA0ZTAxZmVkZTE5OWVkYmM2ZTkxYzdhZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMjM5OSw0OCArMjM5OSw2IEBAIEpT
Q19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2UsIGNoYXIq
LCAoVk0qIHZtUG9pbnRlciwgSlNDCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVQcm9wZXJ0eSwgRW5jb2RlZEpT
VmFsdWUsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBKU0NlbGwqIHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0gICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJB
TUUodm0pOwotICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2
bSwgY2FsbEZyYW1lKTsKLSAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
Ci0KLSAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZh
bHVlKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7Ci0KLSAgICBKU09iamVjdCog
YmFzZSA9IGJhc2VWYWx1ZS50b09iamVjdChnbG9iYWxPYmplY3QpOwotICAgIEVYQ0VQVElPTl9B
U1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpIHx8ICFiYXNlKTsKLSAgICBpZiAoIWJhc2UpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IGFzU3RyaW5nKHByb3BlcnR5KS0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0g
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKLSAgICBSRUxFQVNFX0FORF9SRVRV
Uk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVBy
b3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1lKSkpKTsKLX0KLQotSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkluU3RydWN0dXJlUHJvcGVydHksIEVuY29kZWRKU1ZhbHVl
LCAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNlLCBKU1N0cmluZyog
cHJvcGVydHkpKQotewotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICBDYWxs
RnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7Ci0gICAgSklUT3BlcmF0
aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotCi0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlW
YWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0eSkpKTsKLX0KLQotSlNDX0RFRklORV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbkhhc093blN0cnVjdHVyZVByb3BlcnR5LCBFbmNvZGVkSlNWYWx1
ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFzZSwgSlNTdHJpbmcq
IHByb3BlcnR5KSkKLXsKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0gICAgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwotICAgIEpJVE9wZXJh
dGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgY2FsbEZyYW1lKTsKLQotICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKLSAgICBhdXRvIHByb3BlcnR5
TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKLSAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwotICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3RQcm90b3R5cGVIYXNPd25Qcm9wZXJ0
eShnbG9iYWxPYmplY3QsIGJhc2UsIHByb3BlcnR5TmFtZSkpKTsKLX0KLQogSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDZWxsKiBiYXNlQ2VsbCwgaW50MzJfdCBzdWJzY3Jp
cHQpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTI0OTcsMTIgKzI0
NTUsMTA1IEBAIEpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25HZXRQcm9wZXJ0eUVu
dW1lcmF0b3JDZWxsLCBKU0NlbGwqLCAoSlNHbG9iYWxPCiAgICAgUkVMRUFTRV9BTkRfUkVUVVJO
KHNjb3BlLCBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKGdsb2JhbE9iamVjdCwgYmFzZSkpOwogfQog
Ci1KU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVG9JbmRleFN0cmluZywgSlNDZWxs
KiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludDMyX3QgaW5kZXgpKQorSlNDX0RF
RklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29k
ZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgdWludDMyX3QgaW5kZXgsIGludDMyX3QgbW9kZU51bWJlciwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yKSkKK3sKKyAgICBWTSYgdm0gPSBn
bG9iYWxPYmplY3QtPnZtKCk7CisgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUgPSBERUNMQVJFX0NB
TExfRlJBTUUodm0pOworICAgIEpJVE9wZXJhdGlvblByb2xvZ3VlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcih2bSwgY2FsbEZyYW1lKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok1vZGUgbW9kZSA9IHN0YXRp
Y19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4obW9kZU51bWJlcik7CisgICAg
aWYgKEpTVmFsdWU6OmRlY29kZShiYXNlVmFsdWUpLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAg
ICAgICAgQVNTRVJUKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbml0TW9kZSk7
CisgICAgICAgIEFTU0VSVCghaW5kZXgpOworICAgICAgICBBU1NFUlQoIWVudW1lcmF0b3ItPnNp
emVPZlByb3BlcnR5TmFtZXMoKSk7CisgICAgICAgIG1vZGUgPSBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkdlbmVyaWNNb2RlOworICAgIH0gZWxzZSB7CisgICAgICAgIEpTT2JqZWN0KiBiYXNl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2VWYWx1ZSkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAg
ICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgICAgICBjb25zdGV4
cHIgYm9vbCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nID0gZmFsc2U7CisgICAgICAg
IGVudW1lcmF0b3ItPmNvbXB1dGVOZXh0KGdsb2JhbE9iamVjdCwgYmFzZSwgaW5kZXgsIG1vZGUs
IHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcpOworICAgICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNW
YWx1ZSByZXN1bHQgPSBiaXR3aXNlX2Nhc3Q8SlNWYWx1ZT4oc3RhdGljX2Nhc3Q8dWludDY0X3Q+
KG1vZGUpIDw8IDMyIHwgaW5kZXggfCBKU1ZhbHVlOjpEb3VibGVFbmNvZGVPZmZzZXQpOworI2Vs
c2UKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUobW9kZSwgaW5kZXgpOworI2VuZGlmCisg
ICAgQVNTRVJUKHJlc3VsdC5pc0RvdWJsZSgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7Cit9CisKK0pTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25FbnVtZXJh
dG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCB1aW50MzJfdCBpbmRleCwgaW50MzJfdCBtb2RlTnVtYmVyLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IpKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9G
UkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KHZtLCBjYWxsRnJhbWUpOworCisgICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpJbmRleGVkTW9kZSkgeworICAgICAgICBpZiAoaW5kZXggPCBlbnVtZXJhdG9y
LT5pbmRleGVkTGVuZ3RoKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
U3RyaW5nKHZtLCBJZGVudGlmaWVyOjpmcm9tKHZtLCBpbmRleCkuc3RyaW5nKCkpKTsKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgfQorCisgICAgSlNTdHJp
bmcqIHJlc3VsdCA9IGVudW1lcmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAg
IGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
KworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworSlNDX0RFRklORV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JSZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCBF
bmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogYmFz
ZSwgdWludDMyX3QgaW5kZXgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvcikp
Cit7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworICAgIENhbGxGcmFtZSogY2Fs
bEZyYW1lID0gREVDTEFSRV9DQUxMX0ZSQU1FKHZtKTsKKyAgICBKSVRPcGVyYXRpb25Qcm9sb2d1
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGNhbGxGcmFtZSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgSlNTdHJpbmcqIHN0cmluZyA9IGVudW1l
cmF0b3ItPnByb3BlcnR5TmFtZUF0SW5kZXgoaW5kZXgpOworICAgIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIC8vIFRo
aXMgc2hvdWxkIG9ubHkgcmVhbGx5IHJldHVybiBmb3IgVGVybWluYXRpb25FeGNlcHRpb24gc2lu
Y2Ugd2Uga25vdyBzdHJpbmcgaXMgYmFja2VkIGJ5IGEgVVVJRC4KKyAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHNjb3BlLCB7IH0pOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBiYXNlLT50b09iamVj
dChnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShvYmplY3QtPmdl
dChnbG9iYWxPYmplY3QsIHByb3BlcnR5TmFtZSkpKTsKK30KKworSlNDX0RFRklORV9KSVRfT1BF
UkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0b3JJbkJ5VmFsLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgcHJvcGVydHlOYW1lVmFsdWUsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVO
dW1iZXIpKQoreworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBDYWxsRnJh
bWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CisgICAgSklUT3BlcmF0aW9u
UHJvbG9ndWVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIEpTVmFsdWUgYmFzZSA9IEpT
VmFsdWU6OmRlY29kZShiYXNlVmFsdWUpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUs
IHsgfSk7CisgICAgaWYgKG1vZGVOdW1iZXIgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJ
bmRleGVkTW9kZSAmJiBiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGpzQ2FzdDxKU09iamVjdCo+KGJhc2UpLT5oYXNQcm9wZXJ0eShnbG9i
YWxPYmplY3QsIGluZGV4KSkpOworCisgICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IGpzU2Vj
dXJlQ2FzdDxKU1N0cmluZyo+KHZtLCBKU1ZhbHVlOjpkZWNvZGUocHJvcGVydHlOYW1lVmFsdWUp
KTsKKyAgICBSRUxFQVNFX0FORF9SRVRVUk4oc2NvcGUsIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBwcm9wZXJ0
eU5hbWUpKSkpOworfQorCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVy
YXRvckhhc093blByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEVuY29kZWRKU1ZhbHVlIGJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgcHJvcGVy
dHlOYW1lVmFsdWUsIHVpbnQzMl90IGluZGV4LCBpbnQzMl90IG1vZGVOdW1iZXIpKQogewogICAg
IFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9
IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7CiAgICAgSklUT3BlcmF0aW9uUHJvbG9ndWVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBjYWxsRnJhbWUpOwotICAgIHJldHVybiBqc1N0cmluZyh2bSwg
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLnN0cmluZygpKTsKKyAgICBhdXRvIHNjb3BlID0g
REVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBKU1ZhbHVlIGJhc2UgPSBKU1ZhbHVlOjpk
ZWNvZGUoYmFzZVZhbHVlKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgIGlmIChtb2RlTnVtYmVyID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1v
ZGUgJiYgYmFzZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbihqc0Nhc3Q8SlNPYmplY3QqPihiYXNlKS0+aGFzT3duUHJvcGVydHkoZ2xvYmFsT2Jq
ZWN0LCBpbmRleCkpKTsKKworICAgIEpTU3RyaW5nKiBwcm9wZXJ0eU5hbWUgPSBqc1NlY3VyZUNh
c3Q8SlNTdHJpbmcqPih2bSwgSlNWYWx1ZTo6ZGVjb2RlKHByb3BlcnR5TmFtZVZhbHVlKSk7Cisg
ICAgYXV0byBpZGVudGlmaWVyID0gcHJvcGVydHlOYW1lLT50b0lkZW50aWZpZXIoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIFJFTEVBU0Vf
QU5EX1JFVFVSTihzY29wZSwgSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihvYmplY3RQcm90b3R5
cGVIYXNPd25Qcm9wZXJ0eShnbG9iYWxPYmplY3QsIGJhc2UsIGlkZW50aWZpZXIpKSkpOwogfQog
CiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTmV3UmVnZXhwV2l0aExhc3RJbmRl
eCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTQ2VsbCogcmVnZXhw
UHRyLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkTGFzdEluZGV4KSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKaW5kZXggMzE0ZTFmZWRlNTk1ZDBmYjhmYTgzNWVmNzIw
NWU2YjY0NWMzMDQ2Yi4uMTRlNDI1NzFkZjVkZThlMjg4NjQxM2JmMTg4MGNlNzYzNGVlMzEzZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTM2LDYgKzM2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBEYXRlSW5zdGFuY2U7CiBjbGFzcyBKU0JpZ0lu
dDsKIHN0cnVjdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZTsKK2NsYXNzIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjsKIAogbmFtZXNwYWNlIERGRyB7CiAKQEAgLTEwNCwxMiArMTA1LDE0IEBAIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvdG90eXBlT2YsIEVuY29kZWRK
U1ZhbHVlLCAoSlNHbG9iYWxPYmplCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkdldFByb3RvdHlwZU9mT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eSwgc2l6ZV90LCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCBpbnQzMl90KSk7
CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkhhc0VudW1lcmFibGVJbmRleGVk
UHJvcGVydHksIHNpemVfdCwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgaW50MzJfdCkpOwot
SlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxs
KikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25IYXNPd25TdHJ1Y3R1cmVQ
cm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVjdCosIEpTQ2VsbCosIEpTU3Ry
aW5nKikpOwotSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVyYXRpb25JblN0cnVjdHVyZVBy
b3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiwgSlNTdHJp
bmcqKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkdldFByb3BlcnR5RW51
bWVyYXRvciwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUpKTsKIEpT
Q19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uR2V0UHJvcGVydHlFbnVtZXJhdG9yQ2Vs
bCwgSlNDZWxsKiwgKEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKikpOwotSlNDX0RFQ0xBUkVfSklU
X09QRVJBVElPTihvcGVyYXRpb25Ub0luZGV4U3RyaW5nLCBKU0NlbGwqLCAoSlNHbG9iYWxPYmpl
Y3QqLCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1l
cmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2Jq
ZWN0KiwgRW5jb2RlZEpTVmFsdWUsIHVpbnQzMl90LCBpbnQzMl90LCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkVudW1lcmF0
b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lLCBFbmNvZGVkSlNWYWx1ZSwgKEpTR2xvYmFsT2JqZWN0
KiwgdWludDMyX3QsIGludDMyX3QsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciopKTsKK0pTQ19E
RUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvckluQnlWYWwsIEVuY29kZWRK
U1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUs
IHVpbnQzMl90LCBpbnQzMl90KSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
bkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUsIChKU0dsb2JhbE9iamVj
dCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdWludDMyX3QsIGludDMyX3QpKTsK
K0pTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1l
QW5kR2V0QnlWYWwsIEVuY29kZWRKU1ZhbHVlLCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqLCB1
aW50MzJfdCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKikpOworCiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbk5ld1JlZ2V4cFdpdGhMYXN0SW5kZXgsIEpTQ2VsbCosIChKU0ds
b2JhbE9iamVjdCosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRf
T1BFUkFUSU9OKG9wZXJhdGlvbk5ld0FycmF5LCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiwgU3Ry
dWN0dXJlKiwgdm9pZCosIHNpemVfdCkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElPTihvcGVy
YXRpb25OZXdFbXB0eUFycmF5LCBjaGFyKiwgKFZNKiwgU3RydWN0dXJlKikpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAppbmRleCBhYTdjNjFlNjBhZjUwN2ViOTE3ZTMwNmJhYjg1MzdjMGU4OWUyZTBk
Li4xNjIyZGQ4YjFiNTIxY2M0MWRmYTg1YWI1MzI2MmVjZTgwZmU3NGYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcApAQCAtNDczLDE0ICs0NzMsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEVk
Z2UgY2hpbGQxID0gbV9ncmFwaC5jaGlsZChub2RlLCAwKTsKICAgICAgICAgICAgIGlmICghY2hp
bGQxLT5wcmVkaWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
KwogICAgICAgICAgICAgRWRnZSBjaGlsZDIgPSBtX2dyYXBoLmNoaWxkKG5vZGUsIDEpOwogICAg
ICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IG5vZGUtPmFycmF5TW9kZSgpLnJlZmluZSgK
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLAogICAgICAgICAgICAgICAgIGNoaWxkMS0+
cHJlZGljdGlvbigpLAogICAgICAgICAgICAgICAgIGNoaWxkMi0+cHJlZGljdGlvbigpLAogICAg
ICAgICAgICAgICAgIFNwZWNOb25lKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgog
ICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQpAQCAtODYyLDYg
Kzg2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAg
ICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAg
ICAgICBjYXNlIEFycmF5UHVzaDoKICAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgpAQCAtODgyLDcg
Kzg4Myw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0UHJpdmF0ZU5hbWU6CiAgICAgICAg
IGNhc2UgR2V0UHJpdmF0ZU5hbWVCeUlkOgogICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6
Ci0gICAgICAgIGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAg
ICAgY2FzZSBEaXJlY3RDYWxsOgogICAgICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoK
QEAgLTEyMDUsMjEgKzEyMDUsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rp
b24oU3BlY09iamVjdE90aGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2Ug
R2V0RW51bWVyYWJsZUxlbmd0aDogeworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFj
dE1vZGU6CisgICAgICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKICAgICAg
ICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQorCisgICAgICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6CisgICAgICAgIGNh
c2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OgogICAgICAgICBjYXNlIEluQnlWYWw6CiAgICAg
ICAgIGNhc2UgSW5CeUlkOgogICAgICAgICBjYXNlIEhhc1ByaXZhdGVOYW1lOgogICAgICAgICBj
YXNlIEhhc1ByaXZhdGVCcmFuZDoKICAgICAgICAgY2FzZSBIYXNPd25Qcm9wZXJ0eToKLSAgICAg
ICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBJblN0cnVjdHVy
ZVByb3BlcnR5OgotICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAgICAgICBjYXNlIEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6
IHsKKyAgICAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6IHsKICAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTEyMjcsMTggKzEyMjYsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
U3BlY0NlbGwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBH
ZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6IHsKLSAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
U3BlY0NlbGwgfCBTcGVjT3RoZXIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKFNwZWNDZWxsIHwgU3BlY090aGVyKTsKKworICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlOiB7CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNw
ZWNGdWxsTnVtYmVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2UgVG9JbmRleFN0cmluZzogewotICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5n
KTsKKworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7Cisg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNTdHJpbmcgfCBTcGVjT3RoZXIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKwogICAgICAgICBjYXNlIFBhcnNlSW50OiB7CiAgICAg
ICAgICAgICAvLyBXZSBleHBlY3QgdGhpcyBub2RlIHRvIGFsbW9zdCBhbHdheXMgcHJvZHVjZSBh
biBpbnQzMi4gSG93ZXZlciwKICAgICAgICAgICAgIC8vIGl0J3MgcG9zc2libGUgaXQgcHJvZHVj
ZXMgTmFOIG9yIGludGVnZXJzIG91dCBvZiBpbnQzMiByYW5nZS4gV2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUxvd2VyaW5nUGhhc2UuY3BwCmluZGV4IGM5NjM3YTFk
MTNmYWFmOWVjMDQ1NjU0ODEwNWY1N2UyOTk5ZDRjMDMuLmUzYTIzOWEzM2UzMDhiMmJlYWIwMmFk
MGM1MTNkZGI0OWNhMDY3ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU1NBTG93ZXJpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTU0FMb3dlcmluZ1BoYXNlLmNwcApAQCAtODIsMTAgKzgyLDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBI
YXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgogICAgICAgICAgICAgbG93ZXJCb3VuZHNDaGVj
ayhtX2dyYXBoLmNoaWxkKG1fbm9kZSwgMCksIG1fZ3JhcGguY2hpbGQobV9ub2RlLCAxKSwgbV9n
cmFwaC5jaGlsZChtX25vZGUsIDIpKTsKICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNh
c2UgRW51bWVyYXRvckdldEJ5VmFsOgogICAgICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAg
ICAgICBsb3dlckJvdW5kc0NoZWNrKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSwgbV9n
cmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MikpOwogICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCmluZGV4IDBmOWJkZTZhMzE1ZGE3MTcyYTMwZjYxOWVlMmQwYjliNDYw
ZTJjNTAuLjFlMDQ0Y2Y5ZGIxYzYyYTdhOTcwMGU0MTVjYjczMDRiOWM5YTVhMjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0yOTYsMTAgKzI5
Niw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25vCiAgICAgY2FzZSBCb29sZWFuVG9OdW1iZXI6
CiAgICAgY2FzZSBGaWF0SW50NTI6CiAgICAgY2FzZSBIYXNJbmRleGVkUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5OgotICAgIGNhc2UgR2V0RW51bWVyYXRv
clN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAg
ICBjYXNlIFRvSW5kZXhTdHJpbmc6CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToK
ICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZh
bE91dE9mQm91bmRzOgpAQCAtMzcyLDYgKzM2OCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0
cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBpZ25v
CiAgICAgICAgIC8vIHRvIGNhcHR1cmUgInByb2ZpbGluZyIgYXQgdGhlIHBvaW50IGluIGNvbnRy
b2wgZmxvdyBoZXJlIHRoZSB1c2VyIHB1dCB0aGVtLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
KyAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICBjYXNlIEdldEJ5VmFsOgogICAgIGNh
c2UgR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpA
QCAtNDk2LDYgKzQ5MywxMSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0YXRlLCBHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIGJvb2wgaWdubwogICAgICAgICByZXR1
cm4gaXNTYWZlOwogICAgIH0KIAorICAgIGNhc2UgRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFu
ZE1vZGU6CisgICAgLy8gVGhlc2UgdGVjaG5pY2FsbHkgZG9uJ3QgaGF2ZSBlZmZlY3RzIGJ1dCB0
aGV5J2xsIG9ubHkgZXZlciBmb2xsb3cgYSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9k
ZSBzbyB3ZSBtaWdodCBhcyB3ZWxsIHJldHVybiBmYWxzZS4KKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOgogICAgIGNhc2UgVG9UaGlz
OgogICAgIGNhc2UgQ3JlYXRlVGhpczoKICAgICBjYXNlIENyZWF0ZVByb21pc2U6CkBAIC01OTUs
NiArNTk3LDggQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwg
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBib29sIGlnbm8KICAgICBjYXNlIE5ld1N0cmluZ09i
amVjdDoKICAgICBjYXNlIEluQnlWYWw6CiAgICAgY2FzZSBJbkJ5SWQ6CisgICAgY2FzZSBFbnVt
ZXJhdG9ySW5CeVZhbDoKKyAgICBjYXNlIEVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eToKICAgICBj
YXNlIEhhc1ByaXZhdGVOYW1lOgogICAgIGNhc2UgSGFzUHJpdmF0ZUJyYW5kOgogICAgIGNhc2Ug
SGFzT3duUHJvcGVydHk6CkBAIC02MzksMTIgKzY0Myw2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShB
YnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgYm9vbCBp
Z25vCiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CiAg
ICAgY2FzZSBNdWx0aURlbGV0ZUJ5T2Zmc2V0OgotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0
aDoKLSAgICBjYXNlIEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEhh
c0VudW1lcmFibGVQcm9wZXJ0eToKLSAgICBjYXNlIEhhc093blN0cnVjdHVyZVByb3BlcnR5Ogot
ICAgIGNhc2UgSW5TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOgog
ICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgogICAgIGNhc2UgUGhhbnRvbU5ld09iamVj
dDoKICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMjkyY2VmNjFhMWVkMTUxOGE2MDg3
MTM0MmQ2NDRlZDk3OGIxZTViOC4uNTFjZWRjZjRiMDY1ZDQ1ZWJmM2NmMjU1YmYxNmUxZGFkMDk2
M2UzZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKQEAgLTE2MzUsMjUgKzE2MzUsMTUgQEAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFs
dWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQpCiB7CiB9CiAKK0pTVmFsdWVSZWdz
VGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCogaml0LCBHUFJS
ZWcgc3BlY2lmaWNQYXlsb2FkKQogI2lmIFVTRShKU1ZBTFVFNjQpCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0
aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCkKLSAgICA6
IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCi17Ci19CisgICAgOiBtX2dwcihqaXQsIHNwZWNp
ZmljUGF5bG9hZCkKICNlbHNlCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotSlNWYWx1ZVJlZ3NUZW1w
b3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFn
LCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCByZXN1bHRXb3JkKQorICAgIDogbV9wYXlsb2Fk
R1BSKGppdCwgc3BlY2lmaWNQYXlsb2FkKQorICAgICwgbV90YWdHUFIoaml0KQorI2VuZGlmCiB7
Ci0gICAgaWYgKHJlc3VsdFdvcmQgPT0gUGF5bG9hZFdvcmQpIHsKLSAgICAgICAgbV9wYXlsb2Fk
R1BSID0gR1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOwotICAgICAgICBtX3RhZ0dQ
UiA9IEdQUlRlbXBvcmFyeShqaXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fcGF5bG9hZEdQ
UiA9IEdQUlRlbXBvcmFyeShqaXQpOwotICAgICAgICBtX3RhZ0dQUiA9IEdQUlRlbXBvcmFyeShq
aXQsIFJldXNlLCBvcGVyYW5kKTsKLSAgICB9CiB9Ci0jZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVF
NjQpCiBKU1ZhbHVlUmVnc1RlbXBvcmFyeTo6SlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRp
dmVKSVQqIGppdCwgUmV1c2VUYWcsIEpTVmFsdWVPcGVyYW5kJiBvcGVyYW5kKQpAQCAtMjU5NSw3
ICsyNTg1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQXQoTm9k
ZSogbm9kZSkKICAgICBzdHJpY3RJbnQzMlJlc3VsdChzY3JhdGNoUmVnLCBtX2N1cnJlbnROb2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9k
ZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5v
ZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRh
Rm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLmNoaWxkKG5vZGUsIDApKTsKICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC5jaGls
ZChub2RlLCAxKSk7CkBAIC0yNjA0LDE3ICsyNTk0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKE5vZGUqIG5vZGUpCiAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOwogCi0gICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgR1BSUmVnIHNjcmF0
Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFRhZzsKLSAgICBHUFJSZWcgcmVzdWx0VGFnUmVnID0gSW52YWxpZEdQUlJl
ZzsKLSAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpKSB7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSByZWFsUmVzdWx0VGFnKHRoaXMpOwotICAgICAgICByZXN1bHRUYWcuYWRv
cHQocmVhbFJlc3VsdFRhZyk7Ci0gICAgICAgIHJlc3VsdFRhZ1JlZyA9IHJlc3VsdFRhZy5ncHIo
KTsKLSAgICB9Ci0jZW5kaWYKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIERhdGFG
b3JtYXQgZm9ybWF0OworICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgo
bm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kcygpID8gRGF0YUZvcm1hdEpTIDogRGF0YUZv
cm1hdENlbGwpOworICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gcmVzdWx0UmVncy5wYXlsb2FkR1BS
KCk7CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5l
Z2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCiAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0
T2ZWYWx1ZSgpKSwgc2NyYXRjaFJlZyk7CkBAIC0yNjUwLDggKzI2MzMsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiBub2RlKQogICAgICAgICAg
ICAgYmlnQ2hhcmFjdGVyLCB0aGlzLCBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcsIHNj
cmF0Y2hSZWcsICZ2bSwgc2NyYXRjaFJlZykpOwogCiAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgp
LmlzT3V0T2ZCb3VuZHMoKSkgeworICAgICAgICBBU1NFUlQoZm9ybWF0ID09IERhdGFGb3JtYXRK
Uyk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFRhZ1JlZyk7CisgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKICNl
bmRpZgogCiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2ppdC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTI2NjksMzQgKzI2NTMsMjQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcoTm9kZSogbm9k
ZSkKICAgICAgICAgICAgIG1faml0LmdyYXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRy
YW5zaXRpb24oc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlKTsKICAgICAgICAgICAgIG1faml0Lmdy
YXBoKCkucmVnaXN0ZXJBbmRXYXRjaFN0cnVjdHVyZVRyYW5zaXRpb24ob2JqZWN0UHJvdG90eXBl
U3RydWN0dXJlKTsKIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihtYWtlVW5pcXVlPFNhbmVTdHJpbmdHZXRCeVZhbFNsb3dQYXRoR2VuZXJhdG9y
PigKLSAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgSlNWYWx1ZVJlZ3Moc2NyYXRj
aFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGdsb2JhbE9iamVjdCks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0jZWxzZQogICAgICAgICAgICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3IobWFrZVVuaXF1ZTxTYW5lU3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvcj4o
Ci0gICAgICAgICAgICAgICAgb3V0T2ZCb3VuZHMsIHRoaXMsIEpTVmFsdWVSZWdzKHJlc3VsdFRh
Z1JlZywgc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIGds
b2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0jZW5kaWYKKyAgICAgICAgICAg
ICAgICBvdXRPZkJvdW5kcywgdGhpcywgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1Bv
aW50ZXIobV9ncmFwaCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAg
ICAgICAgfSBlbHNlIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoCiAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAogICAgICAgICAgICAg
ICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxTdHJpbmdJbnQsCi0g
ICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0jZWxzZQot
ICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICAgICAgc2xvd1Bh
dGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBvdXRPZkJvdW5kcywgdGhpcywgb3BlcmF0aW9u
R2V0QnlWYWxTdHJpbmdJbnQsCi0gICAgICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3Vs
dFRhZ1JlZywgc2NyYXRjaFJlZyksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgs
IGdsb2JhbE9iamVjdCksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0jZW5kaWYKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgZ2xvYmFsT2JqZWN0KSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKICAgICAgICAgfQogICAg
ICAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBqc1ZhbHVlUmVzdWx0KHNjcmF0Y2hS
ZWcsIG1fY3VycmVudE5vZGUpOwotI2Vsc2UKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRU
YWdSZWcsIHNjcmF0Y2hSZWcsIG1fY3VycmVudE5vZGUpOwotI2VuZGlmCi0gICAgfSBlbHNlCi0g
ICAgICAgIGNlbGxSZXN1bHQoc2NyYXRjaFJlZywgbV9jdXJyZW50Tm9kZSk7CisgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0UmVncywgbV9jdXJyZW50Tm9kZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGZvcm1hdCA9PSBEYXRhRm9ybWF0SlMpCisgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG1fY3VycmVudE5vZGUpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpOworICAgICAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbV9jdXJyZW50Tm9kZSk7CisgICAgICAgIH0K
KyAgICB9CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVGcm9tQ2hhckNvZGUoTm9k
ZSogbm9kZSkKQEAgLTMzNDksMTQgKzMzMjMsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bG9h
ZEZyb21JbnRUeXBlZEFycmF5KEdQUlJlZyBzdG9yYWdlUmVnLCBHUFJSZWcgcHJvcGVydHlSZWcK
ICAgICB9CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNldEludFR5cGVkQXJyYXlMb2FkUmVz
dWx0KE5vZGUqIG5vZGUsIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlUeXBlIHR5cGUsIGJv
b2wgY2FuU3BlY3VsYXRlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2V0SW50VHlwZWRBcnJheUxv
YWRSZXN1bHQoTm9kZSogbm9kZSwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5
cGUgdHlwZSwgYm9vbCBjYW5TcGVjdWxhdGUsIGJvb2wgc2hvdWxkQm94KQogewotICAgIGlmIChl
bGVtZW50U2l6ZSh0eXBlKSA8IDQgfHwgaXNTaWduZWQodHlwZSkpIHsKKyAgICBib29sIGlzVUlu
dDMyID0gZWxlbWVudFNpemUodHlwZSkgPT0gNCAmJiAhaXNTaWduZWQodHlwZSk7CisgICAgR1BS
UmVnIHJlc3VsdFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOworCisgICAgaWYgKHNob3Vs
ZEJveCkgeworICAgICAgICBpZiAoaXNVSW50MzIpIHsKKyAgICAgICAgICAgIEZQUlRlbXBvcmFy
eSBmcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUo
cmVzdWx0UmVnLCBmcmVzdWx0LmZwcigpKTsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IHBvc2l0aXZlID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JF
cXVhbCwgcmVzdWx0UmVnLCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICAgICAgbV9qaXQuYWRk
RG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJkFzc2VtYmx5SGVscGVyczo6dHdv
VG9UaGUzMiksIGZyZXN1bHQuZnByKCkpOworICAgICAgICAgICAgcG9zaXRpdmUubGluaygmbV9q
aXQpOworICAgICAgICAgICAgbV9qaXQuYm94RG91YmxlKGZyZXN1bHQuZnByKCksIHJlc3VsdFJl
Z3MpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1faml0LmJveEludDMyKHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpLCByZXN1bHRSZWdzKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNVSW50
MzIpIHsKKyAgICAgICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpIDwgNCB8fCBpc1NpZ25lZCh0
eXBlKSk7CiAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGVsZW1lbnRTaXplKHR5cGUpID09
IDQgJiYgIWlzU2lnbmVkKHR5cGUpKTsKKwogICAgIGlmIChub2RlLT5zaG91bGRTcGVjdWxhdGVJ
bnQzMigpICYmIGNhblNwZWN1bGF0ZSkgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIHJlc3VsdFJlZywgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgIHN0cmlj
dEludDMyUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CkBAIC0zMzgwLDcgKzMzNzEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2RlKiBub2RlLCBH
UFJSZWcgcmVzdWx0UmVnLCBUeQogICAgIGRvdWJsZVJlc3VsdChmcmVzdWx0LmZwcigpLCBub2Rl
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbnRUeXBlZEFy
cmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5
cGUgdHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFG
b3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBBU1NF
UlQoaXNJbnQodHlwZSkpOwogICAgIApAQCAtMzM5MiwxMyArMzM4MywxNSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlw
ZWRBcnJheVR5cGUgdAogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwog
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKIAotICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdFJlZyA9IHJlc3VsdC5ncHIoKTsKKyAg
ICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgIHN0
ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVmaXgoRGF0YUZvcm1hdEludDMyKTsKKyAg
ICBib29sIHNob3VsZEJveCA9IGZvcm1hdCA9PSBEYXRhRm9ybWF0SlM7CiAKICAgICBlbWl0VHlw
ZWRBcnJheUJvdW5kc0NoZWNrKG5vZGUsIGJhc2VSZWcsIHByb3BlcnR5UmVnKTsKLSAgICBsb2Fk
RnJvbUludFR5cGVkQXJyYXkoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIHJlc3VsdFJlZywgdHlw
ZSk7CisgICAgbG9hZEZyb21JbnRUeXBlZEFycmF5KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgdHlwZSk7CiAgICAgY29uc3RleHByIGJvb2wgY2FuU3Bl
Y3VsYXRlID0gdHJ1ZTsKLSAgICBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChub2RlLCByZXN1
bHRSZWcsIHR5cGUsIGNhblNwZWN1bGF0ZSk7CisgICAgc2V0SW50VHlwZWRBcnJheUxvYWRSZXN1
bHQobm9kZSwgcmVzdWx0UmVncywgdHlwZSwgY2FuU3BlY3VsYXRlLCBzaG91bGRCb3gpOwogfQog
CiBib29sIFNwZWN1bGF0aXZlSklUOjpnZXRJbnRUeXBlZEFycmF5U3RvcmVPcGVyYW5kKApAQCAt
MzYzNiw3ICszNjI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
SW50VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVnIHByb3BlcnQKICAgICBub1Jlc3VsdChu
b2RlKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5
cGVkQXJyYXkoTm9kZSogbm9kZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVk
QXJyYXlUeXBlIHR5cGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdz
LCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpCiB7CiAg
ICAgQVNTRVJUKGlzRmxvYXQodHlwZSkpOwogICAgIApAQCAtMzY0OCw2ICszNjQxLDEwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUq
IG5vZGUsIFR5cGVkQXJyYXlUeXBlCiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHku
Z3ByKCk7CiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogCisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICBzdGQ6OnRp
ZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3JtYXREb3VibGUpOworCiAgICAg
RlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmZwcigpOwogICAgIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2sobm9kZSwgYmFzZVJlZywgcHJv
cGVydHlSZWcpOwpAQCAtMzY2NCw3ICszNjYxLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBl
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIAotICAg
IGRvdWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIGlmIChmb3JtYXQgPT0gRGF0YUZv
cm1hdEpTKSB7CisgICAgICAgIG1faml0LmJveERvdWJsZShyZXN1bHRSZWcsIHJlc3VsdFJlZ3Mp
OworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSk7CisgICAgICAgIGRv
dWJsZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgIH0KIH0KIAogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJS
ZWcgcHJvcGVydHksIE5vZGUqIG5vZGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCkBAIC0zNzAzLDcg
KzM3MDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5
cGVkQXJyYXkoR1BSUmVnIGJhc2UsIEdQUlJlZyBwcm9wZQogICAgIG5vUmVzdWx0KG5vZGUpOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3Ry
aW5nKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JP
YmplY3RXaXRoU3RyaW5nKE5vZGUqIG5vZGUsIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxl
PEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBw
cmVmaXgpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcyKHRoaXMs
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwpAQCAtMzcxMSwxOSArMzcxNCwyMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRoU3RyaW5nKE5v
ZGUqIG5vZGUpCiAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgIEdQUlJlZyBh
cmcyR1BSID0gYXJnMi5ncHIoKTsKIAorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisKICAgICBzcGVjdWxhdGVPYmplY3QobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSwgYXJn
MUdQUik7CiAgICAgc3BlY3VsYXRlU3RyaW5nKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSks
IGFyZzJHUFIpOwogCiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBKU1ZhbHVlUmVnc0ZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
cmVzdWx0LnJlZ3MoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0
U3RyaW5nLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYXJnMUdQUiwg
YXJnMkdQUik7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKIAogICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSogbm9kZSkKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSogbm9kZSwgY29uc3Qg
U2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3Jt
YXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBhcmcxKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGFyZzIodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CkBA
IC0zNzMxLDEyICszNzM1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZh
bEZvck9iamVjdFdpdGhTeW1ib2woTm9kZSogbm9kZSkKICAgICBHUFJSZWcgYXJnMUdQUiA9IGFy
ZzEuZ3ByKCk7CiAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwogCisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkg
PSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKwogICAgIHNwZWN1bGF0ZU9iamVjdChtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApLCBhcmcxR1BSKTsKICAgICBzcGVjdWxhdGVTeW1ib2wobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAxKSwgYXJnMkdQUik7CiAKICAgICBmbHVzaFJlZ2lzdGVycygp
OwotICAgIEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBhcmcxR1BSLCBhcmcyR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOwogCkBAIC04MDM4LDE3ICs4MDQzLDE3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVHZXRUeXBlZEFycmF5Qnl0ZU9mZnNldChOb2RlKiBub2RlKQogICAgIHN0cmljdEludDMyUmVz
dWx0KHZlY3RvckdQUiwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhOb2RlKiBub2RlLCBjb25zdCBTY29w
ZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBw
cmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICBHUFJUZW1w
b3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3By
KCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hSZWcg
PSBzY3JhdGNoLmdwcigpOworCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICBzdGQ6
OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpTKTsKKyAg
ICBHUFJSZWcgc2NyYXRjaFJlZyA9IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpOwogICAgIAogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwpAQCAtODA3OSwyMiArODA4NCwy
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50
cyhOb2RlKiBub2RlKQogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5v
ZGUqIG5vZGUpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjb3BlZEFy
Z3VtZW50cyhOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVl
UmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAwKSk7CiAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBH
UFJUZW1wb3Jhcnkgc2NyYXRjaDIodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBi
YXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogICAgIEdQUlJlZyBzY3Jh
dGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNo
Mi5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsK
KworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgc3RkOjp0aWUocmVzdWx0UmVncywg
c3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CiAgICAgCiAgICAgbV9qaXQubG9h
ZFB0cigKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJn
dW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKQEAg
LTEzNDQyLDQ0ICsxMzQ0OCwzNTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVRocm93
U3RhdGljRXJyb3IoTm9kZSogbm9kZSkKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoTm9kZSogbm9kZSkKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9k
ZShOb2RlKiBub2RlKQogewotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2Us
IGVudW1lcmF0b3IpOworICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDApOworICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgbW9kZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKyAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MykpOworCisgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgR1BSUmVnIG1v
ZGVHUFIgPSBtb2RlLmdwcigpOwogICAgIEdQUlJlZyBlbnVtZXJhdG9yR1BSID0gZW51bWVyYXRv
ci5ncHIoKTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogCi0gICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSwgcmVzdWx0R1BSKTsKLSAg
ICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwotfQorICAgIGlmIChub2RlLT5l
bnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRN
b2RlKSB7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcywgUmV1c2UsIGluZGV4KTsKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVIYXNFbnVtZXJhYmxlUHJvcGVydHkoTm9kZSogbm9kZSkKLXsKLSAgICBKU1Zh
bHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVTb3VyY2UoKSwgbm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJh
dG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoMCkpKTsKIAotICAgIEpTVmFsdWVSZWdzIGJhc2VSZWdz
ID0gYmFzZS5qc1ZhbHVlUmVncygpOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgaW5jcmVtZW50TG9vcDsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZTsKKyAgICAgICAgY29tcGlsZUhhc0luZGV4
ZWRQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5LCBz
Y29wZWRMYW1iZGE8c3RkOjp0dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4oWyZdIHsKKworICAgICAg
ICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgc2NyYXRjaC5ncHIoKSk7CisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAgICAgICAgIGluY3JlbWVudExvb3AgPSBt
X2ppdC5sYWJlbCgpOworICAgICAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBz
Y3JhdGNoLmdwcigpKTsKKworICAgICAgICAgICAgaW5pdE1vZGUubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgZG9uZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHNjcmF0Y2guZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9mZnNldCgpKSk7CisgICAg
ICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0UmVncy5w
YXlsb2FkR1BSKCkpOworICAgICAgICB9KSk7CisgICAgICAgIG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpLmxpbmtUbyhpbmNy
ZW1lbnRMb29wLCAmbV9qaXQpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworCisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
RG91YmxlRW5jb2RlT2Zmc2V0IHwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpIDw8IDMyKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkp
OworICAgICAgICBtX2ppdC5vcjY0KHNjcmF0Y2guZ3ByKCksIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpKTsKKyNlbHNlCisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyNlbmRp
ZgorCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAobm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCkgPT0gSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlICYmIGJhc2VFZGdlLnVzZUtp
bmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhp
cywgYmFzZUVkZ2UpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7
CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisKKyAgICAgICAgLy8gSGFzIHRoZSBzYW1l
IHN0cnVjdHVyZSBhcyB0aGUgZW51bWVyYXRvci4KKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRD
YWNoZSwgSlNWYWx1ZVNvdXJjZSgpLCBub2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVj
dHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGVudW1lcmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNl
dE9mZnNldCgpKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlU291cmNlKCksIG5vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6T3duU3RydWN0dXJlTW9kZSksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKSk7CisKKyAg
ICAgICAgbV9qaXQubW92ZShpbmRleEdQUiwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpbml0TW9kZSA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgbW9kZUdQUik7CisKKyAgICAgICAgbV9qaXQuYWRkMzIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwor
CisgICAgICAgIGluaXRNb2RlLmxpbmsoJm1faml0KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
ICAgICBtX2ppdC5vcjY0KFRydXN0ZWRJbW02NChKU1ZhbHVlOjpEb3VibGVFbmNvZGVPZmZzZXQg
fCBzdGF0aWNfY2FzdDx1aW50NjRfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1
Y3R1cmVNb2RlKSA8PCAzMiksIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNlbHNlCisgICAg
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3du
U3RydWN0dXJlTW9kZSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2VuZGlmCisKKyAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhpcywgYmFzZUVkZ2UpOworICAgIEpTVmFsdWVS
ZWdzIGJhc2VSZWdzID0gYmFzZS5yZWdzKCk7CiAKICAgICBmbHVzaFJlZ2lzdGVycygpOwogICAg
IEpTVmFsdWVSZWdzRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwogICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uSGFzRW51bWVyYWJsZVByb3BlcnR5LCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFr
UG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2RlLCByZXN1bHRSZWdzLCBUcnVzdGVk
SW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSLCBlbnVtZXJh
dG9yR1BSKTsKICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwotICAgIGJsZXNzZWRCb29sZWFu
UmVzdWx0KHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBub2RlKTsKKyAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVG9J
bmRleFN0cmluZyhOb2RlKiBub2RlKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUVudW1l
cmF0b3JOZXh0RXh0cmFjdEluZGV4KE5vZGUqIG5vZGUpCiB7Ci0gICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB1cGRhdGVkUGFpcih0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcGFpclJlZ3MgPSB1cGRhdGVkUGFpci5qc1Zh
bHVlUmVncygpOworICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gcGFpclJlZ3MucGF5bG9hZEdQUigp
OwogCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1
bHQodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVG9JbmRl
eFN0cmluZywgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgaW5kZXhHUFIp
OwotICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Ci0gICAgY2VsbFJlc3VsdChyZXN1bHRHUFIs
IG5vZGUpOworCisgICAgbV9qaXQuYW5kMzIoVHJ1c3RlZEltbTMyKHN0ZDo6bnVtZXJpY19saW1p
dHM8dWludDMyX3Q+OjptYXgoKSksIHBheWxvYWRHUFIsIHJlc3VsdEdQUik7CisKKyAgICBzdHJp
Y3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShOb2RlKiBub2RlKQoreworICAgIEpT
VmFsdWVPcGVyYW5kIHVwZGF0ZWRQYWlyKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBKU1Zh
bHVlUmVncyBwYWlyUmVncyA9IHVwZGF0ZWRQYWlyLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVn
IHBhaXJHUFIgPSBpczY0Qml0KCkgPyBwYWlyUmVncy5wYXlsb2FkR1BSKCkgOiBwYWlyUmVncy50
YWdHUFIoKTsKKworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworI2lmIENQVShBUk02NCkgJiYgVVNFKEpTVkFMVUU2
NCkKKyAgICBtX2ppdC5leHRyYWN0VW5zaWduZWRCaXRmaWVsZDY0KHBhaXJHUFIsIFRydXN0ZWRJ
bW0zMigzMiksIFRydXN0ZWRJbW0zMihXVEY6OmZhc3RMb2cyKHN0YXRpY19jYXN0PHVuc2lnbmVk
PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2sgKyAxKSkpLCBy
ZXN1bHRHUFIpOworI2Vsc2UKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG1faml0LnJzaGlmdDY0
KHBhaXJHUFIsIFRydXN0ZWRJbW0zMigzMiksIHJlc3VsdEdQUik7CisjZWxzZQorICAgIG1faml0
Lm1vdmUocGFpckdQUiwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgIG1faml0LmFuZDMyKFRydXN0
ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVudW1lcmF0aW9uTW9kZU1hc2spLCBy
ZXN1bHRHUFIpOworI2VuZGlmCisKKyAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvck5leHRVcGRh
dGVQcm9wZXJ0eU5hbWUoTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9w
ZXJhbmQgaW5kZXhPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgbW9kZU9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3JPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxk
MygpKTsKKyAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHRUZW1wKHRoaXMpOworCisgICAg
R1BSUmVnIGluZGV4ID0gaW5kZXhPcGVyYW5kLmdwcigpOworICAgIEdQUlJlZyBtb2RlID0gbW9k
ZU9wZXJhbmQuZ3ByKCk7CisgICAgR1BSUmVnIGVudW1lcmF0b3IgPSBlbnVtZXJhdG9yT3BlcmFu
ZC5ncHIoKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0VGVtcC5yZWdzKCk7
CisKKyAgICBPcHRpb25TZXQgc2Vlbk1vZGVzID0gbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZUNhc2VzOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG9wZXJhdGlvbkNhbGw7CisKKyAgICBib29sIG5lZWRzT3BlcmF0aW9uID0g
c2Vlbk1vZGVzLmNvbnRhaW5zKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUp
OworCisgICAgLy8gTWFrZSBzdXJlIHdlIGZsdXNoIG9uIGFsbCBjb2RlIHBhdGhzIGlmIHdlIGNv
dWxkIGNhbGwgdGhlIG9wZXJhdGlvbi4KKyAgICBpZiAobmVlZHNPcGVyYXRpb24pCisgICAgICAg
IGZsdXNoUmVnaXN0ZXJzKCk7CisKKyAgICBpZiAoc2Vlbk1vZGVzLmNvbnRhaW5zQW55KHsgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlLCBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6OkdlbmVyaWNNb2RlIH0pKSB7CisKKyAgICAgICAgaWYgKG5lZWRzT3BlcmF0aW9u
KQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FsbCA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgbW9kZSwgVHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SW5kZXhlZE1vZGUpKTsKKworICAgICAgICBhdXRvIG91dE9mQm91bmRzID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGVudW1lcmF0b3IsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvciwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxvYWRH
UFIoKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChy
ZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgaW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciks
IHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVzdWx0UmVncy50
YWdHUFIoKSk7CisjZW5kaWYKKyAgICAgICAgZG9uZUNhc2VzLmFwcGVuZChtX2ppdC5qdW1wKCkp
OworCisgICAgICAgIG91dE9mQm91bmRzLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92
ZVRydXN0ZWRWYWx1ZShqc051bGwoKSwgcmVzdWx0UmVncyk7CisgICAgfQorCisgICAgaWYgKG5l
ZWRzT3BlcmF0aW9uKSB7CisgICAgICAgIGlmIChvcGVyYXRpb25DYWxsLmlzU2V0KCkpIHsKKyAg
ICAgICAgICAgIGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIG9w
ZXJhdGlvbkNhbGwubGluaygmbV9qaXQpOworICAgICAgICB9CisgICAgICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVQcm9wZXJ0eU5hbWUsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBpbmRleCwgbW9kZSwgZW51bWVyYXRvcik7Cisg
ICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgfQorCisgICAgZG9uZUNhc2VzLmxp
bmsoJm1faml0KTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworfQorCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKE5vZGUqIG5vZGUp
Cit7CisgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7Cisg
ICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAoR1BSUmVnIGJhc2VDZWxsR1BSKSB7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgICAgIEpTVmFsdWVSZWdzVGVt
cG9yYXJ5IHJlc3VsdDsKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAg
R1BSUmVnIGluZGV4R1BSOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUjsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgYmFkU3RydWN0dXJlU2xvd1BhdGg7CisKKyAgICAgICAgY29t
cGlsZUdldEJ5VmFsKG5vZGUsIHNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBE
YXRhRm9ybWF0PihEYXRhRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0KSB7CisgICAgICAgICAgICBF
ZGdlIHN0b3JhZ2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKTsKKyAgICAgICAg
ICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2U7CisgICAgICAgICAgICBpZiAoc3RvcmFnZUVkZ2Up
CisgICAgICAgICAgICAgICAgc3RvcmFnZS5lbXBsYWNlKHRoaXMsIHN0b3JhZ2VFZGdlKTsKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDMpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBtb2RlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkpOworICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51bWVyYXRvcih0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDUpKTsKKworICAgICAgICAgICAgR1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdw
cigpOworICAgICAgICAgICAgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgICAgIGVu
dW1lcmF0b3JHUFIgPSBlbnVtZXJhdG9yLmdwcigpOworCisgICAgICAgICAgICByZXN1bHQgPSBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MgPSByZXN1
bHQucmVncygpOworICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKTsKKworICAgICAgICAgICAgYm9vbCBoYXZlU3RvcmFnZSA9ICEhc3RvcmFnZUVk
Z2U7CisgICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RvcmFnZVRlbXBvcmFyeTsKKyAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlR1BSOworICAgICAgICAgICAgaWYgKCFoYXZlU3RvcmFnZSkgewor
ICAgICAgICAgICAgICAgIHN0b3JhZ2VUZW1wb3JhcnkgPSBHUFJUZW1wb3JhcnkodGhpcywgUmV1
c2UsIGVudW1lcmF0b3IpOworICAgICAgICAgICAgICAgIHN0b3JhZ2VHUFIgPSBzdG9yYWdlVGVt
cG9yYXJ5LmdwcigpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgc3RvcmFn
ZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBub3RGYXN0TmFtZWRDYXNlczsKKworICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBnZW5lcmF0ZSB0aGlzIGNvZGUgaWYgd2Uga25vdyBiYXNlIGlzIG5vdCBhbiBvYmplY3Qu
CisgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBtb2RlR1BSLCBUcnVzdGVkSW1tMzIoSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
R2VuZXJpY01vZGUpKSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFtX3N0
YXRlLmZvck5vZGUoYmFzZUVkZ2UpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAgICAgICAgICAg
ICAgIG5vdEZhc3ROYW1lZENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZUNl
bGxHUFIpKTsKKworICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogSWYgd2Uga25vdyB0aGVyZSdzIG9ubHkgb25lIHN0cnVjdHVy
ZSBmb3IgYmFzZSB3ZSBjYW4ganVzdCBlbWJlZCBpdCBoZXJlLgorICAgICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlQ2VsbEdQUiwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgc2NyYXRjaEdQUik7CisKKyAgICAgICAgICAgICAgICBhdXRv
IGJhZFN0cnVjdHVyZSA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hHUFIsCisg
ICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAg
ICAgICAgICAgICAgZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogTWF5
YmUgd2Ugc2hvdWxkIGhhdmUgYSBiZXR0ZXIgd2F5IHRvIHJlcHJlc2VudCBJbmRleGVkK05hbWVk
PworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLm5vZGUo
KSA9PSBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDMpLm5vZGUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYmFkU3RydWN0dXJlU2xvd1BhdGggPSBiYWRTdHJ1Y3R1cmU7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBub3RGYXN0TmFtZWRDYXNlcy5hcHBlbmQoYmFk
U3RydWN0dXJlKTsKKworICAgICAgICAgICAgICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAg
ICAgICAgICAgICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNh
Y2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLAorICAgICAgICAgICAgICAgICAgICBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisKKyAgICAg
ICAgICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChiYXNl
Q2VsbEdQUiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZXN1bHRSZWdzKTsKKworICAgICAgICAgICAgICAg
IGRvbmVDYXNlcy5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE90
aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCisgICAgICAgICAgICAgICAgb3V0T2ZMaW5lQWNjZXNz
LmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGluZGV4R1BSLCBzY3Jh
dGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5u
ZWczMihzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zaWduRXh0ZW5kMzJUb1B0
cihzY3JhdGNoR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhdmVTdG9y
YWdlKQorICAgICAgICAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VDZWxsR1BSLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzdG9yYWdl
R1BSKTsKKyAgICAgICAgICAgICAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWRW
YWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VHUFIsIHNjcmF0Y2hHUFIsIE1h
Y3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBkb25lQ2FzZXMuYXBwZW5kKG1faml0Lmp1bXAoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5vdEZhc3ROYW1lZENhc2VzLmxpbmsoJm1faml0
KTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBEYXRhRm9y
bWF0SlMpOworICAgICAgICB9KSk7CisKKyAgICAgICAgLy8gV2UgcmVseSBvbiBjb21waWxlR2V0
QnlWYWwgdG8gY2FsbCBqc1ZhbHVlUmVzdWx0IGZvciB1cy4KKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgaXMga2luZGEgaGFja3kuLi4KKyAgICAgICAgQVNTRVJUKGdlbmVyYXRpb25JbmZvKG5vZGUp
LmpzVmFsdWVSZWdzKCkgPT0gcmVzdWx0UmVncyAmJiBnZW5lcmF0aW9uSW5mbyhub2RlKS5yZWdp
c3RlckZvcm1hdCgpID09IERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgaWYgKGJhZFN0cnVjdHVy
ZVNsb3dQYXRoLmlzU2V0KCkpCisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aENhbGwoYmFkU3RydWN0dXJlU2xvd1BhdGgsIHRoaXMsIG9wZXJhdGlvbkVudW1lcmF0b3JS
ZWNvdmVyTmFtZUFuZEdldEJ5VmFsLCByZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYmFzZUNlbGxHUFIsIGluZGV4R1BSLCBlbnVtZXJhdG9yR1BSKSk7CisKKyAgICAgICAg
ZG9uZUNhc2VzLmxpbmsoJm1faml0KTsKKyAgICB9OworCisgICAgaWYgKGlzQ2VsbChiYXNlRWRn
ZS51c2VLaW5kKCkpKSB7CisgICAgICAgIC8vIFVzZSBtYW51YWwgb3BlcmFuZCBzcGVjdWxhdGlv
biBzaW5jZSBGaXh1cCBtYXkgaGF2ZSBwaWNrZWQgYSBVc2VLaW5kIG1vcmUgcmVzdHJpY3RpdmUg
dGhhbiBDZWxsVXNlLgorICAgICAgICBzcGVjdWxhdGUobm9kZSwgYmFzZUVkZ2UpOworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlT3BlcmFuZCh0aGlzLCBiYXNlRWRnZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2VPcGVyYW5kKHRoaXMs
IGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZU9wZXJhbmQuZ3ByKCkpOworICAgIH0K
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgU2xvd1BhdGhGdW5jdGlvblR5cGU+Cit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KE5vZGUqIG5vZGUsIFNsb3dQ
YXRoRnVuY3Rpb25UeXBlIHNsb3dQYXRoRnVuY3Rpb24pCit7CisgICAgRWRnZSBiYXNlRWRnZSA9
IG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCk7CisgICAgYXV0byBnZW5lcmF0ZSA9IFsmXSAo
YXV0byBiYXNlLCBHUFJSZWcgYmFzZUNlbGxHUFIpIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQg
cHJvcGVydHlOYW1lKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAyKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBtb2Rl
KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMykpOworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBlbnVtZXJhdG9yKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgNCkp
OworCisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5TmFtZVJlZ3MgPSBwcm9wZXJ0eU5hbWUu
cmVncygpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIG1vZGVHUFIgPSBtb2RlLmdwcigpOworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQ
UiA9IGVudW1lcmF0b3IuZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3Mo
KTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgb3BlcmF0aW9uQ2FzZXM7CisK
KyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShiYXNlRWRnZSkubV90eXBlICYgflNwZWNDZWxs
KQorICAgICAgICAgICAgb3BlcmF0aW9uQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2Vs
bChiYXNlKSk7CisKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBnZW5lcmF0ZSB0aGlz
IGNvZGUgaWYgd2Uga25vdyBiYXNlIGlzIG5vdCBhIGNlbGwuCisgICAgICAgIG9wZXJhdGlvbkNh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIG1vZGVH
UFIsIFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VDZWxsR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBheWxv
YWRHUFIoKSk7CisgICAgICAgIG9wZXJhdGlvbkNhc2VzLmFwcGVuZChtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFJlZ3MucGF5bG9hZEdQUigpLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbW92ZVRydWVUbyhyZXN1
bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgb3BlcmF0aW9uQ2FzZXMubGluaygmbV9qaXQpOwor
CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlc3VsdFJlZ3Mu
dGFnR1BSKCkpOworICAgICAgICBhdXRvIGJhc2VSZWdzID0gSlNWYWx1ZVJlZ3MoYmFzZUNlbGxH
UFIsIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworI2Vsc2UKKyAgICAgICAgYXV0byBiYXNlUmVncyA9
IGJhc2U7CisjZW5kaWYKKyAgICAgICAgY2FsbE9wZXJhdGlvbihzbG93UGF0aEZ1bmN0aW9uLCBy
ZXN1bHRSZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZ3MsIHByb3BlcnR5
TmFtZVJlZ3MsIGluZGV4R1BSLCBtb2RlR1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKworICAgICAgICBibGVzc2VkQm9v
bGVhblJlc3VsdChyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgbm9kZSk7CisgICAgfTsKKworICAg
IGlmIChpc0NlbGwoYmFzZUVkZ2UudXNlS2luZCgpKSkgeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBiYXNlKHRoaXMsIGJhc2VFZGdlKTsKKyAgICAgICAgZ2VuZXJhdGUoYmFzZS5ncHIo
KSwgYmFzZS5ncHIoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFz
ZSh0aGlzLCBiYXNlRWRnZSk7CisgICAgICAgIGdlbmVyYXRlKGJhc2UucmVncygpLCBiYXNlLnJl
Z3MoKS5wYXlsb2FkR1BSKCkpOworICAgIH0KK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUVudW1lcmF0b3JJbkJ5VmFsKE5vZGUqIG5vZGUpCit7CisgICAgY29tcGlsZUVudW1lcmF0
b3JIYXNQcm9wZXJ0eShub2RlLCBvcGVyYXRpb25FbnVtZXJhdG9ySW5CeVZhbCk7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoTm9kZSog
bm9kZSkKK3sKKyAgICBjb21waWxlRW51bWVyYXRvckhhc1Byb3BlcnR5KG5vZGUsIG9wZXJhdGlv
bkVudW1lcmF0b3JIYXNPd25Qcm9wZXJ0eSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeUlkRmx1c2goTm9kZSogbm9kZSkKQEAgLTEzNjIyLDY3ICsxMzk0Miw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVNYXRjaFN0cnVjdHVyZShOb2RlKiBub2RlKQogICAg
IGJsZXNzZWRCb29sZWFuUmVzdWx0KHRlbXBHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KE5vZGUqIG5vZGUp
Ci17Ci0gICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvcGVydHkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwotICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGVudW1lcmF0b3IodGhpcywgbm9kZS0+Y2hpbGQzKCkpOwot
ICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgIEpTVmFsdWVSZWdz
IGJhc2VSZWdzID0gYmFzZS5qc1ZhbHVlUmVncygpOwotICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9
IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVn
cygpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCB3cm9uZ1N0cnVjdHVyZTsKLQotICAg
IHdyb25nU3RydWN0dXJlLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoYmFzZVJlZ3MpKTsK
LQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVncy5wYXls
b2FkR1BSKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKLSAgICB3cm9uZ1N0cnVjdHVyZS5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLAotICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZW51bWVyYXRvci5ncHIoKSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgbW92
ZVRydWVUbyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Ci0KLSAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcihzbG93UGF0aENhbGwod3JvbmdTdHJ1Y3R1cmUsIHRoaXMsIG9wZXJhdGlvbkhhc0VudW1l
cmFibGVQcm9wZXJ0eSwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VSZWdzLCBwcm9wZXJ0eUdQUikpOwotICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdFJl
Z3MucGF5bG9hZEdQUigpLCBub2RlKTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0aW9u
Pgotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUhhc093blN0cnVjdHVyZVByb3BlcnR5SW1w
bChOb2RlKiBub2RlLCBGdW5jdGlvbiBzbG93UGF0aCkKLXsKLSAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBwcm9wZXJ0eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgZW51bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDMoKSk7Ci0gICAgSlNWYWx1ZVJlZ3NUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotCi0gICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwot
ICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCB3cm9uZ1N0cnVjdHVyZTsKLQotICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSk7Ci0gICAgd3JvbmdTdHJ1Y3R1cmUuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKLSAgICAgICAgcmVzdWx0UmVncy5wYXlsb2FkR1BSKCks
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3IuZ3ByKCksIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKLQotICAg
IG1vdmVUcnVlVG8ocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkpOwotCi0gICAgYWRkU2xvd1BhdGhH
ZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHdyb25nU3RydWN0dXJlLCB0aGlzLCBzbG93UGF0aCwgcmVz
dWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BS
KSk7Ci0gICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCksIG5v
ZGUpOwotfQotCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzT3duU3RydWN0dXJlUHJv
cGVydHkoTm9kZSogbm9kZSkKLXsKLSAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJ
bXBsKG5vZGUsIG9wZXJhdGlvbkhhc093blN0cnVjdHVyZVByb3BlcnR5KTsKLX0KLQotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluU3RydWN0dXJlUHJvcGVydHkoTm9kZSogbm9kZSkKLXsK
LSAgICBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHlJbXBsKG5vZGUsIG9wZXJhdGlvbklu
U3RydWN0dXJlUHJvcGVydHkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CkBAIC0xMzcwOSwzOSArMTM5NjgsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKE5vZGUqIG5vZGUpCiAg
ICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0RW51bWVyYXRvclBuYW1lKE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lIHx8IG5vZGUtPm9wKCkgPT0g
R2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSk7Ci0gICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZW51
bWVyYXRvcih0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgU3BlY3VsYXRlU3RyaWN0SW50MzJP
cGVyYW5kIGluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICBHUFJUZW1wb3Jhcnkgc2Ny
YXRjaCh0aGlzKTsKLSAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KLSAg
ICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IGVudW1lcmF0b3IuZ3ByKCk7Ci0gICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwotCi0gICAg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAgaW5Cb3VuZHMgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3csIGluZGV4R1BSLAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhl
bnVtZXJhdG9yR1BSLCAobm9kZS0+b3AoKSA9PSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUp
Ci0gICAgICAgICAgICA/IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJv
cGVydHlJbmRleE9mZnNldCgpCi0gICAgICAgICAgICA6IEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbV9qaXQubW92ZVZh
bHVlKGpzTnVsbCgpLCByZXN1bHRSZWdzKTsKLQotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRv
bmUgPSBtX2ppdC5qdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluaygmbV9qaXQpOwotCi0gICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHNj
cmF0Y2hHUFIpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChz
Y3JhdGNoR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyKSwgcmVzdWx0UmVn
cy5wYXlsb2FkR1BSKCkpOwotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZXN1bHRSZWdz
LnRhZ0dQUigpKTsKLSNlbmRpZgotCi0gICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEV4ZWN1dGFibGUoTm9kZSogbm9kZSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xNDkzNCwyOCArMTUxNjAsMjgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlTmV3QXJyYXlXaXRoU2l6ZShK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWMKICAgICAgICAgc2l6ZUdQUiwgc3RvcmFnZUdQUikp
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5v
ZGUqIG5vZGUsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlvbikKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSogbm9kZSwgU19KSVRP
cGVyYXRpb25fR0NaIHNsb3dQYXRoT3BlcmF0aW9uLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0
dXBsZTxHUFJSZWcsIEdQUlJlZz4oKT4mIHByZWZpeCkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpOwotICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCiAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwot
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIGluZGV4R1BS
ID0gSW52YWxpZEdQUlJlZzsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gSW52YWxpZEdQUlJlZzsK
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CiAgICAgQXJyYXlNb2Rl
IG1vZGUgPSBub2RlLT5hcnJheU1vZGUoKTsKICAgICBzd2l0Y2ggKG1vZGUudHlwZSgpKSB7CiAg
ICAgY2FzZSBBcnJheTo6SW50MzI6CiAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAg
ICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgU3Rv
cmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsK
KyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdl
Q2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAg
ICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
R1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNo
LmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1bHRHUFIpID0gcHJlZml4
KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CiAKICAgICAgICAgaWYgKG1vZGUuaXNJbkJvdW5kcygpKQpAQCAtMTQ5ODMsMTIgKzE1
MjA5LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
Tm9kZSogbm9kZSwgU19KSVRPcGVyYXRpb25fR0NaIHNsCiAgICAgICAgIGJyZWFrOwogICAgIH0K
ICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAyKSk7Ci0gICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7CisgICAgICAgIEFTU0VSVCghIW1fZ3JhcGgu
dmFyQXJnQ2hpbGQobm9kZSwgbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOworICAgICAgICBT
dG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgbm9k
ZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0
aGlzKTsKICAgICAgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBzY3JhdGNoLmZwcigpOwogICAgICAg
ICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAKKyAgICAgICAgc3RkOjp0aWUo
aW5kZXhHUFIsIHJlc3VsdEdQUikgPSBwcmVmaXgoKTsKKwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBvdXRPZkJvdW5kcyA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKIAogICAgICAgICBpZiAobW9kZS5p
c0luQm91bmRzKCkpCkBAIC0xNTAxMiwxMyArMTUyNDAsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlvbl9H
Q1ogc2wKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFn
ZTogewotICAgICAgICBBU1NFUlQoISFtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAg
ICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDIpKTsKKyAgICAgICAgQVNTRVJUKCEhbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2Rl
LT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CisgICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCBub2RlLT5zdG9yYWdlQ2hpbGRJbmRleCgp
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogCiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSBzY3JhdGNoLmdwcigpOwogCisgICAgICAgIHN0ZDo6dGllKGluZGV4R1BSLCByZXN1bHRHUFIp
ID0gcHJlZml4KCk7CisKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgb3V0T2ZCb3VuZHMg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICBpZiAobW9kZS5pc0luQm91bmRzKCkpCiAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRy
LCBvdXRPZkJvdW5kcyk7CkBAIC0xNTA0Nyw3MyArMTUyNzcsMTMgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShOb2RlKiBub2RlLCBTX0pJVE9wZXJhdGlv
bl9HQ1ogc2wKICAgICBkZWZhdWx0OiB7CiAgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSBUeXBl
ZEFycmF5cyBpbiBIYXNJbmRleGVkUHJvcGVydHkgSUMKICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMTE4MworICAgICAgICBzdGQ6OnRpZShpbmRl
eEdQUiwgcmVzdWx0R1BSKSA9IHByZWZpeCgpOwogICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9CiAKICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBzbG93UGF0aE9wZXJh
dGlvbiwgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZUdQUiwgaW5k
ZXhHUFIpKTsKLQotICAgIHVuYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
LX0KLQotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldERpcmVjdFBuYW1lKE5vZGUqIG5v
ZGUpCi17Ci0gICAgRWRnZSYgYmFzZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5v
ZGUsIDApOwotICAgIEVkZ2UmIHByb3BlcnR5RWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgMSk7Ci0gICAgRWRnZSYgaW5kZXhFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCAyKTsKLQotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgYmFz
ZUVkZ2UpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3BlcnR5KHRoaXMsIHByb3BlcnR5
RWRnZSk7Ci0gICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgIEdQUlJlZyBwcm9w
ZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotCi0gICAgRWRnZSYgZW51bWVyYXRvckVkZ2UgPSBt
X2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIDMpOwotICAgIFNwZWN1bGF0ZVN0cmljdElu
dDMyT3BlcmFuZCBpbmRleCh0aGlzLCBpbmRleEVkZ2UpOwotICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGVudW1lcmF0b3IodGhpcywgZW51bWVyYXRvckVkZ2UpOwotICAgIEdQUlRlbXBvcmFyeSBz
Y3JhdGNoKHRoaXMpOwotICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLQot
ICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOwotICAgIEdQUlJlZyBlbnVtZXJhdG9y
R1BSID0gZW51bWVyYXRvci5ncHIoKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2gu
Z3ByKCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7Ci0KLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7Ci0KLSAgICAvLyBDaGVjayB0aGUg
c3RydWN0dXJlCi0gICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgIHNsb3dQ
YXRoLmFwcGVuZCgKLSAgICAgICAgbV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBzY3JhdGNoR1BSLAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoCi0gICAgICAgICAgICAgICAgZW51bWVyYXRvckdQUiwg
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwot
Ci0gICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFu
IHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5s
aW5lIGFjY2VzcwotICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG91dE9mTGluZUFjY2VzcyA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsCi0gICAgICAgIGluZGV4
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLQotICAgIG1faml0
LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJhc2VHUFIsIGluZGV4R1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFn
ZSgpKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRP
ZkxpbmVBY2Nlc3MubGluaygmbV9qaXQpOwotICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCkpOwotICAgIG1faml0Lm1vdmUoaW5kZXhHUFIsIHNjcmF0Y2hHUFIp
OwotICAgIG1faml0LnN1YjMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGVudW1lcmF0b3JHUFIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHNjcmF0Y2hHUFIpOwotICAgIG1faml0Lm5lZzMyKHNjcmF0Y2hHUFIpOwotICAgIG1faml0LnNp
Z25FeHRlbmQzMlRvUHRyKHNjcmF0Y2hHUFIsIHNjcmF0Y2hHUFIpOwotICAgIGludDMyX3Qgb2Zm
c2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJm
bHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAg
bV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0UmVncy5wYXls
b2FkR1BSKCksIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBvZmZzZXRP
ZkZpcnN0UHJvcGVydHkpLCByZXN1bHRSZWdzKTsKLQotICAgIGRvbmUubGluaygmbV9qaXQpOwot
Ci0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dQYXRoLCB0aGlzLCBv
cGVyYXRpb25HZXRCeVZhbENlbGwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBiYXNlR1BSLCBDQ2FsbEhlbHBlcnM6OkNlbGxWYWx1ZShwcm9wZXJ0eUdQUikpKTsKLQot
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2NhbChOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDk4Yzc2MTZiOGZkMmZi
ZjVjNGRkOGE1NzcxNTA4YWQyNjc5Zjk5ZDEuLmQxMjBiN2I0ZmI4NDQzNjlkNzJjZDYwMTgxYmMw
OGMwYjZjOTE3YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogY2xhc3MgR1BSVGVtcG9yYXJ5OworY2xhc3MgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk7CiBj
bGFzcyBKU1ZhbHVlT3BlcmFuZDsKIGNsYXNzIFNsb3dQYXRoR2VuZXJhdG9yOwogY2xhc3MgU3Bl
Y3VsYXRpdmVKSVQ7CkBAIC0yNDYsNiArMjQ3LDggQEAgcHVibGljOgogICAgIH0KICAgICBHUFJS
ZWcgYWxsb2NhdGUoR1BSUmVnIHNwZWNpZmljKQogICAgIHsKKyAgICAgICAgaWYgKHNwZWNpZmlj
ID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBhbGxvY2F0ZSgpOwogI2lmIEVOQUJMRShE
RkdfUkVHSVNURVJfQUxMT0NBVElPTl9WQUxJREFUSU9OKQogICAgICAgICBtX2ppdC5hZGRSZWdp
c3RlckFsbG9jYXRpb25BdE9mZnNldChtX2ppdC5kZWJ1Z09mZnNldCgpKTsKICNlbmRpZgpAQCAt
MTM0NSwxMiArMTM0OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0ZW1wb3JhcnlSZWdp
c3RlckZvclB1dEJ5VmFsKHRlbXBvcmFyeSwgbm9kZS0+YXJyYXlNb2RlKCkpOwogICAgIH0KICAg
ICAKKyAgICAvLyBXZSB1c2UgYSBzY29wZWRMYW1iZGEgdG8gcGxhY2F0ZSByZWdpc3RlciBhbGxv
Y2F0aW9uIHZhbGlkYXRpb24uCisgICAgdm9pZCBjb21waWxlR2V0QnlWYWwoTm9kZSosIGNvbnN0
IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFsdWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9y
bWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgpOworCiAgICAgdm9pZCBjb21waWxlR2V0Q2hh
ckNvZGVBdChOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKik7
CisgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPblN0cmluZyhOb2RlKiwgY29uc3QgU2NvcGVkTGFt
YmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVy
cmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlRnJvbUNoYXJDb2RlKE5vZGUq
KTsgCiAKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqKTsK
LSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVHZXRCeVZhbE9uRGlyZWN0QXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRM
YW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVm
ZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVk
QXJndW1lbnRzKE5vZGUqLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVn
cywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKIAog
ICAgIHZvaWQgY29tcGlsZUdldFByaXZhdGVOYW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVH
ZXRQcml2YXRlTmFtZUJ5SWQoTm9kZSopOwpAQCAtMTQyNCwxMiArMTQzMCwxMiBAQCBwdWJsaWM6
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAganVtcEZvclR5cGVkQXJyYXlJc0RldGFjaGVkSWZPdXRP
ZkJvdW5kcyhOb2RlKiwgR1BSUmVnIGJhc2VHUFIsIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91
bmRzKTsKICAgICB2b2lkIGVtaXRUeXBlZEFycmF5Qm91bmRzQ2hlY2soTm9kZSosIEdQUlJlZyBi
YXNlR1BSLCBHUFJSZWcgaW5kZXhHUFIpOwogICAgIHZvaWQgY29tcGlsZUdldFR5cGVkQXJyYXlC
eXRlT2Zmc2V0KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJh
eShOb2RlKiwgVHlwZWRBcnJheVR5cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25JbnRU
eXBlZEFycmF5KE5vZGUqLCBUeXBlZEFycmF5VHlwZSwgY29uc3QgU2NvcGVkTGFtYmRhPHN0ZDo6
dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0
KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KEdQ
UlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFycmF5VHlwZSk7Ci0gICAg
dm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2RlKiwgVHlwZWRBcnJheVR5
cGUpOworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkoTm9kZSosIFR5
cGVkQXJyYXlUeXBlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywg
RGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KTsKICAgICB2
b2lkIGNvbXBpbGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheShHUFJSZWcgYmFzZSwgR1BSUmVn
IHByb3BlcnR5LCBOb2RlKiwgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgY29tcGlsZUdldEJ5
VmFsRm9yT2JqZWN0V2l0aFN0cmluZyhOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0QnlWYWxG
b3JPYmplY3RXaXRoU3ltYm9sKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVHZXRCeVZhbEZvck9i
amVjdFdpdGhTdHJpbmcoTm9kZSosIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEpTVmFs
dWVSZWdzLCBEYXRhRm9ybWF0PihEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCk+JiBwcmVmaXgp
OworICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChOb2RlKiwgY29u
c3QgU2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFG
b3JtYXQgcHJlZmVycmVkRm9ybWF0KT4mIHByZWZpeCk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlW
YWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVk
Z2UmIGNoaWxkMyk7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChO
b2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgdm9p
ZCBjb21waWxlR2V0QnlWYWxXaXRoVGhpcyhOb2RlKik7CkBAIC0xNDU4LDcgKzE0NjQsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICAgICAgRWRnZSB2YWx1ZVVzZSk7CiAgICAgdm9pZCBsb2FkRnJv
bUludFR5cGVkQXJyYXkoR1BSUmVnIHN0b3JhZ2VSZWcsIEdQUlJlZyBwcm9wZXJ0eVJlZywgR1BS
UmVnIHJlc3VsdFJlZywgVHlwZWRBcnJheVR5cGUpOwotICAgIHZvaWQgc2V0SW50VHlwZWRBcnJh
eUxvYWRSZXN1bHQoTm9kZSosIEdQUlJlZyByZXN1bHRSZWcsIFR5cGVkQXJyYXlUeXBlLCBib29s
IGNhblNwZWN1bGF0ZSk7CisgICAgdm9pZCBzZXRJbnRUeXBlZEFycmF5TG9hZFJlc3VsdChOb2Rl
KiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgVHlwZWRBcnJheVR5cGUsIGJvb2wgY2FuU3BlY3Vs
YXRlLCBib29sIHNob3VsZEJveCk7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENsYXNzVHlwZT4g
dm9pZCBjb21waWxlTmV3RnVuY3Rpb25Db21tb24oR1BSUmVnLCBSZWdpc3RlcmVkU3RydWN0dXJl
LCBHUFJSZWcsIEdQUlJlZywgR1BSUmVnLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmLCBzaXpl
X3QsIEZ1bmN0aW9uRXhlY3V0YWJsZSopOwogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uKE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTZXRGdW5jdGlvbk5hbWUoTm9kZSopOwpAQCAtMTUyNCwy
MSArMTUzMCwyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlVG9Mb3dlckNhc2UoTm9kZSop
OwogICAgIHZvaWQgY29tcGlsZVRocm93KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVUaHJvd1N0
YXRpY0Vycm9yKE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVHZXRFbnVtZXJhYmxlTGVuZ3RoKE5v
ZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkoTm9k
ZSopOwotICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eShOb2RlKik7Ci0gICAg
dm9pZCBjb21waWxlVG9JbmRleFN0cmluZyhOb2RlKik7CisKKyAgICB2b2lkIGNvbXBpbGVFbnVt
ZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51
bWVyYXRvck5leHRFeHRyYWN0TW9kZShOb2RlKik7CisgICAgdm9pZCBjb21waWxlRW51bWVyYXRv
ck5leHRFeHRyYWN0SW5kZXgoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0
VXBkYXRlUHJvcGVydHlOYW1lKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yR2V0
QnlWYWwoTm9kZSopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25UeXBl
PgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShOb2RlKiwgU2xvd1BhdGhG
dW5jdGlvblR5cGUpOworICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKE5vZGUqKTsK
KyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkoTm9kZSopOworCiAgICAg
dm9pZCBjb21waWxlUHV0QnlJZEZsdXNoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlk
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVQdXRCeUlkRGlyZWN0KE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVQdXRCeUlkV2l0aFRoaXMoTm9kZSopOwotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdGlvbj4KLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoTm9k
ZSosIEZ1bmN0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShO
b2RlKik7Ci0gICAgdm9pZCBjb21waWxlSW5TdHJ1Y3R1cmVQcm9wZXJ0eShOb2RlKik7Ci0gICAg
dm9pZCBjb21waWxlR2V0RGlyZWN0UG5hbWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldFBy
b3BlcnR5RW51bWVyYXRvcihOb2RlKik7Ci0gICAgdm9pZCBjb21waWxlR2V0RW51bWVyYXRvclBu
YW1lKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRFeGVjdXRhYmxlKE5vZGUqKTsKICAgICB2
b2lkIGNvbXBpbGVHZXRHZXR0ZXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldFNldHRlcihO
b2RlKik7CkBAIC0xNTY4LDcgKzE1NzUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlQ2Fs
bE51bWJlckNvbnN0cnVjdG9yKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVMb2dTaGFkb3dDaGlj
a2VuUHJvbG9ndWUoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUxvZ1NoYWRvd0NoaWNrZW5UYWls
KE5vZGUqKTsKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoTm9kZSosIFNfSklU
T3BlcmF0aW9uX0dDWik7CisgICAgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KE5vZGUq
LCBTX0pJVE9wZXJhdGlvbl9HQ1osIGNvbnN0IFNjb3BlZExhbWJkYTxzdGQ6OnR1cGxlPEdQUlJl
ZywgR1BSUmVnPigpPiYgcHJlZml4KTsKICAgICB2b2lkIGNvbXBpbGVFeHRyYWN0Q2F0Y2hMb2Nh
bChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ2xlYXJDYXRjaExvY2FscyhOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlUHJvZmlsZVR5cGUoTm9kZSopOwpAQCAtMTkyNiw2ICsxOTMzLDggQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKICAgICB9CiAKKyAgICBKU1ZhbHVl
UmVncyByZWdzKCkgeyByZXR1cm4ganNWYWx1ZVJlZ3MoKTsgfQorCiAjaWYgVVNFKEpTVkFMVUU2
NCkKICAgICBHUFJSZWcgZ3ByKCkKICAgICB7CkBAIC0xOTY1LDcgKzE5NzQsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlUmVncyh0YWdHUFIoKSwgcGF5bG9hZEdQUigpKTsKICAg
ICB9CiAKLSAgICBHUFJSZWcgZ3ByKFdoaWNoVmFsdWVXb3JkIHdoaWNoKQorICAgIEdQUlJlZyBn
cHIoV2hpY2hWYWx1ZVdvcmQgd2hpY2ggPSBQYXlsb2FkV29yZCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBqc1ZhbHVlUmVncygpLmdwcih3aGljaCk7CiAgICAgfQpAQCAtMjAwMywyMSArMjAxMiwy
MCBAQCBwcml2YXRlOgogY2xhc3MgU3RvcmFnZU9wZXJhbmQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgorICAgIFN0b3JhZ2VPcGVyYW5kKCkgPSBkZWZhdWx0OworCiAg
ICAgZXhwbGljaXQgU3RvcmFnZU9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdl
KQogICAgICAgICA6IG1faml0KGppdCkKICAgICAgICAgLCBtX2VkZ2UoZWRnZSkKICAgICAgICAg
LCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
aml0KTsKLSAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRn
ZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bm9kZSgpKSkKLSAgICAgICAgICAgIGdwcigpOworICAgICAgICBlbXBsYWNlKGppdCwgZWRnZSk7
CiAgICAgfQogICAgIAogICAgIH5TdG9yYWdlT3BlcmFuZCgpCiAgICAgewotICAgICAgICBBU1NF
UlQobV9ncHJPckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7Ci0gICAgICAgIG1faml0LT51bmxv
Y2sobV9ncHJPckludmFsaWQpOworICAgICAgICBpZiAobV9ncHJPckludmFsaWQgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOwogICAg
IH0KICAgICAKICAgICBFZGdlIGVkZ2UoKSBjb25zdApAQCAtMjAzNiw2ICsyMDQ0LDE3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxTdG9yYWdlKGVk
Z2UoKSk7CiAgICAgICAgIHJldHVybiBtX2dwck9ySW52YWxpZDsKICAgICB9CisKKyAgICB2b2lk
IGVtcGxhY2UoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAg
bV9qaXQgPSBqaXQ7CisgICAgICAgIG1fZWRnZSA9IGVkZ2U7CisgICAgICAgIEFTU0VSVChtX2dw
ck9ySW52YWxpZCA9PSBJbnZhbGlkR1BSUmVnKTsKKyAgICAgICAgQVNTRVJUKG1faml0KTsKKyAg
ICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5k
KCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkK
KyAgICAgICAgICAgIGdwcigpOworICAgIH0KICAgICAKICAgICB2b2lkIHVzZSgpCiAgICAgewpA
QCAtMjA0Myw5ICsyMDYyLDkgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6Ci0gICAg
U3BlY3VsYXRpdmVKSVQqIG1faml0OworICAgIFNwZWN1bGF0aXZlSklUKiBtX2ppdCB7IG51bGxw
dHIgfTsKICAgICBFZGdlIG1fZWRnZTsKLSAgICBHUFJSZWcgbV9ncHJPckludmFsaWQ7CisgICAg
R1BSUmVnIG1fZ3ByT3JJbnZhbGlkIHsgSW52YWxpZEdQUlJlZyB9OwogfTsKIAogCkBAIC0yMTM0
LDExICsyMTUzLDE5IEBAIGNsYXNzIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHsKIHB1YmxpYzoKICAg
ICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNwZWN1
bGF0aXZlSklUKik7CisgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBH
UFJSZWcgc3BlY2lmaWNQYXlsb2FkKTsKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorICAgIEpTVmFs
dWVSZWdzVGVtcG9yYXJ5KFNwZWN1bGF0aXZlSklUKiwgR1BSUmVnIHNwZWNpZmljUGF5bG9hZCwg
R1BSUmVnIHNwZWNpZmljVGFnKTsKKyNlbmRpZgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAg
ICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBSZXVzZVRhZywgVCYgb3Bl
cmFuZCwgV2hpY2hWYWx1ZVdvcmQgcmVzdWx0UmVnV29yZCA9IFBheWxvYWRXb3JkKTsKICAgICBK
U1ZhbHVlUmVnc1RlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFJldXNlVGFnLCBKU1ZhbHVlT3Bl
cmFuZCYpOwogICAgIH5KU1ZhbHVlUmVnc1RlbXBvcmFyeSgpOwogICAgIAorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiAhIXJlZ3MoKTsgfQorCisgICAgSlNWYWx1ZVJlZ3NU
ZW1wb3JhcnkmIG9wZXJhdG9yPShKU1ZhbHVlUmVnc1RlbXBvcmFyeSYmKSA9IGRlZmF1bHQ7CisK
ICAgICBKU1ZhbHVlUmVncyByZWdzKCk7CiAKIHByaXZhdGU6CkBAIC0yMTUwLDYgKzIxNzcsMjYg
QEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorSlNWYWx1ZVJlZ3NUZW1wb3Jhcnk6OkpTVmFsdWVSZWdzVGVtcG9yYXJ5KFNw
ZWN1bGF0aXZlSklUKiBqaXQsIFJldXNlVGFnLCBUJiBvcGVyYW5kLCBXaGljaFZhbHVlV29yZCkK
KyAgICA6IG1fZ3ByKGppdCwgUmV1c2UsIG9wZXJhbmQpCit7Cit9CisjZWxzZQordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK0pTVmFsdWVSZWdzVGVtcG9yYXJ5OjpKU1ZhbHVlUmVnc1RlbXBvcmFyeShT
cGVjdWxhdGl2ZUpJVCogaml0LCBSZXVzZVRhZywgVCYgb3BlcmFuZCwgV2hpY2hWYWx1ZVdvcmQg
cmVzdWx0V29yZCkKK3sKKyAgICBpZiAocmVzdWx0V29yZCA9PSBQYXlsb2FkV29yZCkgeworICAg
ICAgICBtX3BheWxvYWRHUFIgPSBHUFJUZW1wb3Jhcnkoaml0LCBSZXVzZSwgb3BlcmFuZCk7Cisg
ICAgICAgIG1fdGFnR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgbV9wYXlsb2FkR1BSID0gR1BSVGVtcG9yYXJ5KGppdCk7CisgICAgICAgIG1fdGFnR1BSID0g
R1BSVGVtcG9yYXJ5KGppdCwgUmV1c2UsIG9wZXJhbmQpOworICAgIH0KK30KKyNlbmRpZgorCiBj
bGFzcyBGUFJUZW1wb3JhcnkgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQz
Ml82NC5jcHAKaW5kZXggOWQ0MDM2OTYxMGQ4OWU0MWU1MTZmNmM0YTQyNWU1ZmQ3MTAyYTFiZS4u
YWJjOGQxOGFhMzk3NjRhMmY5YzBjMDc0MWNmZDFlOWE1OGRkYzQyNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0x
ODEyLDYgKzE4MTIsMzM1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDb250aWd1b3Vz
UHV0QnlWYWwoTm9kZSogbm9kZSwgQmFzZU9wZXJhbmRUeXBlJiBiYXNlCiAgICAgbm9SZXN1bHQo
bm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsgICAgCiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChOb2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8
c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRG
b3JtYXQpPiYgcHJlZml4KQoreworICAgIHN3aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgp
KSB7CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKKyAgICBjYXNlIEFy
cmF5OjpGb3JjZUV4aXQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisj
aWYgQ09NUElMRVJfUVVJUksoQ09OU0lERVJTX1VOUkVBQ0hBQkxFX0NPREUpCisgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwgSlNWYWx1ZVJl
Z3MoKSwgMCk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcnJheTo6VW5kZWNp
ZGVkOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAg
ICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZvcm1hdEpT
KTsKKworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygp
LCBub2RlLAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworCisgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRl
ZmluZWRUYWcpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgbV9qaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApLCByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7Cisg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAgIGlmIChtX2dyYXBoLm1f
c2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAobV9ncmFwaC52
YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN0cmlu
Z1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmplY3RXaXRo
U3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKKyAgICAgICAgICAgICAgICAgICAgY29t
cGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2RlLCBwcmVmaXgpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSk7IC8vIFNhdmUgYSByZWdpc3Rlciwgc3BlY3VsYXRlIGNlbGwuIFdlJ2xs
IHByb2JhYmx5IGJlIHJpZ2h0LgorICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyBwcm9wZXJ0eVJl
Z3MgPSBwcm9wZXJ0eS5qc1ZhbHVlUmVncygpOworCisgICAgICAgICAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUp
ID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsQ2VsbCwgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5UmVncyk7
CisgICAgICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBzcGVjdWxhdGUobm9kZSwgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEp
KTsKKworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgYmFzZVJlZ3MgPSBi
YXNlLmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHBy
b3BlcnR5LmpzVmFsdWVSZWdzKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsK
KyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFG
b3JtYXRKUyk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2lu
LnNlbWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3Jk
Q2FsbFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVP
cmlnaW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOworCisg
ICAgICAgIEpJVEdldEJ5VmFsR2VuZXJhdG9yIGdlbigKKyAgICAgICAgICAgIG1faml0LmNvZGVC
bG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nlc3NUeXBl
OjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKKyAgICAgICAgICAgIGJhc2VSZWdzLCBwcm9wZXJ0
eVJlZ3MsIHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOworCisgICAgICAgIGlmIChtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcp
KQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNTdHJpbmcgPSB0cnVlOwor
ICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCkt
PnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9k
ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5cGUoU3BlY1N5bWJvbCkpCisgICAg
ICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJvbCA9IHRydWU7CisKKyAgICAg
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1Bh
dGhHZW5lcmF0b3I+IHNsb3dQYXRoID0gc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgc2xvd0Nh
c2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAorICAgICAgICAgICAgcmVzdWx0
UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxP
YmplY3RGb3IoY29kZU9yaWdpbikpLCBnZW4uc3R1YkluZm8oKSwgbnVsbHB0ciwgYmFzZVJlZ3Ms
IHByb3BlcnR5UmVncyk7CisKKyAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0
aC5nZXQoKSk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKFdURk1vdmUoc2xvd1BhdGgp
KTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czogeworICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7
CisgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFu
ZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAg
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQ
UlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAg
ICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9IHByZWZpeChub2RlLT5hcnJheU1v
ZGUoKS50eXBlKCkgPT0gQXJyYXk6OkludDMyID8gRGF0YUZvcm1hdEludDMyIDogRGF0YUZvcm1h
dEpTKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1
ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ1dHRlcmZs
eTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAgICAgICAgaWYgKGZvcm1hdCA9
PSBEYXRhRm9ybWF0SW50MzIpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmFycmF5
TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSk7CisKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3Mo
KSwgMCwKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsCisgICAgICAgICAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFn
T2Zmc2V0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpF
bXB0eVZhbHVlVGFnKSkpOworICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMigKKyAgICAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdo
dCwgUGF5bG9hZE9mZnNldCksCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKKyAgICAgICAgICAgICAgICBzdHJpY3RJbnQzMlJlc3VsdChyZXN1bHRSZWdzLnBh
eWxvYWRHUFIoKSwgbm9kZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKTsKKyAgICAgICAg
ICAgIG1faml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUlu
ZGV4KAorICAgICAgICAgICAgICAgICAgICBzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09mZnNldCksCisgICAgICAgICAgICAgICAgcmVzdWx0
UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgc3RvcmFn
ZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zm
c2V0KSwKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAg
ICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SG9sZSA9IG1faml0LmJyYW5jaElmTm90
RW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSk7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0UmVncy50YWdHUFIoKSk7
CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFJlZ3Mu
cGF5bG9hZEdQUigpKTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAg
ICAgICAgICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAor
ICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BS
KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVn
cywgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7
CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFn
ZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisK
KyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3Ms
IHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZCht
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1
YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgIG1faml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxl
cjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCksIHJlc3VsdFJlZ3MpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaElmRW1wdHkocmVzdWx0UmVncy50YWdHUFIoKSkpOworCisgICAgICAgIGFkZFNsb3dQYXRo
R2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNs
b3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAg
ICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3Bl
cnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogeworICAgICAgICBp
ZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CisgICAgICAgICAgICBTcGVjdWxh
dGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSk7CisgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworCisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlS
ZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3Rv
cmFnZS5ncHIoKTsKKworICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIERhdGFG
b3JtYXQgZm9ybWF0OworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgZm9ybWF0KSA9
IHByZWZpeChEYXRhRm9ybWF0RG91YmxlKTsKKworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAg
ICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3Jh
Z2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHJlc3VsdC5m
cHIoKSk7CisgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5l
Q2hhaW4oKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwg
SlNWYWx1ZVJlZ3MoKSwgMCwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0LmZwcigpKSk7CisgICAg
ICAgICAgICBpZiAoZm9ybWF0ID09IERhdGFGb3JtYXRKUykgeworICAgICAgICAgICAgICAgIGJv
eERvdWJsZShyZXN1bHQuZnByKCksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChmb3JtYXQgPT0gRGF0YUZvcm1hdERvdWJsZSAmJiAhcmVzdWx0UmVn
cyk7CisgICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAw
KSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3Rv
cmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHBy
b3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7
CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcgdGVtcFJlZyA9
IHRlbXAuZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAg
c3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7
CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9h
ZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTmFOKHRlbXBSZWcpKTsKKyAgICAgICAgYm94RG91Ymxl
KHRlbXBSZWcsIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAor
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhp
cywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVn
cywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7CisK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpT
bG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
CisgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKKworICAgICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJl
Z3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKKworICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2hJ
ZkVtcHR5KHJlc3VsdFJlZ3MudGFnR1BSKCkpKTsKKyAgICAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlc3VsdFJlZ3MucGF5bG9h
ZEdQUigpKTsKKworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAg
U3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMSkpOworICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOworICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcg
PSBwcm9wZXJ0eS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdw
cigpOworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisKKyAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3Jl
KSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91
dE9mQm91bmRzID0gbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsK
KworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIHJlc3VsdFJlZ3MudGFnR1BSKCkpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xl
ID0gbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzLnRhZ0dQUigpKTsKKyAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNl
dCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0
UmVncy5wYXlsb2FkR1BSKCkpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQob3V0T2ZCb3VuZHMpOworICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKGhvbGUpOworICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAg
ICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAorICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAorICAgICAgICAgICAgICAgIGJhc2VSZWcsIHBy
b3BlcnR5UmVnKSk7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6OlN0cmluZzoKKyAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgcHJlZml4KTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheTo6RGlyZWN0QXJndW1lbnRzOgorICAgICAgICBjb21waWxlR2V0QnlWYWxP
bkRpcmVjdEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFycmF5OjpTY29wZWRBcmd1bWVudHM6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU2NvcGVk
QXJndW1lbnRzKG5vZGUsIHByZWZpeCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6IHsK
KyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IG5vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJy
YXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIGNvbXBpbGVH
ZXRCeVZhbE9uSW50VHlwZWRBcnJheShub2RlLCB0eXBlLCBwcmVmaXgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShub2RlLCB0eXBl
LCBwcmVmaXgpOworICAgIH0gfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiB7CiAgICAgTm9kZVR5cGUgb3AgPSBub2RlLT5vcCgpOwpAQCAtMjIzMyw3ICsy
NTYyLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKIAogICAg
IGNhc2UgU3RyaW5nQ2hhckF0OiB7CiAgICAgICAgIC8vIFJlbGllcyBvbiBTdHJpbmdDaGFyQXQg
bm9kZSBoYXZpbmcgc2FtZSBiYXNpYyBsYXlvdXQgYXMgR2V0QnlWYWwKLSAgICAgICAgY29tcGls
ZUdldEJ5VmFsT25TdHJpbmcobm9kZSk7CisgICAgICAgIEpTVmFsdWVSZWdzVGVtcG9yYXJ5IHJl
c3VsdDsKKyAgICAgICAgY29tcGlsZUdldEJ5VmFsT25TdHJpbmcobm9kZSwgc2NvcGVkTGFtYmRh
PHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQgcHJlZmVycmVk
Rm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAgICAgICAgICAg
cmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3JhcnkodGhpcyk7CisgICAgICAgICAgICBBU1NFUlQo
cHJlZmVycmVkRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihyZXN1bHQucmVncygpLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMjI2NSwzMjYgKzI1OTksMjcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgR2V0
QnlWYWw6IHsKLSAgICAgICAgc3dpdGNoIChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkpIHsKLSAg
ICAgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9uczoKLSAgICAgICAgY2FzZSBB
cnJheTo6Rm9yY2VFeGl0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSNpZiBDT01QSUxFUl9RVUlSSyhDT05TSURFUlNfVU5SRUFDSEFCTEVfQ09ERSkKLSAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEluYWRlcXVhdGVDb3ZlcmFnZSwg
SlNWYWx1ZVJlZ3MoKSwgMCk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcywgUmV1c2UsIGluZGV4KTsKLSAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotCi0gICAgICAgICAgICBH
UFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRU
YWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9h
ZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Ci0KLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3V0T2ZCb3VuZHMsIEpTVmFsdWVSZWdzKCksIG5vZGUsCi0gICAgICAgICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBpbmRleEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwotCi0gICAgICAgICAgICB1c2UobV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBpbmRleC51c2UoKTsKLQotICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5t
X3Nsb3dHZXRCeVZhbC5jb250YWlucyhub2RlKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgp
ID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFs
Rm9yT2JqZWN0V2l0aFN0cmluZyhub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09IFN5bWJvbFVzZSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsRm9yT2JqZWN0V2l0aFN5bWJvbChub2Rl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsgLy8gU2F2ZSBhIHJl
Z2lzdGVyLCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCi0gICAgICAg
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSk7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwotICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5Lmpz
VmFsdWVSZWdzKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVnc0ZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVz
dWx0LnJlZ3MoKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5
VmFsQ2VsbCwgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VHUFIs
IHByb3BlcnR5UmVncyk7Ci0gICAgICAgICAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Z3MsIG5vZGUpOworICAgICAgICBKU1ZhbHVlUmVnc1RlbXBvcmFyeSBqc1ZhbHVlUmVzdWx0Owor
ICAgICAgICBHUFJUZW1wb3Jhcnkgb25lUmVnUmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlW
YWwobm9kZSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+
KERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZv
cm1hdCkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAg
IHN3aXRjaCAocHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRE
b3VibGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLQot
ICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSwgTWFu
dWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRU
YWcodGhpcywgUmV1c2UsIHByb3BlcnR5LCBUYWdXb3JkKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRQYXlsb2FkKHRoaXMsIFJldXNlLCBwcm9wZXJ0eSwgUGF5bG9hZFdvcmQpOwot
Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyBiYXNlUmVncyA9IGJhc2UuanNWYWx1ZVJlZ3MoKTsK
LSAgICAgICAgICAgIEpTVmFsdWVSZWdzIHByb3BlcnR5UmVncyA9IHByb3BlcnR5LmpzVmFsdWVS
ZWdzKCk7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlc3VsdFRhZy5ncHIo
KSwgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0KLSAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxp
bmdPU1JFeGl0SWZOZWVkZWQoY29kZU9yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7Ci0gICAgICAg
ICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOwot
Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAg
ICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkuaXNU
eXBlKFNwZWNDZWxsKSkKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaElmTm90Q2VsbChiYXNlUmVncy50YWdHUFIoKSkpOwotCi0gICAgICAgICAgICBKSVRHZXRC
eVZhbEdlbmVyYXRvciBnZW4oCi0gICAgICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJ
VFR5cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFs
LCB1c2VkUmVnaXN0ZXJzLAotICAgICAgICAgICAgICAgIGJhc2VSZWdzLCBwcm9wZXJ0eVJlZ3Ms
IHJlc3VsdFJlZ3MsIEludmFsaWRHUFJSZWcpOwotCi0gICAgICAgICAgICBpZiAobV9zdGF0ZS5m
b3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVjU3RyaW5nKSkK
LSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N0cmluZyA9IHRydWU7
Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGls
ZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQotICAgICAgICAgICAgICAgIGdlbi5z
dHViSW5mbygpLT5wcm9wZXJ0eUlzSW50MzIgPSB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAo
bV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpLmlzVHlwZShTcGVj
U3ltYm9sKSkKLSAgICAgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5bWJv
bCA9IHRydWU7Ci0KLSAgICAgICAgICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKG1faml0KTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChnZW4uc2xvd1BhdGhKdW1w
KCkpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+IHNs
b3dQYXRoID0gc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywg
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwKLSAgICAgICAgICAgICAgICByZXN1bHRSZWdzLCBU
cnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygpLCBudWxscHRyLCBiYXNlUmVncywgcHJvcGVy
dHlSZWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2Vu
LCBzbG93UGF0aC5nZXQoKSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZN
b3ZlKHNsb3dQYXRoKSk7Ci0KLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywg
bm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5
OjpJbnQzMjoKLSAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91
dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3Rv
cmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6SW50
MzIpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzU2FuZUNoYWluKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjaygKLSAgICAgICAgICAgICAgICAgICAgICAgIE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgVGFnT2Zmc2V0KSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFBheWxv
YWRPZmZzZXQpLAotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHN0cmljdEludDMyUmVzdWx0KHJlc3VsdFBheWxvYWQuZ3By
KCksIG5vZGUpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRh
Zyh0aGlzKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoCi0gICAgICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIFRhZ09m
ZnNldCksCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKAotICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4KAotICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZVJlZywgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBQYXlsb2FkT2Zmc2V0KSwKLSAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0UGF5bG9hZC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4oKSkgewotICAgICAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBub3RIb2xlID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0eShy
ZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAg
ICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFRhZy5ncHIo
KSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAg
ICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJv
cGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVn
ID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ1JlZyA9
IHJlc3VsdFRhZy5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkUmVnID0g
cmVzdWx0UGF5bG9hZC5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVzdWx0VGFnUmVnKTsKLSAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSwgcmVzdWx0UGF5bG9hZFJlZyk7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0
LmJyYW5jaElmRW1wdHkocmVzdWx0VGFnUmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNsb3dQYXRoQ2FsbCgKLSAg
ICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9iamVj
dEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnUmVnLCByZXN1
bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3Bl
cnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewotICAgICAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNwZWN1bGF0
ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5v
ZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1f
Z3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91
bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAg
ICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0LmZwcigpKTsK
LSAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hh
aW4oKSkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhMb2FkRnJvbUhvbGUs
IEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElmTmFOKHJlc3VsdC5mcHIoKSkpOwotICAg
ICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOworICAgICAgICAg
ICAgY2FzZSBEYXRhRm9ybWF0SW50MzI6CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXRDZWxs
OgorICAgICAgICAgICAgICAgIG9uZVJlZ1Jlc3VsdCA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KG9uZVJl
Z1Jlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJh
bmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAg
ICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9k
ZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsK
LSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0
aGlzKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMpOwotICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgICAgICBHUFJSZWcgcmVz
dWx0VGFnUmVnID0gcmVzdWx0VGFnLmdwcigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFBh
eWxvYWRSZWcgPSByZXN1bHRQYXlsb2FkLmdwcigpOwotICAgICAgICAgICAgRlBSUmVnIHRlbXBS
ZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVnKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOYU4odGVtcFJlZykpOwotICAgICAg
ICAgICAgYm94RG91YmxlKHRlbXBSZWcsIHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyk7
Ci0KLSAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3MocmVz
dWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnKSwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIo
bV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSks
IGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnUmVnLCByZXN1bHRQYXlsb2FkUmVnLCBub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToK
LSAgICAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZTogewotICAgICAgICAgICAg
aWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewotICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCAwLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JM
ZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRU
YWcodGhpcyk7Ci0gICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhp
cyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQs
IEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwg
dS5hc0JpdHMudGFnKSksIHJlc3VsdFRhZy5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIDAsIG1faml0LmJyYW5jaElm
RW1wdHkocmVzdWx0VGFnLmdwcigpKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRh
Zy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CisgICAgICAgICAgICBkZWZhdWx0
OiB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0
SlMpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQgPSBKU1ZhbHVlUmVnc1RlbXBvcmFy
eSh0aGlzKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSZWdzID0ganNWYWx1ZVJlc3VsdC5yZWdz
KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2Rl
LCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVydHko
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9yYWdl
T3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwotICAg
ICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcg
YmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0KLSAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHRUYWcodGhpcyk7Ci0gICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlz
KTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRUYWdSZWcgPSByZXN1bHRUYWcuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZFJlZyA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7
Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG91dE9mQm91bmRzID0gbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsCi0gICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwotCi0gICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlc3Vs
dFRhZ1JlZyk7Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBob2xlID0gbV9qaXQuYnJh
bmNoSWZFbXB0eShyZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICAgICAgbV9qaXQubG9hZDMyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNU
X09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVzdWx0UGF5bG9hZFJlZyk7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG91dE9mQm91bmRzKTsKLSAgICAgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoaG9sZSk7Ci0gICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKLSAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAg
IHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCi0gICAgICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKHJlc3VsdFRhZ1JlZywgcmVzdWx0UGF5bG9hZFJlZyksIFRy
dXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLAotICAgICAgICAgICAgICAgICAgICBiYXNlUmVnLCBw
cm9wZXJ0eVJlZykpOwotCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ1JlZywg
cmVzdWx0UGF5bG9hZFJlZywgbm9kZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEFycmF5OjpTdHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpE
aXJlY3RBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3Vt
ZW50cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpTY29w
ZWRBcmd1bWVudHM6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50
cyhub2RlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OiB7Ci0gICAgICAg
ICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5
cGUoKTsKLSAgICAgICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgICAgICBjb21w
aWxlR2V0QnlWYWxPbkludFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwg
dHlwZSk7Ci0gICAgICAgIH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihyZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKQEAgLTQxMTIsNTEgKzQxNDcsNTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBjYXNlIEdldEVudW1lcmFibGVMZW5ndGg6IHsKLSAgICAgICAgY29tcGlsZUdl
dEVudW1lcmFibGVMZW5ndGgobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBjYXNl
IEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzRW51
bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgY2FzZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0VudW1l
cmFibGVQcm9wZXJ0eShub2RlKTsKKyAgICBjYXNlIEhhc0luZGV4ZWRQcm9wZXJ0eTogeworICAg
ICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgaW5kZXgodGhpcywgbV9ncmFwaC52YXJB
cmdDaGlsZChub2RlLCAxKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1
c2UsIGluZGV4KTsKKworICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9w
ZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSwgc2NvcGVkTGFtYmRhPHN0ZDo6dHVwbGU8R1BSUmVn
LCBHUFJSZWc+KCk+KFsmXSB7IHJldHVybiBzdGQ6Om1ha2VfcGFpcihpbmRleC5ncHIoKSwgcmVz
dWx0LmdwcigpKTsgfSkpOworICAgICAgICB1bmJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc093blN0cnVj
dHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eShu
b2RlKTsKKworICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7CisgICAgICAgIGNvbXBp
bGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAg
ICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUluU3RydWN0dXJl
UHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlOiB7CisgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4QW5kTW9kZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5
OiB7Ci0gICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkobm9kZSwgb3BlcmF0aW9uSGFz
SW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZTog
eworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0TW9kZShub2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eTog
ewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5vZGUsIG9wZXJhdGlvbkhhc0Vu
dW1lcmFibGVJbmRleGVkUHJvcGVydHkpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJh
Y3RJbmRleDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRFeHRyYWN0SW5kZXgobm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEdldERpcmVjdFBuYW1lOiB7Ci0g
ICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZShub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRv
ck5leHRVcGRhdGVQcm9wZXJ0eU5hbWU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0
VXBkYXRlUHJvcGVydHlOYW1lKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fz
ZSBHZXRQcm9wZXJ0eUVudW1lcmF0b3I6IHsKLSAgICAgICAgY29tcGlsZUdldFByb3BlcnR5RW51
bWVyYXRvcihub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOiB7CisgICAgICAg
IGNvbXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBjYXNlIEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZToKLSAgICBjYXNlIEdldEVudW1l
cmF0b3JHZW5lcmljUG5hbWU6IHsKLSAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JQbmFtZShu
b2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckluQnlWYWw6IHsKKyAgICAgICAgY29tcGlsZUVu
dW1lcmF0b3JJbkJ5VmFsKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBU
b0luZGV4U3RyaW5nOiB7Ci0gICAgICAgIGNvbXBpbGVUb0luZGV4U3RyaW5nKG5vZGUpOworCisg
ICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6IHsKKyAgICAgICAgY29tcGlsZUVudW1l
cmF0b3JIYXNPd25Qcm9wZXJ0eShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQorCiAgICAg
Y2FzZSBQcm9maWxlVHlwZTogewogICAgICAgICBjb21waWxlUHJvZmlsZVR5cGUobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAKaW5kZXggYjVlMWNjM2U0MmQyZmI0YzlkNGYxMzEwN2U5OGVmZTBiMjA1
ZTVjNy4uODgwOGIxMGM4MjZjNTEwNjk3OTc0MDA5ZTk2ZjE5OWZhOGYxMGE0YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0y
MjQ2LDYgKzIyNDYsMzcwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSog
bm9kZSkKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbChO
b2RlKiBub2RlLCBjb25zdCBTY29wZWRMYW1iZGE8c3RkOjp0dXBsZTxKU1ZhbHVlUmVncywgRGF0
YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPiYgcHJlZml4KQoreworICAgIHN3
aXRjaCAobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CisgICAgY2FzZSBBcnJheTo6QW55VHlw
ZWRBcnJheToKKyAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CisgICAgY2FzZSBBcnJheTo6U2Vs
ZWN0VXNpbmdBcmd1bWVudHM6CisgICAgY2FzZSBBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9u
czoKKyAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgorICAgICAgICBERkdfQ1JBU0gobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcnJheTo6VW5kZWNpZGVkOiB7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMy
T3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAg
ICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVzdWx0UmVnczsKKyAgICAgICAgc3RkOjp0aWUocmVzdWx0UmVncywgc3RkOjppZ25vcmUpID0g
cHJlZml4KERhdGFGb3JtYXRKUyk7CisKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJv
dW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9kZSwKKyAgICAgICAgICAgIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoMCkpKTsKKworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRSZWdzLmdwcigpKTsKKworICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKKyAgICBjYXNlIEFycmF5OjpCaWdV
aW50NjRBcnJheToKKyAgICBjYXNlIEFycmF5OjpHZW5lcmljOiB7CisgICAgICAgIGlmIChtX2dy
YXBoLm1fc2xvd0dldEJ5VmFsLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkudXNlS2luZCgpID09
IFN0cmluZ1VzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxGb3JPYmpl
Y3RXaXRoU3RyaW5nKG5vZGUsIHByZWZpeCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAxKS51c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSwgcHJlZml4KTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDApKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHByb3BlcnR5KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5R1BSID0gcHJv
cGVydHkuZ3ByKCk7CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAg
ICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVmaXgoRGF0YUZv
cm1hdEpTKTsKKworICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6
OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOworCisgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3Ms
IG5vZGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxP
cGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlz
LCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBw
cm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOworCisgICAgICAgIEdQUlRlbXBvcmFyeSBzdHVi
SW5mbzsKKyAgICAgICAgR1BSUmVnIHN0dWJJbmZvR1BSID0gSW52YWxpZEdQUlJlZzsKKyAgICAg
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAg
ICBzdHViSW5mbyA9IEdQUlRlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIHN0dWJJbmZvR1BS
ID0gc3R1YkluZm8uZ3ByKCk7CisgICAgICAgIH0KKworICAgICAgICBzcGVjdWxhdGUobm9kZSwg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIHNwZWN1bGF0ZShub2RlLCBt
X2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKworICAgICAgICBKU1ZhbHVlUmVncyByZXN1
bHRSZWdzOworICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBzdGQ6Omlnbm9yZSkgPSBwcmVm
aXgoRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdFJlZ3Mu
Z3ByKCk7CisKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNl
bWFudGljOworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2Fs
bFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGNvZGVPcmln
aW4sIG1fc3RyZWFtLT5zaXplKCkpOworICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
ID0gdGhpcy0+dXNlZFJlZ2lzdGVycygpOworCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBzbG93Q2FzZXM7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobm9kZSwgMCkpLmlzVHlwZShTcGVjQ2VsbCkpCisgICAgICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChiYXNlR1BSKSk7CisKKyAgICAgICAgSklUR2V0
QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCksIEpJVFR5
cGU6OkRGR0pJVCwgY29kZU9yaWdpbiwgY2FsbFNpdGUsIEFjY2Vzc1R5cGU6OkdldEJ5VmFsLCB1
c2VkUmVnaXN0ZXJzLAorICAgICAgICAgICAgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIEpTVmFsdWVS
ZWdzKHByb3BlcnR5R1BSKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgc3R1YkluZm9HUFIpOwor
CisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSkuaXNUeXBlKFNwZWNTdHJpbmcpKQorICAgICAgICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3Bl
cnR5SXNTdHJpbmcgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlLmZvck5vZGUobV9n
cmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNJbnQzMk9ubHkpKQorICAgICAg
ICAgICAgZ2VuLnN0dWJJbmZvKCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7CisgICAgICAgIGVs
c2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKS5pc1R5
cGUoU3BlY1N5bWJvbCkpCisgICAgICAgICAgICBnZW4uc3R1YkluZm8oKS0+cHJvcGVydHlJc1N5
bWJvbCA9IHRydWU7CisKKyAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOworCisg
ICAgICAgIGlmICghSklUQ29kZTo6dXNlRGF0YUlDKEpJVFR5cGU6OkRGR0pJVCkpCisgICAgICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0aDsKKyAgICAgICAgaWYgKEpJ
VENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQpKSB7CisgICAgICAgICAgICBzbG93UGF0
aCA9IHNsb3dQYXRoSUNDYWxsKAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2Vu
LnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9H
UFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlv
bkdldEJ5VmFsT3B0aW1pemUsCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3Jp
Z2luKSksIHN0dWJJbmZvR1BSLCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKKyAgICAg
ICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCisg
ICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dy
YXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKSksIGdlbi5zdHViSW5mbygp
LCBudWxscHRyLCBiYXNlR1BSLCBwcm9wZXJ0eUdQUik7CisgICAgICAgIH0KKworICAgICAgICBt
X2ppdC5hZGRHZXRCeVZhbChnZW4sIHNsb3dQYXRoLmdldCgpKTsKKyAgICAgICAgYWRkU2xvd1Bh
dGhHZW5lcmF0b3IoV1RGTW92ZShzbG93UGF0aCkpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQXJyYXk6
OkludDMyOgorICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKKyAgICAgICAgaWYgKG5vZGUt
PmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0
SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkp
OworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFy
Z0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgICAg
ICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZv
cm1hdCkgPSBwcmVmaXgobm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJbnQzMiA/
IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHQgPSByZXN1bHRSZWdzLmdwcigpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwor
CisgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHQp
OworICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHNTYW5lQ2hhaW4o
KSkgeworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5hcnJheU1vZGUoKS50eXBlKCkgPT0g
QXJyYXk6OkNvbnRpZ3VvdXMpOworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5v
dEhvbGUgPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdCk7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICBub3RIb2xlLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAg
ICAgICAgICAgICAgTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLAorICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQsIG5vZGUsIGZvcm1hdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1
bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxk
KG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2Uu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAg
ICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9
IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
UmVncy5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OworCisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKKworICAgICAg
ICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOworCisgICAg
ICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkpIHsKKyAg
ICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVnKTsK
KyAgICAgICAgICAgIHNsb3dDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJl
Zyk7CisgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcp
KTsKKyAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgIHNs
b3dQYXRoQ2FsbCgKKyAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRp
b25HZXRCeVZhbE9iamVjdEludCwKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVz
dGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKyAgICAgICAg
fQorCisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWcsIG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKKyAgICAgICAgaWYgKG5v
ZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlU3Ry
aWN0SW50MzJPcGVyYW5kIHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MSkpOworICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0g
cHJvcGVydHkuZ3ByKCk7CisgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2Uu
Z3ByKCk7CisKKyAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAg
ICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmZwcigpOworCisgICAgICAgICAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Cisg
ICAgICAgICAgICBzdGQ6OnRpZShyZXN1bHRSZWdzLCBmb3JtYXQpID0gcHJlZml4KERhdGFGb3Jt
YXREb3VibGUpOworCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE91dE9mQm91bmRzLCBK
U1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJl
ZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworCisgICAgICAgICAgICBt
X2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFpbigpKQorICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygp
LCBudWxscHRyLCBtX2ppdC5icmFuY2hJZk5hTihyZXN1bHRSZWcpKTsKKyAgICAgICAgICAgIGlm
IChmb3JtYXQgPT0gRGF0YUZvcm1hdEpTKSB7CisgICAgICAgICAgICAgICAgYm94RG91YmxlKHJl
c3VsdFJlZywgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKGZvcm1hdCA9PSBEYXRhRm9ybWF0RG91YmxlICYmICFyZXN1bHRSZWdzKTsKKyAgICAgICAg
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCByZXN1bHRJc1VuYm94
ZWQgPSBub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNoYWluKCkgJiYgIShub2Rl
LT5mbGFncygpICYgTm9kZUJ5dGVjb2RlVXNlc0FzT3RoZXIpOworCisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0
aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKworICAgICAgICBHUFJSZWcgYmFz
ZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5
LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBGUFJSZWcgdGVtcFJlZyA9IHRlbXAu
ZnByKCk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQ7CisgICAgICAgIHN0ZDo6dGllKHJlc3VsdFJlZ3MsIGZvcm1hdCkgPSBwcmVm
aXgocmVzdWx0SXNVbmJveGVkID8gRGF0YUZvcm1hdERvdWJsZSA6IERhdGFGb3JtYXRKUyk7CisK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgICAgICBz
bG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCdXR0
ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIHRlbXBSZWcpOworICAgICAgICBpZiAobm9kZS0+
YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFpbigpKSB7CisgICAgICAgICAgICBpZiAo
Zm9ybWF0ID09IERhdGFGb3JtYXREb3VibGUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVS
ZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwg
cHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQTmFOOworICAgICAgICAgICAgICAgIG1f
aml0LmxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7CisgICAgICAgICAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZXN1bHRS
ZWdzKTsKKyAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9kZSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoSWZOYU4odGVtcFJlZykpOworICAgICAgICAgICAgICAgIGJveERvdWJsZSh0ZW1wUmVn
LCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CisgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51
bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlS
ZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCByZXN1bHRSZWdzLmdwcigpKTsKKyAgICAgICAgICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MuZ3ByKCks
IG5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2xv
d0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7CisgICAgICAgICAgICBi
b3hEb3VibGUodGVtcFJlZywgcmVzdWx0UmVncy5ncHIoKSk7CisgICAgICAgICAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCisgICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmplY3RJbnQsCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFJlZ3MuZ3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQ
b2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykpOworICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRSZWdzLmdwcigpLCBub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgQXJyYXk6OkFycmF5U3RvcmFnZToKKyAgICBjYXNlIEFycmF5OjpT
bG93UHV0QXJyYXlTdG9yYWdlOiB7CisgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc0lu
Qm91bmRzKCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgICAgIFN0
b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAyKSk7
CisKKyAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOworCisgICAgICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
ICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzOworICAgICAgICAgICAgc3RkOjp0aWUocmVzdWx0
UmVncywgc3RkOjppZ25vcmUpID0gcHJlZml4KERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zm
c2V0KCkpKSk7CisKKworICAgICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0Vp
Z2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soTG9hZEZyb21Ib2xlLCBKU1ZhbHVlUmVncygpLCBudWxscHRy
LCBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdEdQUikpOworCisgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdD
aGlsZChub2RlLCAwKSk7CisgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBwcm9w
ZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKKyAgICAgICAgU3RvcmFn
ZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDIpKTsKKwor
ICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBwcm9w
ZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOworICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0
b3JhZ2UuZ3ByKCk7CisKKyAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3M7CisgICAgICAgIHN0ZDo6
dGllKHJlc3VsdFJlZ3MsIHN0ZDo6aWdub3JlKSA9IHByZWZpeChEYXRhRm9ybWF0SlMpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0UmVncy5ncHIoKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVzdWx0UmVnKTsKKyAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJlZykpOwor
CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAorICAgICAgICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9uR2V0QnlWYWxPYmpl
Y3RJbnQsCisgICAgICAgICAgICAgICAgcmVzdWx0UmVnLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9p
bnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpKSwgYmFzZVJlZywgcHJvcGVydHlSZWcpKTsKKworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdFJlZywgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFycmF5OjpT
dHJpbmc6CisgICAgICAgIGNvbXBpbGVHZXRCeVZhbE9uU3RyaW5nKG5vZGUsIHByZWZpeCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJyYXk6OkRpcmVjdEFyZ3VtZW50czoKKyAgICAgICAg
Y29tcGlsZUdldEJ5VmFsT25EaXJlY3RBcmd1bWVudHMobm9kZSwgcHJlZml4KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJndW1lbnRzOgorICAgICAgICBjb21waWxl
R2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlLCBwcmVmaXgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6CisgICAgY2FzZSBBcnJheTo6SW50MTZBcnJheToK
KyAgICBjYXNlIEFycmF5OjpJbnQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6
CisgICAgY2FzZSBBcnJheTo6VWludDhDbGFtcGVkQXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWlu
dDE2QXJyYXk6CisgICAgY2FzZSBBcnJheTo6VWludDMyQXJyYXk6CisgICAgY2FzZSBBcnJheTo6
RmxvYXQzMkFycmF5OgorICAgIGNhc2UgQXJyYXk6OkZsb2F0NjRBcnJheTogeworICAgICAgICBU
eXBlZEFycmF5VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsK
KyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAgICAgY29tcGlsZUdldEJ5VmFsT25J
bnRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KG5vZGUsIHR5cGUsIHByZWZpeCk7
CisgICAgfSB9Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
IHsKICAgICBOb2RlVHlwZSBvcCA9IG5vZGUtPm9wKCk7CkBAIC0yNzEzLDcgKzMwNzcsMTIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogCiAgICAgY2FzZSBTdHJp
bmdDaGFyQXQ6IHsKICAgICAgICAgLy8gUmVsaWVzIG9uIFN0cmluZ0NoYXJBdCBub2RlIGhhdmlu
ZyBzYW1lIGJhc2ljIGxheW91dCBhcyBHZXRCeVZhbAotICAgICAgICBjb21waWxlR2V0QnlWYWxP
blN0cmluZyhub2RlKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAg
ICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlLCBzY29wZWRMYW1iZGE8c3RkOjp0dXBs
ZTxKU1ZhbHVlUmVncywgRGF0YUZvcm1hdD4oRGF0YUZvcm1hdCBwcmVmZXJyZWRGb3JtYXQpPihb
Jl0gKERhdGFGb3JtYXQgcHJlZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICByZXN1bHQgPSBK
U1ZhbHVlUmVnc1RlbXBvcmFyeSh0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChwcmVmZXJyZWRG
b3JtYXQgPT0gRGF0YUZvcm1hdEpTIHx8IHByZWZlcnJlZEZvcm1hdCA9PSBEYXRhRm9ybWF0Q2Vs
bCk7CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVzdWx0LnJlZ3MoKSwgcHJl
ZmVycmVkRm9ybWF0KTsKKyAgICAgICAgfSkpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAg
LTI3NDYsMzQ1ICszMTE1LDIwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICB9CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7Ci0gICAgICAgIHN3aXRjaCAobm9k
ZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6OkFueVR5cGVkQXJy
YXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZvcmNlRXhpdDoKLSAgICAgICAgY2FzZSBBcnJheTo6
U2VsZWN0VXNpbmdBcmd1bWVudHM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlNlbGVjdFVzaW5nUHJl
ZGljdGlvbnM6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVucHJvZmlsZWQ6Ci0gICAgICAgICAgICBE
RkdfQ1JBU0gobV9qaXQuZ3JhcGgoKSwgbm9kZSwgIkJhZCBhcnJheSBtb2RlIHR5cGUiKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpVbmRlY2lkZWQ6IHsKLSAgICAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBpbmRleCh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIGluZGV4KTsKLSAgICAgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4Lmdw
cigpOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNWYWx1ZVJlZ3MoKSwgbm9k
ZSwKLSAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW4sIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7Ci0KLSAgICAg
ICAgICAgIHVzZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIGlu
ZGV4LnVzZSgpOwotCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6VmFsdWVVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5
OjpCaWdJbnQ2NEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpCaWdVaW50NjRBcnJheToKLSAg
ICAgICAgY2FzZSBBcnJheTo6R2VuZXJpYzogewotICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9z
bG93R2V0QnlWYWwuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC52YXJBcmdDaGlsZChub2RlLCAwKS51c2VLaW5kKCkgPT0gT2JqZWN0VXNlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9
PSBTdHJpbmdVc2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZv
ck9iamVjdFdpdGhTdHJpbmcobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXBpbGVHZXRCeVZhbEZvck9iamVjdFdpdGhTeW1ib2wobm9kZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2Uo
dGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICAg
ICAgICAgIEdQUlJlZyBwcm9wZXJ0eUdQUiA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWwsIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbVB0cjo6
d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSksIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJUZW1wb3Jhcnk+
IHN0dWJJbmZvOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDApLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAxKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKLSAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHByb3BlcnR5KTsKLQotICAgICAgICAgICAgR1BSUmVn
IHN0dWJJbmZvR1BSID0gSW52YWxpZEdQUlJlZzsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1
c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkgewotICAgICAgICAgICAgICAgIHN0dWJJbmZvLmVt
cGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgc3R1YkluZm9HUFIgPSBzdHViSW5mby0+Z3By
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlHUFIgPSBwcm9wZXJ0eS5ncHIoKTsKLSAg
ICAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Ci0KLSAgICAgICAgICAg
IHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0ZShub2RlLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLQotICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOwot
ICAgICAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENhbGxTaXRl
QW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChjb2RlT3JpZ2luLCBt
X3N0cmVhbS0+c2l6ZSgpKTsKLSAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMg
PSB0aGlzLT51c2VkUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShtX2dyYXBo
LnZhckFyZ0NoaWxkKG5vZGUsIDApKS5pc1R5cGUoU3BlY0NlbGwpKQotICAgICAgICAgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKGJhc2VHUFIpKTsKLQotICAg
ICAgICAgICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAotICAgICAgICAgICAgICAgIG1faml0
LmNvZGVCbG9jaygpLCBKSVRUeXBlOjpERkdKSVQsIGNvZGVPcmlnaW4sIGNhbGxTaXRlLCBBY2Nl
c3NUeXBlOjpHZXRCeVZhbCwgdXNlZFJlZ2lzdGVycywKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgSlNWYWx1ZVJlZ3MocHJvcGVydHlHUFIpLCBKU1ZhbHVlUmVncyhyZXN1
bHRHUFIpLCBzdHViSW5mb0dQUik7Ci0KLSAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUo
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTdHJpbmcpKQotICAgICAg
ICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3RyaW5nID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUs
IDEpKS5pc1R5cGUoU3BlY0ludDMyT25seSkpCi0gICAgICAgICAgICAgICAgZ2VuLnN0dWJJbmZv
KCktPnByb3BlcnR5SXNJbnQzMiA9IHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChtX3N0YXRl
LmZvck5vZGUobV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSkuaXNUeXBlKFNwZWNTeW1ib2wp
KQotICAgICAgICAgICAgICAgIGdlbi5zdHViSW5mbygpLT5wcm9wZXJ0eUlzU3ltYm9sID0gdHJ1
ZTsKLQotICAgICAgICAgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgobV9qaXQpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpERkdKSVQp
KQotICAgICAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoZ2VuLnNsb3dQYXRoSnVtcCgpKTsK
LQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiBzbG93UGF0
aDsKLSAgICAgICAgICAgIGlmIChKSVRDb2RlOjp1c2VEYXRhSUMoSklUVHlwZTo6REZHSklUKSkg
ewotICAgICAgICAgICAgICAgIHNsb3dQYXRoID0gc2xvd1BhdGhJQ0NhbGwoCi0gICAgICAgICAg
ICAgICAgICAgIHNsb3dDYXNlcywgdGhpcywgZ2VuLnN0dWJJbmZvKCksIHN0dWJJbmZvR1BSLCBD
Q2FsbEhlbHBlcnM6OkFkZHJlc3Moc3R1YkluZm9HUFIsIFN0cnVjdHVyZVN0dWJJbmZvOjpvZmZz
ZXRPZlNsb3dPcGVyYXRpb24oKSksIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsCi0gICAgICAg
ICAgICAgICAgICAgIHJlc3VsdEdQUiwgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFw
aCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikpLCBzdHViSW5mb0dQUiwgbnVs
bHB0ciwgYmFzZUdQUiwgcHJvcGVydHlHUFIpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBzbG93UGF0aCA9IHNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAg
c2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pKSwgZ2VuLnN0dWJJbmZvKCksIG51bGxw
dHIsIGJhc2VHUFIsIHByb3BlcnR5R1BSKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgbV9qaXQuYWRkR2V0QnlWYWwoZ2VuLCBzbG93UGF0aC5nZXQoKSk7Ci0gICAg
ICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihXVEZNb3ZlKHNsb3dQYXRoKSk7Ci0KLSAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyOgotICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOiB7Ci0gICAgICAgICAgICBpZiAobm9kZS0+YXJyYXlNb2RlKCkuaXNJ
bkJvdW5kcygpKSB7Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5k
IHByb3BlcnR5KHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOwotICAgICAgICAg
ICAgICAgIFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAyKSk7Ci0KLSAgICAgICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0
eS5ncHIoKTsKLSAgICAgICAgICAgICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3By
KCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE91dE9mQm91bmRzLCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7Ci0KLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRp
bWVzRWlnaHQpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzU2FuZUNoYWluKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSA9PSBBcnJheTo6Q29udGlndW91cyk7Ci0gICAg
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdEhvbGUgPSBtX2ppdC5icmFuY2hJ
Zk5vdEVtcHR5KHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdC5ncHIo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vdEhvbGUubGluaygmbV9qaXQpOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCi0g
ICAgICAgICAgICAgICAgICAgICAgICBMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxw
dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdC5n
cHIoKSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbm9kZSwgbm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpID09IEFycmF5OjpJ
bnQzMiA/IERhdGFGb3JtYXRKU0ludDMyIDogRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgSlNWYWx1
ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0OworICAgICAgICBjb21waWxlR2V0QnlWYWwobm9kZSwgc2Nv
cGVkTGFtYmRhPHN0ZDo6dHVwbGU8SlNWYWx1ZVJlZ3MsIERhdGFGb3JtYXQ+KERhdGFGb3JtYXQg
cHJlZmVycmVkRm9ybWF0KT4oWyZdIChEYXRhRm9ybWF0IHByZWZlcnJlZEZvcm1hdCkgeworICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVnczsKKyAgICAgICAgICAgIHN3aXRjaCAocHJl
ZmVycmVkRm9ybWF0KSB7CisgICAgICAgICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChu
b2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgcHJvcGVy
dHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7Ci0gICAgICAgICAgICBTdG9y
YWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMikpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7Ci0g
ICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKLSAgICAgICAg
ICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAg
ICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3ByKCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0b3JhZ2VSZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQotICAg
ICAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJl
ZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0UmVnKTsK
LQotICAgICAgICAgICAgaWYgKG5vZGUtPmFycmF5TW9kZSgpLmlzT3V0T2ZCb3VuZHNTYW5lQ2hh
aW4oKSkgewotICAgICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0LmJyYW5jaElmTm90RW1w
dHkocmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICBzbG93Q2FzZXMubGluaygmbV9qaXQpOwot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVJbmRleCwgSlNWYWx1ZVJl
Z3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBw
cm9wZXJ0eVJlZywgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgICAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQobV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWcpKTsKLSAgICAgICAgICAgICAg
ICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KAotICAgICAgICAgICAgICAgICAgICAgICAgc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRC
eVZhbE9iamVjdEludCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5ncHIoKSwgVHJ1
c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJhc2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIAotICAgICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLQotICAgICAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJl
ZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0g
c3RvcmFnZS5ncHIoKTsKLQotICAgICAgICAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBGUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0
LmZwcigpOwotCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywg
SlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLQotICAgICAgICAgICAg
ICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVn
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRSZWcpOwot
ICAgICAgICAgICAgICAgIGlmICghbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kc1NhbmVDaGFp
bigpKQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKExvYWRGcm9tSG9sZSwg
SlNWYWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZOYU4ocmVzdWx0UmVnKSk7Ci0g
ICAgICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdFJlZywgbm9kZSk7CisgICAgICAgICAg
ICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gSlNWYWx1ZVJlZ3NUZW1wb3Jh
cnkodGhpcyk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wg
cmVzdWx0SXNVbmJveGVkID0gbm9kZS0+YXJyYXlNb2RlKCkuaXNPdXRPZkJvdW5kc1NhbmVDaGFp
bigpICYmICEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVCeXRlY29kZVVzZXNBc090aGVyKTsKLQotICAg
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBtX2dyYXBoLnZhckFyZ0No
aWxkKG5vZGUsIDApKTsKLSAgICAgICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBw
cm9wZXJ0eSh0aGlzLCBtX2dyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDEpKTsKLSAgICAgICAgICAg
IFN0b3JhZ2VPcGVyYW5kIHN0b3JhZ2UodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAy
KSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIo
KTsKLSAgICAgICAgICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAg
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEdQUlRlbXBvcmFyeT4g
cmVzdWx0OwotICAgICAgICAgICAgc3RkOjpvcHRpb25hbDxHUFJSZWc+IHJlc3VsdFJlZzsKLSAg
ICAgICAgICAgIGlmICghcmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LmVtcGxhY2UodGhpcyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0UmVnID0gcmVzdWx0LT5ncHIo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwot
ICAgICAgICAgICAgRlBSUmVnIHRlbXBSZWcgPSB0ZW1wLmZwcigpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0KLSAg
ICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9y
YWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCB0ZW1wUmVn
KTsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJheU1vZGUoKS5pc091dE9mQm91bmRzU2FuZUNo
YWluKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0SXNVbmJveGVkKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAgICAgICAgICAgICAgICAg
ICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhOZWdhdGl2ZUluZGV4LCBKU1ZhbHVlUmVncygpLCBudWxscHRyLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHByb3BlcnR5UmVnLCBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91
YmxlIE5hTiA9IFBOYU47Ci0gICAgICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoVHJ1
c3RlZEltbVB0cigmTmFOKSwgdGVtcFJlZyk7Ci0gICAgICAgICAgICAgICAgICAgIGRvbmUubGlu
aygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBkb3VibGVSZXN1bHQodGVtcFJlZywgbm9k
ZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJveERvdWJsZSh0ZW1wUmVnLCAqcmVzdWx0UmVnKTsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byBkb25lID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMu
bGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0
aXZlSW5kZXgsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgcHJvcGVydHlSZWcsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KDApKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgKnJlc3VsdFJlZyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgICAg
ICBqc1ZhbHVlUmVzdWx0KCpyZXN1bHRSZWcsIG5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5hTih0ZW1wUmVnKSk7Ci0gICAgICAgICAgICAgICAgYm94RG91YmxlKHRlbXBS
ZWcsICpyZXN1bHRSZWcpOwotICAgICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAot
ICAgICAgICAgICAgICAgICAgICBzbG93UGF0aENhbGwoCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgKnJlc3VsdFJlZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9n
cmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIGJh
c2VSZWcsIHByb3BlcnR5UmVnKSk7Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdCgqcmVz
dWx0UmVnLCBub2RlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6Ci0gICAgICAgIGNhc2Ug
QXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6IHsKLSAgICAgICAgICAgIGlmIChub2RlLT5hcnJh
eU1vZGUoKS5pc0luQm91bmRzKCkpIHsKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVTdHJpY3RJ
bnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAxKSk7
Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU9wZXJhbmQgc3RvcmFnZSh0aGlzLCBtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDIpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEdQUlJl
ZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwotICAgICAgICAgICAgICAgIEdQUlJlZyBz
dG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdXRPZkJvdW5kcywgSlNW
YWx1ZVJlZ3MoKSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcs
IEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICAgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3Bl
cnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JP
ZmZzZXQoKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhMb2FkRnJvbUhvbGUsIEpTVmFsdWVSZWdzKCksIG51bGxwdHIsIG1faml0LmJyYW5jaElmRW1w
dHkocmVzdWx0LmdwcigpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSk7Ci0gICAgICAgICAgICBTcGVjdWxhdGVTdHJp
Y3RJbnQzMk9wZXJhbmQgcHJvcGVydHkodGhpcywgbV9ncmFwaC52YXJBcmdDaGlsZChub2RlLCAx
KSk7Ci0gICAgICAgICAgICBTdG9yYWdlT3BlcmFuZCBzdG9yYWdlKHRoaXMsIG1fZ3JhcGgudmFy
QXJnQ2hpbGQobm9kZSwgMikpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBHUFJSZWcgYmFz
ZVJlZyA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9w
ZXJ0eS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRSZWcgPSByZXN1bHQuZ3By
KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVu
Z3RoT2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHRSZWcpOwot
ICAgICAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZkVtcHR5KHJlc3VsdFJl
ZykpOwotICAgIAotICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAg
ICAgICAgc2xvd1BhdGhDYWxsKAotICAgICAgICAgICAgICAgICAgICBzbG93Q2FzZXMsIHRoaXMs
IG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0SW50LAotICAgICAgICAgICAgICAgICAgICByZXN1bHQu
Z3ByKCksIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBiYXNlUmVnLCBwcm9wZXJ0eVJlZykp
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZywgbm9k
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEFycmF5OjpT
dHJpbmc6Ci0gICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPblN0cmluZyhub2RlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6Ci0gICAg
ICAgICAgICBjb21waWxlR2V0QnlWYWxPbkRpcmVjdEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyhub2RlKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEFycmF5OjpJbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJy
YXk6OkludDE2QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkludDMyQXJyYXk6Ci0gICAgICAg
IGNhc2UgQXJyYXk6OlVpbnQ4QXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OlVpbnQ4Q2xhbXBl
ZEFycmF5OgotICAgICAgICBjYXNlIEFycmF5OjpVaW50MTZBcnJheToKLSAgICAgICAgY2FzZSBB
cnJheTo6VWludDMyQXJyYXk6Ci0gICAgICAgIGNhc2UgQXJyYXk6OkZsb2F0MzJBcnJheToKLSAg
ICAgICAgY2FzZSBBcnJheTo6RmxvYXQ2NEFycmF5OiB7Ci0gICAgICAgICAgICBUeXBlZEFycmF5
VHlwZSB0eXBlID0gbm9kZS0+YXJyYXlNb2RlKCkudHlwZWRBcnJheVR5cGUoKTsKLSAgICAgICAg
ICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgICAgICBjb21waWxlR2V0QnlWYWxPbklu
dFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkobm9kZSwgdHlwZSk7Ci0gICAgICAg
IH0gfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihy
ZXN1bHRSZWdzLCBwcmVmZXJyZWRGb3JtYXQpOworICAgICAgICB9KSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtMzU4MSw3ICszNjI1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gZmFsc2U7Ci0gICAgICAgIHNldEludFR5cGVk
QXJyYXlMb2FkUmVzdWx0KG5vZGUsIHJlc3VsdEdQUiwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKKyAg
ICAgICAgY29uc3RleHByIGJvb2wgc2hvdWxkQm94ID0gZmFsc2U7CisgICAgICAgIHNldEludFR5
cGVkQXJyYXlMb2FkUmVzdWx0KG5vZGUsIEpTVmFsdWVSZWdzKHJlc3VsdEdQUiksIHR5cGUsIGNh
blNwZWN1bGF0ZSwgc2hvdWxkQm94KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
QEAgLTUyNjksNTIgKzUzMTQsNTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBjb21waWxlU3RvcmVCYXJyaWVyKG5vZGUpOwogICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgR2V0RW51bWVyYWJsZUxlbmd0aDogewotICAg
ICAgICBjb21waWxlR2V0RW51bWVyYWJsZUxlbmd0aChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIGNhc2UgSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAg
IGNvbXBpbGVIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHkobm9kZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVQcm9wZXJ0eTogewotICAgICAgICBj
b21waWxlSGFzRW51bWVyYWJsZVByb3BlcnR5KG5vZGUpOworCisgICAgY2FzZSBIYXNJbmRleGVk
UHJvcGVydHk6IHsKKyAgICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIGluZGV4KHRo
aXMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMSkpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIFJldXNlLCBpbmRleCk7CisKKyAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQ
cm9wZXJ0eShub2RlLCBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHksIHNjb3BlZExhbWJkYTxz
dGQ6OnR1cGxlPEdQUlJlZywgR1BSUmVnPigpPihbJl0geyByZXR1cm4gc3RkOjptYWtlX3BhaXIo
aW5kZXguZ3ByKCksIHJlc3VsdC5ncHIoKSk7IH0pKTsKKyAgICAgICAgdW5ibGVzc2VkQm9vbGVh
blJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAg
Y2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzT3duU3Ry
dWN0dXJlUHJvcGVydHkobm9kZSk7CisKKyAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjog
eworICAgICAgICBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJhdG9yKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgY2FzZSBJblN0cnVjdHVyZVByb3BlcnR5OiB7Ci0gICAgICAgIGNv
bXBpbGVJblN0cnVjdHVyZVByb3BlcnR5KG5vZGUpOworCisgICAgY2FzZSBFbnVtZXJhdG9yTmV4
dFVwZGF0ZUluZGV4QW5kTW9kZTogeworICAgICAgICBjb21waWxlRW51bWVyYXRvck5leHRVcGRh
dGVJbmRleEFuZE1vZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhh
c0luZGV4ZWRQcm9wZXJ0eTogewotICAgICAgICBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KG5v
ZGUsIG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JO
ZXh0RXh0cmFjdE1vZGU6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1v
ZGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBjYXNlIEhhc0VudW1lcmFibGVJ
bmRleGVkUHJvcGVydHk6IHsKLSAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShub2Rl
LCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlSW5kZXhlZFByb3BlcnR5KTsKKworICAgIGNhc2UgRW51
bWVyYXRvck5leHRFeHRyYWN0SW5kZXg6IHsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0
RXh0cmFjdEluZGV4KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRE
aXJlY3RQbmFtZTogewotICAgICAgICBjb21waWxlR2V0RGlyZWN0UG5hbWUobm9kZSk7CisKKyAg
ICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlUHJvcGVydHlOYW1lOiB7CisgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZShub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQotICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOiB7Ci0gICAgICAgIGNvbXBp
bGVHZXRQcm9wZXJ0eUVudW1lcmF0b3Iobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JHZXRC
eVZhbDogeworICAgICAgICBjb21waWxlRW51bWVyYXRvckdldEJ5VmFsKG5vZGUpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgY2FzZSBHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU6Ci0g
ICAgY2FzZSBHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lOiB7Ci0gICAgICAgIGNvbXBpbGVHZXRF
bnVtZXJhdG9yUG5hbWUobm9kZSk7CisKKyAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOiB7Cisg
ICAgICAgIGNvbXBpbGVFbnVtZXJhdG9ySW5CeVZhbChub2RlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQotICAgIGNhc2UgVG9JbmRleFN0cmluZzogewotICAgICAgICBjb21waWxlVG9JbmRleFN0
cmluZyhub2RlKTsKKworICAgIGNhc2UgRW51bWVyYXRvckhhc093blByb3BlcnR5OiB7CisgICAg
ICAgIGNvbXBpbGVFbnVtZXJhdG9ySGFzT3duUHJvcGVydHkobm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KKwogICAgIGNhc2UgUHJvZmlsZVR5cGU6IHsKICAgICAgICAgY29tcGlsZVByb2Zp
bGVUeXBlKG5vZGUpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCmluZGV4IDExNzZkM2U3
YWYyODMzMmIwMzA3NDFiNGQ5YzQwZjBiZWYxZDAzOGIuLjVmNTFmMjI1MTA0ZjliYTUyMjY5OGRk
MDM2NzViZGQ1YmUyNzVmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcApAQCAtMjczLDYgKzI3Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgog
ICAgICAgICAgICAgICAgIGNhc2UgTnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseToKICAgICAg
ICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBjYXNlIEVudW1l
cmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAg
ICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bDoKQEAgLTM1Miw2ICszNTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKKyAgICAgICAgICAgICAgICBj
YXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgog
ICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBQdXRCeVZhbDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgKaW5kZXggMmUyZjA3ZGZjN2U4YzEzZGRiMGVkZDVhMmQwN2E1
ZDg3MmUxNzkwOC4uOWVkODcxMzNmNzcyMzBlMGUxYmQ0NDVmMzA2MjM0MzdmY2Q2MzQwNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgKQEAgLTExNCw2ICsxMTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9wZXJ0
eUluZGV4LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0
dXJlUHJvcGVydHlJbmRleCwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQ
cm9wZXJ0eUluZGV4T2Zmc2V0KCkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3JfaW5kZXhMZW5ndGgsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6aW5kZXhlZExlbmd0aE9m
ZnNldCgpKSBcCisgICAgbWFjcm8oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6bW9kZVNldE9mZnNldCgpKSBcCiAgICAgbWFjcm8oSlNS
b3BlU3RyaW5nX2ZsYWdzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmxhZ3MoKSkgXAogICAgIG1h
Y3JvKEpTUm9wZVN0cmluZ19sZW5ndGgsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkg
XAogICAgIG1hY3JvKEpTUm9wZVN0cmluZ19maWJlcjAsIEpTUm9wZVN0cmluZzo6b2Zmc2V0T2ZG
aWJlcjAoKSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCmluZGV4IGExYTVmZDI0NGNmMjExMDMyNjQxOTdhNzZhZTMwYzdmNjBmNzllNjQuLjAzZjg2
NTJjNmNiODJjNjIwMjBkMWU2NmJiNTlmNDY1OTFkODNlNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTI4NiwxOCArMjg2LDE1IEBAIGlu
bGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgSW50
NTJDb25zdGFudDoKICAgICBjYXNlIEJvb2xlYW5Ub051bWJlcjoKICAgICBjYXNlIEhhc0luZGV4
ZWRQcm9wZXJ0eToKLSAgICBjYXNlIEhhc0VudW1lcmFibGVJbmRleGVkUHJvcGVydHk6Ci0gICAg
Y2FzZSBIYXNFbnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNFbnVtZXJh
YmxlUHJvcGVydHk6Ci0gICAgY2FzZSBIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eToKLSAgICBjYXNl
IEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgY2FzZSBHZXREaXJlY3RQbmFtZToKLSAgICBjYXNl
IEdldEVudW1lcmFibGVMZW5ndGg6CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdl
OgogICAgIGNhc2UgR2V0UHJvcGVydHlFbnVtZXJhdG9yOgotICAgIGNhc2UgR2V0RW51bWVyYXRv
clN0cnVjdHVyZVBuYW1lOgotICAgIGNhc2UgR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZToKLSAg
ICBjYXNlIFRvSW5kZXhTdHJpbmc6CisgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZUluZGV4
QW5kTW9kZToKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGU6CisgICAgY2FzZSBF
bnVtZXJhdG9yTmV4dEV4dHJhY3RJbmRleDoKKyAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRl
UHJvcGVydHlOYW1lOgorICAgIGNhc2UgRW51bWVyYXRvckdldEJ5VmFsOgorICAgIGNhc2UgRW51
bWVyYXRvckluQnlWYWw6CisgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CiAgICAg
Y2FzZSBCb3R0b21WYWx1ZToKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2FzZSBQ
aGFudG9tTmV3RnVuY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKaW5kZXggNmZlMjlkOTlmYTQ0MTQ5YzE0NmIyMWFiNDEwNGM0MDgwMzY5ZjM3
MS4uOWY4YmZkOTQzOTZmNmIyNzQwYzY0YWM1OWYxNjQ5NTU2NjUxMWYyNyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMTUyMyw0MCArMTUy
MywzMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgY29tcGlsZVN0b3JlQmFycmllcigpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSGFzSW5kZXhlZFByb3BlcnR5OgotICAgICAg
ICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHkpOworICAgICAgICAgICAgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSgpOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eToKLSAg
ICAgICAgICAgIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkob3BlcmF0aW9uSGFzRW51bWVyYWJs
ZUluZGV4ZWRQcm9wZXJ0eSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBIYXNF
bnVtZXJhYmxlU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzRW51bWVy
YWJsZVN0cnVjdHVyZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBIYXNFbnVtZXJhYmxlUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSGFzRW51bWVyYWJs
ZVByb3BlcnR5KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBIYXNPd25TdHJ1
Y3R1cmVQcm9wZXJ0eToKLSAgICAgICAgICAgIGNvbXBpbGVIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0
eSgpOworICAgICAgICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRQcm9wZXJ0eUVudW1lcmF0b3IoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEluU3RydWN0dXJlUHJvcGVydHk6Ci0gICAgICAgICAgICBjb21waWxlSW5TdHJ1Y3R1
cmVQcm9wZXJ0eSgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRN
b2RlOgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0VXBkYXRlSW5kZXhBbmRNb2Rl
KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKLSAg
ICAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RQbmFtZSgpOworICAgICAgICBjYXNlIEVudW1lcmF0
b3JOZXh0RXh0cmFjdEluZGV4OgorICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JOZXh0RXh0
cmFjdEluZGV4KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHZXRFbnVtZXJh
YmxlTGVuZ3RoOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoKTsKKyAg
ICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlOgorICAgICAgICAgICAgY29tcGls
ZUVudW1lcmF0b3JOZXh0RXh0cmFjdE1vZGUoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEdldFByb3BlcnR5RW51bWVyYXRvcjoKLSAgICAgICAgICAgIGNvbXBpbGVHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3Bl
cnR5TmFtZToKKyAgICAgICAgICAgIGNvbXBpbGVFbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5
TmFtZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0RW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lOgotICAgICAgICAgICAgY29tcGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
bmFtZSgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JHZXRCeVZhbDoKKyAgICAgICAgICAgIGNv
bXBpbGVFbnVtZXJhdG9yR2V0QnlWYWwoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWU6Ci0gICAgICAgICAgICBjb21waWxlR2V0RW51
bWVyYXRvckdlbmVyaWNQbmFtZSgpOworICAgICAgICBjYXNlIEVudW1lcmF0b3JJbkJ5VmFsOgor
ICAgICAgICAgICAgY29tcGlsZUVudW1lcmF0b3JJbkJ5VmFsKCk7CiAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBUb0luZGV4U3RyaW5nOgotICAgICAgICAgICAgY29tcGlsZVRvSW5k
ZXhTdHJpbmcoKTsKKyAgICAgICAgY2FzZSBFbnVtZXJhdG9ySGFzT3duUHJvcGVydHk6CisgICAg
ICAgICAgICBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAgICAg
IGNvbXBpbGVDaGVja1N0cnVjdHVyZUltbWVkaWF0ZSgpOwpAQCAtNTAyMCw3ICs1MDExLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgLy8gd2UgZG9taW5hdGUgdGhlbS4KICAgICB9CiAgICAgCi0gICAg
dm9pZCBjb21waWxlR2V0QnlWYWwoKQorICAgIExWYWx1ZSBjb21waWxlR2V0QnlWYWxJbXBsKCkK
ICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmds
b2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIHN3aXRjaCAobV9ub2Rl
LT5hcnJheU1vZGUoKS50eXBlKCkpIHsKQEAgLTUwNDcsOCArNTAzOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgdG8ga2VlcCBjb250
ZW50IGluIHN0b3JhZ2UgYWxpdmUuCiAgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlN
b2RlKCkudHlwZSgpID09IEFycmF5OjpDb250aWd1b3VzKQogICAgICAgICAgICAgICAgICAgICBl
bnN1cmVTdGlsbEFsaXZlSGVyZShiYXNlKTsKLSAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHJl
c3VsdCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGZhc3RDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKQEAgLTUwODAsOCArNTA3MCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAgYmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4g
c3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUo
KSA9PSBBcnJheTo6Q29udGlndW91cykKICAgICAgICAgICAgICAgICBlbnN1cmVTdGlsbEFsaXZl
SGVyZShiYXNlKTsKLSAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZTogewpAQCAtNTEwMCw4
ICs1MDg5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIExvYWRGcm9tSG9s
ZSwgbm9WYWx1ZSgpLCBudWxscHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQuZG91
YmxlTm90RXF1YWxPclVub3JkZXJlZChyZXN1bHQsIHJlc3VsdCkpOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGJvb2wgcmVzdWx0SXNVbmJveGVkID0gbV9ub2RlLT5hcnJheU1vZGUoKS5p
c091dE9mQm91bmRzU2FuZUNoYWluKCkgJiYgIShtX25vZGUtPmZsYWdzKCkgJiBOb2RlQnl0ZWNv
ZGVVc2VzQXNPdGhlcik7CkBAIC01MTQxLDE4ICs1MTMwLDE2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OwogICAgICAgICAgICAgaWYgKHJlc3VsdElzVW5ib3hlZCkKLSAgICAgICAgICAgICAgICBzZXRE
b3VibGUobV9vdXQucGhpKERvdWJsZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBm
YXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fb3V0LnBoaShEb3VibGUsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwor
CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVz
dWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgQXJyYXk6OlVuZGVjaWRlZDogewogICAg
ICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDEpKTsKIAogICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1ZhbHVlKCks
IG1fbm9kZSwgbV9vdXQubGVzc1RoYW4oaW5kZXgsIG1fb3V0LmludDMyWmVybykpOwotICAgICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6OlZhbHVlVW5kZWZpbmVk
KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJ
bnQ2NChKU1ZhbHVlOjpWYWx1ZVVuZGVmaW5lZCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIEFycmF5OjpEaXJlY3RBcmd1bWVudHM6IHsKQEAgLTUxNjksOCArNTE1Niw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE91dE9mQm91bmRzLCBub1Zh
bHVlKCksIG51bGxwdHIsIGlzT3V0T2ZCb3VuZHMpOwogICAgICAgICAgICAgICAgIFR5cGVkUG9p
bnRlciBhZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAogICAgICAgICAgICAgICAgICAgICBtX2hl
YXBzLkRpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBiYXNlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4
KSk7Ci0gICAgICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQoYWRkcmVzcykpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQubG9h
ZDY0KGFkZHJlc3MpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBMQmFzaWNCbG9jayBp
bkJvdW5kcyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC01MTkyLDggKzUxNzgsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNldEpT
VmFsdWUobV9vdXQucGhpKEludDY0LCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDY0LCBmYXN0UmVz
dWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
QXJyYXk6OlNjb3BlZEFyZ3VtZW50czogewpAQCAtNTI0Niw4ICs1MjMxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
ICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93UmVz
dWx0KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhp
KEludDY0LCBuYW1lZFJlc3VsdCwgb3ZlcmZsb3dSZXN1bHQpOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6QmlnSW50NjRBcnJheToKQEAgLTUyNTYsMjQgKzUy
NDAsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc2xvd0dldEJ5VmFs
LmNvbnRhaW5zKG1fbm9kZSkpIHsKICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDApLnVzZUtpbmQoKSA9PSBPYmplY3RVc2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKS51c2VLaW5kKCkgPT0gU3Ry
aW5nVXNlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsT2JqZWN0U3RyaW5nLCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdCht
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpLCBsb3dTdHJpbmcobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIDEpKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxvd09iamVjdChtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMCkpLCBsb3dTdHJpbmcobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDEpLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZtQ2FsbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnQ2NCwgb3Bl
cmF0aW9uR2V0QnlWYWxPYmplY3RTeW1ib2wsIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAwKSksIGxvd1N5bWJvbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG93T2JqZWN0KG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSksIGxvd1N5bWJv
bChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxs
KAorICAgICAgICAgICAgICAgIHJldHVybiB2bUNhbGwoCiAgICAgICAgICAgICAgICAgICAgIElu
dDY0LCBvcGVyYXRpb25HZXRCeVZhbCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAg
ICAgICAgICAgICAgICAgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkp
LCBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSkpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGxvd0pTVmFsdWUobV9ncmFwaC52
YXJBcmdDaGlsZChtX25vZGUsIDApKSwgbG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1f
bm9kZSwgMSkpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1f
bm9kZTsKQEAgLTUzNzMsOCArNTM1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfSk7
CiAgICAgICAgICAgICB9KTsKIAotICAgICAgICAgICAgc2V0SlNWYWx1ZShwYXRjaHBvaW50KTsK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBwYXRjaHBvaW50OwogICAg
ICAgICB9CiAKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOgpAQCAtNTM5MCw4ICs1
MzcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xl
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwogICAgICAgICAg
ICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHRvIGtlZXAgY29udGVudCBpbiBz
dG9yYWdlIGFsaXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2Up
OwotICAgICAgICAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKLSAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwpAQCAt
NTQxNywxMyArNTM5NiwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGtlZXAg
YmFzZSBhbGl2ZSB0byBrZWVwIGNvbnRlbnQgaW4gc3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAg
IGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAgICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIGZhc3RSZXN1bHQsIHNsb3dS
ZXN1bHQpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U3Ry
aW5nOiB7Ci0gICAgICAgICAgICBjb21waWxlU3RyaW5nQ2hhckF0KCk7Ci0gICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gY29tcGlsZVN0cmluZ0NoYXJBdEltcGwoKTsKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJyYXk6OkludDhBcnJheToKQEAg
LTU0NDgsOSArNTQyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBsb2FkRnJvbUludFR5cGVkQXJyYXkocG9pbnRlciwgdHlwZSk7CiAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8ga2VlcCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMg
c3RvcmFnZSBhbGl2ZS4KICAgICAgICAgICAgICAgICAgICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUo
YmFzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBib29sIGNhblNwZWN1bGF0ZSA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KHJl
c3VsdCwgdHlwZSwgY2FuU3BlY3VsYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKQEAgLTU0
NjksOCArNTQ0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBrZWVwIGJhc2UgYWxpdmUgc2luY2UgdGhhdCBrZWVwcyBzdG9yYWdl
IGFsaXZlLgogICAgICAgICAgICAgICAgIGVuc3VyZVN0aWxsQWxpdmVIZXJlKGJhc2UpOwotICAg
ICAgICAgICAgICAgIHNldERvdWJsZShyZXN1bHQpOwotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAKQEAgLTU0ODAsOCArNTQ1NCwyNCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpT
ZWxlY3RVc2luZ1ByZWRpY3Rpb25zOgogICAgICAgICBjYXNlIEFycmF5OjpVbnByb2ZpbGVkOgog
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgY29tcGlsZUdldEJ5VmFsKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBjb21w
aWxlR2V0QnlWYWxJbXBsKCk7CisgICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBtX25vZGUt
PmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBlKCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkg
eworICAgICAgICAgICAgY29uc3RleHByIGJvb2wgY2FuU3BlY3VsYXRlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHNldEludFR5cGVkQXJyYXlMb2FkUmVzdWx0KHJlc3VsdCwgdHlwZSwgY2FuU3BlY3Vs
YXRlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1
bHQtPnR5cGUoKSA9PSBEb3VibGUpCisgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIGNvbXBpbGVHZXRNeUFyZ3VtZW50QnlWYWwoKQpAQCAtODU3MSw3ICs4NTYxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGZhc3RSZXN1
bHQsIGVtcHR5UmVzdWx0LCBzbG93UmVzdWx0KSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29t
cGlsZVN0cmluZ0NoYXJBdCgpCisgICAgTFZhbHVlIGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKCkK
ICAgICB7CiAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93U3RyaW5nKG1fZ3JhcGguY2hpbGQobV9u
b2RlLCAwKSk7CiAgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGguY2hpbGQo
bV9ub2RlLCAxKSk7CkBAIC04Njc5LDcgKzg2NjksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIC8vIFdlIGhhdmUg
dG8ga2VlcCBiYXNlIGFsaXZlIHNpbmNlIHRoYXQga2VlcHMgc3RvcmFnZSBhbGl2ZS4KICAgICAg
ICAgZW5zdXJlU3RpbGxBbGl2ZUhlcmUoYmFzZSk7Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQu
cGhpKEludDY0LCByZXN1bHRzKSk7CisgICAgICAgIHJldHVybiBtX291dC5waGkoSW50NjQsIHJl
c3VsdHMpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZVN0cmluZ0NoYXJBdCgpCisgICAgewor
ICAgICAgICBzZXRKU1ZhbHVlKGNvbXBpbGVTdHJpbmdDaGFyQXRJbXBsKCkpOwogICAgIH0KICAg
ICAKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdDaGFyQ29kZUF0KCkKQEAgLTEyOTA2LDE3ICsxMjkw
MSwxNiBAQCBwcml2YXRlOgogICAgICAgICBlbWl0U3RvcmVCYXJyaWVyKGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksIG1fbm9kZS0+b3AoKSA9PSBGZW5jZWRTdG9yZUJhcnJpZXIpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoU19KSVRPcGVyYXRpb25f
R0NaIHNsb3dQYXRoT3BlcmF0aW9uKQorICAgIExWYWx1ZSBjb21waWxlSGFzSW5kZXhlZFByb3Bl
cnR5SW1wbChMVmFsdWUgaW5kZXgsIFNfSklUT3BlcmF0aW9uX0dDWiBzbG93UGF0aE9wZXJhdGlv
bikKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIExWYWx1ZSBiYXNl
ID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwotICAgICAgICBMVmFs
dWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMSkpOwogICAg
ICAgICBBcnJheU1vZGUgbW9kZSA9IG1fbm9kZS0+YXJyYXlNb2RlKCk7CiAKICAgICAgICAgc3dp
dGNoIChtX25vZGUtPmFycmF5TW9kZSgpLnR5cGUoKSkgewogICAgICAgICBjYXNlIEFycmF5OjpJ
bnQzMjoKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewotICAgICAgICAgICAgTFZh
bHVlIHN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7
CisgICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0b3JhZ2UobV9ncmFwaC52YXJBcmdD
aGlsZChtX25vZGUsIG1fbm9kZS0+c3RvcmFnZUNoaWxkSW5kZXgoKSkpOwogCiAgICAgICAgICAg
ICBJbmRleGVkQWJzdHJhY3RIZWFwJiBoZWFwID0gbW9kZS50eXBlKCkgPT0gQXJyYXk6OkludDMy
ID8KICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hl
YXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllczsKQEAgLTEyOTUxLDExICsxMjk0NSwxMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
ICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1
bHQpKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGko
SW50MzIsIGNoZWNrSG9sZVJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBBcnJheTo6RG91YmxlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0
b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2Rl
LT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEluZGV4
ZWRBYnN0cmFjdEhlYXAmIGhlYXAgPSBtX2hlYXBzLmluZGV4ZWREb3VibGVQcm9wZXJ0aWVzOwog
ICAgICAgICAgICAgCkBAIC0xMjk4OSwxMiArMTI5ODIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRC
b29sZWFuKG1fb3V0LnBoaShJbnQzMiwgY2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KSk7Ci0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbV9vdXQucGhpKEludDMyLCBj
aGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBB
cnJheTo6QXJyYXlTdG9yYWdlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IGxvd1N0
b3JhZ2UobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDIpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBzdG9yYWdlID0gbG93U3RvcmFnZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgbV9ub2Rl
LT5zdG9yYWdlQ2hpbGRJbmRleCgpKSk7CiAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dD
YXNlID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0xMzAyNiwxOTYgKzEzMDE4LDMyNCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCiAgICAgICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIHNl
dEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBjaGVja0hvbGVSZXN1bHQsIHNsb3dSZXN1bHQpKTsK
LSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShJbnQzMiwg
Y2hlY2tIb2xlUmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogCiAgICAgICAgIGRlZmF1
bHQ6IHsKLSAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQubm90WmVybzY0KHZtQ2FsbChJbnQ2
NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIGJhc2UsIGlu
ZGV4KSkpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gbV9vdXQubm90
WmVybzY0KHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhPcGVyYXRpb24sIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGJhc2UsIGluZGV4KSk7CiAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAot
ICAgIHZvaWQgY29tcGlsZUhhc0VudW1lcmFibGVQcm9wZXJ0eSgpCisgICAgdm9pZCBjb21waWxl
SGFzSW5kZXhlZFByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0lu
dDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7CisgICAgICAgIHNldEJvb2xlYW4o
Y29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwoaW5kZXgsIG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eSkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldFByb3BlcnR5RW51bWVyYXRv
cigpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9vcmlnaW4uc2VtYW50aWMpOwotICAgICAgICBMVmFsdWUgYmFz
ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIExWYWx1ZSBwcm9wZXJ0
eSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDIoKSk7Ci0gICAgICAgIHNldEpTVmFsdWUodm1DYWxs
KEludDY0LCBvcGVyYXRpb25IYXNFbnVtZXJhYmxlUHJvcGVydHksIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGJhc2UsIHByb3BlcnR5KSk7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBDZWxsVXNlKQorICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50
NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51
bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKSkpOwogICAgIH0KIAotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBTbG93UGF0aENhbGw+
Ci0gICAgdm9pZCBjb21waWxlSGFzU3RydWN0dXJlUHJvcGVydHlJbXBsKExWYWx1ZSBiYXNlLCBT
bG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKQorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JOZXh0
VXBkYXRlSW5kZXhBbmRNb2RlKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIExWYWx1ZSBwcm9wZXJ0eSA9IGxvd1N0cmluZyhtX25vZGUtPmNoaWxkMigpKTsKLSAg
ICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICBMVmFsdWUgaW5kZXggPSBsb3dJbnQzMihtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwg
MSkpOworICAgICAgICBMVmFsdWUgbW9kZSA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQo
bV9ub2RlLCAyKSk7CisgICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93Q2VsbChtX2dyYXBo
LnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENh
c2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb3JyZWN0U3RydWN0
dXJlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBt
X291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291
dC5uZXdCbG9jaygpOworICAgICAgICBpZiAobV9ub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9
PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSB7CisgICAgICAgICAgICBz
cGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBtX291dC5ub3RaZXJvMzIobV9v
dXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2Vu
ZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSkpOwogCi0gICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwo
YmFzZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksCi0gICAgICAgICAgICB1c3VhbGx5
KGlzQ2VsbENhc2UpLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGluY3JlbWVudCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBj
aGVja0hhc1Byb3BlcnR5ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBjb3JyZWN0U3RydWN0dXJl
KTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hv
cihpbmRleCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbml0aWFsSW5kZXhGb3JIYXNQ
cm9wZXJ0eSA9IG1fb3V0LmFuY2hvcihpbmRleCk7CisgICAgICAgICAgICBtX291dC5icmFuY2go
bV9vdXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShjaGVja0hhc1Byb3BlcnR5KSwgdW5zdXJlKGlu
Y3JlbWVudCkpOwogCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5ub3RFcXVhbCgKLSAgICAg
ICAgICAgIG1fb3V0LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCksCi0g
ICAgICAgICAgICBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSwKLSAgICAgICAgICAgIHJhcmVseShzbG93
UGF0aCksIHVzdWFsbHkoY29ycmVjdFN0cnVjdHVyZSkpOworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaW5jcmVtZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmRleFBoaSA9IG1fb3V0LnBo
aShJbnQzMiwgaW5pdGlhbEluZGV4KTsKKyAgICAgICAgICAgIExWYWx1ZSBpbmNyZW1lbnRlZElu
ZGV4ID0gbV9vdXQuYWRkKGluZGV4UGhpLCBtX291dC5pbnQzMk9uZSk7CisgICAgICAgICAgICBW
YWx1ZUZyb21CbG9jayBpbmNyZW1lbnRlZEluZGV4UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGluY3Jl
bWVudGVkSW5kZXgpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmluYWxJbmNyZW1lbnRl
ZEluZGV4ID0gbV9vdXQuYW5jaG9yKGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0Lmxlc3NUaGFuKGluY3JlbWVudGVkSW5kZXgsIG1fb3V0LmxvYWQzMihl
bnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9pbmRleExlbmd0aCkp
LCB1bnN1cmUoY2hlY2tIYXNQcm9wZXJ0eSksIHVuc3VyZShjb250aW51YXRpb24pKTsKIAotICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb3JyZWN0U3RydWN0dXJlLCBzbG93UGF0aCk7Ci0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIGNvcnJlY3RTdHJ1Y3R1cmVSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuYm9vbGVhblRydWUpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICBtX291dC5hcHBlbmRUbyhjaGVja0hhc1Byb3BlcnR5KTsKKyAgICAgICAgICAgIExW
YWx1ZSBwcm9wZXJ0eUluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbml0aWFsSW5kZXhGb3JIYXNQ
cm9wZXJ0eSwgaW5jcmVtZW50ZWRJbmRleFJlc3VsdCk7CisgICAgICAgICAgICBtX291dC5hZGRJ
bmNvbWluZ1RvUGhpKGluZGV4UGhpLCBtX291dC5hbmNob3IocHJvcGVydHlJbmRleCkpOworICAg
ICAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmluYWxQcm9wZXJ0eUluZGV4ID0gbV9vdXQuYW5jaG9y
KHByb3BlcnR5SW5kZXgpOworICAgICAgICAgICAgTFZhbHVlIGhhc1Byb3BlcnR5ID0gY29tcGls
ZUhhc0luZGV4ZWRQcm9wZXJ0eUltcGwocHJvcGVydHlJbmRleCwgb3BlcmF0aW9uSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaGFzUHJvcGVy
dHksIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CiAKLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQu
ZXF1YWwoCi0gICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSksIAotICAgICAgICAgICAgICAgIHZtQ2FsbChJbnQ2NCwgc2xvd1Bh
dGhDYWxsLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBwcm9wZXJ0eSkpKTsKLSAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIExWYWx1ZSBmaW5hbEluZGV4ID0gbV9vdXQu
cGhpKEludDMyLCBmaW5hbEluY3JlbWVudGVkSW5kZXgsIGZpbmFsUHJvcGVydHlJbmRleCk7Cisg
ICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmJpdE9yKG1fb3V0Lnplcm9FeHQoZmluYWxJbmRl
eCwgSW50NjQpLCBtX291dC5jb25zdEludDY0KEpTVmFsdWU6Ok51bWJlclRhZyB8IHN0YXRpY19j
YXN0PHVpbnQ2NF90PihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSA8PCAz
MikpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICBzZXRCb29sZWFuKG1fb3V0
LnBoaShJbnQzMiwgY29ycmVjdFN0cnVjdHVyZVJlc3VsdCwgc2xvd1BhdGhSZXN1bHQpKTsKLSAg
ICB9CisgICAgICAgIEVkZ2UmIGJhc2VFZGdlID0gbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDApOworICAgICAgICBpZiAobV9ub2RlLT5lbnVtZXJhdG9yTWV0YWRhdGEoKSA9PSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgJiYgYmFzZUVkZ2UudXNlS2luZCgp
ID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChiYXNlRWRn
ZSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbV9ub2RlLCBt
X291dC5ub3RFcXVhbChtX291dC5sb2FkMzIoYmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
SUQpLCBtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3JfY2FjaGVkU3RydWN0dXJlSUQpKSk7CiAKLSAgICB2b2lkIGNvbXBpbGVIYXNFbnVtZXJh
YmxlU3RydWN0dXJlUHJvcGVydHkoKQotICAgIHsKLSAgICAgICAgY29tcGlsZUhhc1N0cnVjdHVy
ZVByb3BlcnR5SW1wbChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBvcGVyYXRpb25IYXNF
bnVtZXJhYmxlUHJvcGVydHkpOworICAgICAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBub1Zh
bHVlKCksIG1fbm9kZSwgbV9vdXQubm90RXF1YWwobV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1f
aGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX21vZGVTZXQpLCBtX291dC5jb25zdEludDMy
KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKKworICAgICAg
ICAgICAgTEJhc2ljQmxvY2sgaW5jcmVtZW50ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGluaXRpYWxJbmRleCA9IG1fb3V0LmFuY2hvcihpbmRleCk7
CisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvMzIobW9kZSksIHVuc3VyZShj
b250aW51YXRpb24pLCB1bnN1cmUoaW5jcmVtZW50KSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGluY3JlbWVudCk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmNyZW1lbnRl
ZEluZGV4ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJPbmUpKTsK
KyAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIGluZGV4ID0gbV9vdXQucGhp
KEludDMyLCBpbml0aWFsSW5kZXgsIGluY3JlbWVudGVkSW5kZXgpOworICAgICAgICAgICAgc2V0
SlNWYWx1ZShtX291dC5iaXRPcihtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6RG91YmxlRW5jb2RlT2Zmc2V0IHwgc3RhdGljX2Nhc3Q8dWludDY0
X3Q+KEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkgPDwgMzIpKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBMVmFsdWUgYmFzZSA9
IGxvd0pTVmFsdWUoYmFzZUVkZ2UpOworICAgICAgICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwg
b3BlcmF0aW9uRW51bWVyYXRvck5leHRVcGRhdGVJbmRleEFuZE1vZGUsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBtb2RlLCBlbnVtZXJhdG9yKSk7CiAgICAgfQogCi0g
ICAgdm9pZCBjb21waWxlSGFzT3duU3RydWN0dXJlUHJvcGVydHkoKQorICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JOZXh0RXh0cmFjdEluZGV4KCkKICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNT
dHJ1Y3R1cmVQcm9wZXJ0eUltcGwobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9u
SGFzT3duU3RydWN0dXJlUHJvcGVydHkpOworICAgICAgICBMVmFsdWUgYm94ZWRQYWlyID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBzZXRJbnQzMihtX291dC5jYXN0
VG9JbnQzMihib3hlZFBhaXIpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVJblN0cnVjdHVy
ZVByb3BlcnR5KCkKKyAgICB2b2lkIGNvbXBpbGVFbnVtZXJhdG9yTmV4dEV4dHJhY3RNb2RlKCkK
ICAgICB7Ci0gICAgICAgIGNvbXBpbGVIYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwobG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSwgb3BlcmF0aW9uSW5TdHJ1Y3R1cmVQcm9wZXJ0eSk7CisgICAgICAg
IExWYWx1ZSBib3hlZFBhaXIgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAg
ICAgIExWYWx1ZSBoaWdoQml0cyA9IG1fb3V0LmNhc3RUb0ludDMyKG1fb3V0LmxTaHIoYm94ZWRQ
YWlyLCBtX291dC5jb25zdEludDMyKDMyKSkpOworICAgICAgICBzZXRJbnQzMihtX291dC5iaXRB
bmQoaGlnaEJpdHMsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpl
bnVtZXJhdGlvbk1vZGVNYXNrKSkpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUdldERpcmVj
dFBuYW1lKCkKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IGhhdmUgYSBtZXRob2Qg
b2YgdmFsdWUgcmVjb3ZlcnkgZm9yIHRoaXMgbm9kZSBzaW5jZSBpdCdzICJlZmZlY3QiIGZyZWUg
YnV0IGFsd2F5cyBsaXZlIGluIGJ5dGVjb2RlLgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JO
ZXh0VXBkYXRlUHJvcGVydHlOYW1lKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7
Ci0gICAgICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9k
ZSwgMCkpOwotICAgICAgICBMVmFsdWUgcHJvcGVydHkgPSBsb3dDZWxsKG1fZ3JhcGgudmFyQXJn
Q2hpbGQobV9ub2RlLCAxKSk7Ci0gICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKSk7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0g
bG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMykpOworICAgICAgICBMVmFsdWUg
aW5kZXggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTFZhbHVlIG1vZGUg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3Ig
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQzKCkpOwogCi0gICAgICAgIExCYXNpY0Jsb2NrIGNoZWNr
T2Zmc2V0ID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgaW5saW5lTG9h
ZCA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIG91dE9mTGluZUxvYWQg
PSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0
Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG9wZXJhdGlvbkJsb2NrID0gbnVsbHB0cjsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbnVsbHB0cjsKIAotICAgICAgICBt
X291dC5icmFuY2gobV9vdXQubm90RXF1YWwoCi0gICAgICAgICAgICBtX291dC5sb2FkMzIoYmFz
ZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpLAotICAgICAgICAgICAgbV9vdXQubG9hZDMy
KGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFN0cnVj
dHVyZUlEKSksCi0gICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNoZWNrT2Zm
c2V0KSk7CisgICAgICAgIFZlY3RvcjxWYWx1ZUZyb21CbG9jaywgMz4gcmVzdWx0czsKKyAgICAg
ICAgT3B0aW9uU2V0IHNlZW5Nb2RlcyA9IG1fbm9kZS0+ZW51bWVyYXRvck1ldGFkYXRhKCk7CiAK
LSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhjaGVja09mZnNl
dCwgaW5saW5lTG9hZCk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5hYm92ZU9yRXF1YWwo
aW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpLAotICAgICAgICAgICAgdW5zdXJlKG91dE9m
TGluZUxvYWQpLCB1bnN1cmUoaW5saW5lTG9hZCkpOworICAgICAgICBpZiAoc2Vlbk1vZGVzLmNv
bnRhaW5zQW55KHsgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlIH0pKSB7CisgICAgICAgICAgICBM
QmFzaWNCbG9jayBjaGVja0luZGV4ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IG91dE9mQm91bmRzQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgbG9hZFByb3BlcnR5TmFtZUJsb2NrID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
ICAgIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaW5saW5lTG9hZCwgb3V0T2ZMaW5lTG9hZCk7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGlubGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAgICAgICAgICAgIG1fb3V0LmxvYWQ2NCht
X291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIAotICAgICAg
ICAgICAgICAgIGJhc2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgU2NhbGVFaWdodCwg
SlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSkpOwotICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICBpZiAoc2Vlbk1vZGVzLmNvbnRhaW5zKEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUpKSB7CisgICAgICAgICAgICAgICAgY2hl
Y2tJbmRleCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgb3BlcmF0aW9uQmxv
Y2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291
dC50ZXN0SXNaZXJvMzIobW9kZSwgbV9vdXQuY29uc3RJbnQzMihKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OkluZGV4ZWRNb2RlKSksIHVuc3VyZShjaGVja0luZGV4KSwgdW5zdXJlKG9wZXJhdGlv
bkJsb2NrKSk7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3V0T2ZM
aW5lTG9hZCwgc2xvd0Nhc2UpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQ
dHIoYmFzZSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpOwotICAgICAgICBMVmFsdWUgcmVh
bEluZGV4ID0gbV9vdXQuc2lnbkV4dDMyVG82NCgKLSAgICAgICAgICAgIG1fb3V0Lm5lZyhtX291
dC5zdWIoaW5kZXgsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBzLkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcl9jYWNoZWRJbmxpbmVDYXBhY2l0eSkpKSk7Ci0gICAgICAgIGludDMyX3Qg
b2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0
ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0g
ICAgICAgIFZhbHVlRnJvbUJsb2NrIG91dE9mTGluZVJlc3VsdCA9IG1fb3V0LmFuY2hvcigKLSAg
ICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVz
LmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIHJlYWxJbmRleCwgU2NhbGVFaWdodCwgb2Zmc2V0T2ZG
aXJzdFByb3BlcnR5KSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGNoZWNrSW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5kZXgpOworICAgICAgICAgICAgICAgIExWYWx1
ZSBvdXRPZkJvdW5kcyA9IG1fb3V0LmFib3ZlT3JFcXVhbChpbmRleCwgbV9vdXQubG9hZDMyKGVu
dW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2VuZEdlbmVyaWNQcm9w
ZXJ0eUluZGV4KSk7CisgICAgICAgICAgICAgICAgbV9vdXQuYnJhbmNoKG91dE9mQm91bmRzLCB1
bnN1cmUob3V0T2ZCb3VuZHNCbG9jayksIHVuc3VyZShsb2FkUHJvcGVydHlOYW1lQmxvY2spKTsK
KyAgICAgICAgICAgIH0KIAotICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0Nhc2VSZXN1bHQgPSBtX291dC5h
bmNob3IoCi0gICAgICAgICAgICB2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldEJ5VmFsLCB3ZWFr
UG9pbnRlcihnbG9iYWxPYmplY3QpLCBiYXNlLCBwcm9wZXJ0eSkpOwotICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9vdXQu
YXBwZW5kVG8ob3V0T2ZCb3VuZHNCbG9jayk7CisgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBl
bmQobV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KSkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAg
ICAgICB9CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
Ci0gICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBpbmxpbmVSZXN1bHQsIG91dE9m
TGluZVJlc3VsdCwgc2xvd0Nhc2VSZXN1bHQpKTsKLSAgICB9CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9hZFByb3BlcnR5TmFtZUJsb2NrKTsKKyAgICAg
ICAgICAgICAgICBMVmFsdWUgbmFtZXNWZWN0b3IgPSBtX291dC5sb2FkUHRyKGVudW1lcmF0b3Is
IG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2NhY2hlZFByb3BlcnR5TmFtZXNWZWN0
b3IpOworICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihtX291dC56
ZXJvRXh0UHRyKG1fb3V0LmxvYWRQdHIobV9vdXQuYmFzZUluZGV4KG1faGVhcHMuV3JpdGVCYXJy
aWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLmF0QW55SW5kZXgoKSwgbmFtZXNWZWN0b3IsIG1fb3V0
Lnplcm9FeHQoaW5kZXgsIEludDY0KSwgU2NhbGVQdHIpKSkpKTsKKyAgICAgICAgICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAg
IHZvaWQgY29tcGlsZUdldEVudW1lcmFibGVMZW5ndGgoKQotICAgIHsKLSAgICAgICAgTFZhbHVl
IGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBzZXRJbnQz
MihtX291dC5sb2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3JfaW5kZXhMZW5ndGgpKTsKLSAgICB9CisgICAgICAgIGlmIChzZWVuTW9kZXMuY29udGFpbnMo
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkpIHsKKyAgICAgICAgICAgIGlm
IChvcGVyYXRpb25CbG9jaykKKyAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhvcGVyYXRp
b25CbG9jayk7CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5hbmNob3Iodm1DYWxs
KEludDY0LCBvcGVyYXRpb25FbnVtZXJhdG9yTmV4dFVwZGF0ZVByb3BlcnR5TmFtZSwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgaW5kZXgsIG1vZGUsIGVudW1lcmF0b3IpKSk7CisgICAgICAg
ICAgICBpZiAoY29udGludWF0aW9uKQorICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKyAgICAgICAgfQogCi0gICAgdm9pZCBjb21waWxlR2V0UHJvcGVydHlFbnVtZXJh
dG9yKCkKLSAgICB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0gICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKQotICAgICAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3BlcnR5RW51bWVyYXRvckNlbGwsIHdlYWtQ
b2ludGVyKGdsb2JhbE9iamVjdCksIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdl
dFByb3BlcnR5RW51bWVyYXRvciwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKSkpOworICAgICAgICBpZiAoY29udGludWF0aW9uKQorICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKKworICAgICAgICBBU1NFUlQocmVz
dWx0cy5zaXplKCkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKEludDY0LCBy
ZXN1bHRzKTsKKyAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KIAotICAgIHZvaWQg
Y29tcGlsZUdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSgpCisgICAgdm9pZCBjb21waWxlRW51
bWVyYXRvckdldEJ5VmFsKCkKICAgICB7Ci0gICAgICAgIExWYWx1ZSBlbnVtZXJhdG9yID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIo
bV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEVkZ2UgYmFzZUVkZ2UgPSBtX2dyYXBoLnZhckFy
Z0NoaWxkKG1fbm9kZSwgMCk7CisgICAgICAgIEVkZ2UgcHJvcGVydHlOYW1lRWRnZSA9IG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKTsKKyAgICAgICAgRWRnZSBzdG9yYWdlRWRnZSA9IG1f
Z3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAyKTsKKyAgICAgICAgRWRnZSBpbmRleEVkZ2UgPSBt
X2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMyk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaW5C
b3VuZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5k
cyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExWYWx1ZSBiYXNlID0gREZHOjppc0NlbGwo
YmFzZUVkZ2UudXNlS2luZCgpKSA/IGxvd0NlbGwoYmFzZUVkZ2UsIE1hbnVhbE9wZXJhbmRTcGVj
dWxhdGlvbikgOiBsb3dKU1ZhbHVlKGJhc2VFZGdlKTsKKworICAgICAgICBMVmFsdWUgc3RvcmFn
ZSA9IHN0b3JhZ2VFZGdlID8gbG93U3RvcmFnZShzdG9yYWdlRWRnZSkgOiBudWxscHRyOworICAg
ICAgICAvLyBXZSBoYXZlIHRvIG1hdGVyaWFsaXplIHRoZSBwcm9wZXJ0eU5hbWUgaGVyZSBpbiBj
YXNlIGl0IHJlcXVpcmVzIGJveGluZyBzaW5jZSB0aGUgSUMgcGF0aCB3b24ndCBkb21pbmF0ZSBz
dWJzZXF1ZW50IHVzZXMgaW4gc3Vic2VxdWVudCBub2Rlcy4KKyAgICAgICAgLy8gSWYgaXQncyBh
biBJbnQzMiBhbmQgd2UgdXNlIGl0IGFzIHN1Y2ggdGhpcyBib3hpbmcgd2lsbCBiZSBEQ0UnZCBi
eSBiMyBsYXRlciBhbnl3YXkuCisgICAgICAgIGxvd0pTVmFsdWUocHJvcGVydHlOYW1lRWRnZSwg
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKworCisgICAgICAgIExWYWx1ZSBpbmRleCA9IGxv
d0ludDMyKGluZGV4RWRnZSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ncmFw
aC52YXJBcmdDaGlsZChtX25vZGUsIDQpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBs
b3dDZWxsKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCA1KSk7CisKKyAgICAgICAgTEJhc2lj
QmxvY2sgY2hlY2tJc0NlbGxCbG9jayA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNoZWNrU3RydWN0dXJlQmxvY2sgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2sgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBpbmxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkxpbmVMb2FkQmxvY2sgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBnZW5lcmljSUNCbG9jayA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJlbG93KGluZGV4LCBtX291dC5sb2FkMzIo
ZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfZW5kU3RydWN0dXJl
UHJvcGVydHlJbmRleCkpLAotICAgICAgICAgICAgdXN1YWxseShpbkJvdW5kcyksIHJhcmVseShv
dXRPZkJvdW5kcykpOworICAgICAgICBWZWN0b3I8VmFsdWVGcm9tQmxvY2ssIDQ+IHJlc3VsdHM7
CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbkJvdW5k
cywgb3V0T2ZCb3VuZHMpOwotICAgICAgICBMVmFsdWUgc3RvcmFnZSA9IG1fb3V0LmxvYWRQdHIo
ZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVy
dHlOYW1lc1ZlY3Rvcik7Ci0gICAgICAgIFZhbHVlRnJvbUJsb2NrIGluQm91bmRzUmVzdWx0ID0g
bV9vdXQuYW5jaG9yKAotICAgICAgICAgICAgbV9vdXQubG9hZFB0cihtX291dC5iYXNlSW5kZXgo
bV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rv
ckNvbnRlbnRzLCBzdG9yYWdlLCBtX291dC56ZXJvRXh0UHRyKGluZGV4KSkpKTsKKyAgICAgICAg
TFZhbHVlIGlzTm90TmFtZWQgPSBtX291dC50ZXN0Tm9uWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0
SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSB8IEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6R2VuZXJpY01vZGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90
TmFtZWQsIHVuc3VyZShnZW5lcmljSUNCbG9jayksIHVuc3VyZShjaGVja0lzQ2VsbEJsb2NrKSk7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY2hlY2tJc0NlbGxCbG9jayk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChpc0NlbGwoYmFzZSwgcHJvdmVuVHlwZShiYXNlRWRnZSkpLCB1c3VhbGx5KGNo
ZWNrU3RydWN0dXJlQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxvY2spKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhjaGVja1N0cnVjdHVyZUJsb2NrKTsKKyAgICAgICAgTFZhbHVlIHN0cnVj
dHVyZUlEOworICAgICAgICBhdXRvIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShiYXNlRWRn
ZS5ub2RlKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKKyAgICAgICAgaWYgKHN0cnVj
dHVyZSkKKyAgICAgICAgICAgIHN0cnVjdHVyZUlEID0gbV9vdXQuY29uc3RJbnQzMihzdHJ1Y3R1
cmUtPmlkKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzdHJ1Y3R1cmVJRCA9IG1fb3V0
LmxvYWQzMihiYXNlLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CisKKyAgICAgICAgTFZh
bHVlIGhhc0VudW1lcmF0b3JTdHJ1Y3R1cmUgPSBtX291dC5lcXVhbChzdHJ1Y3R1cmVJRCwgbV9v
dXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yX2Nh
Y2hlZFN0cnVjdHVyZUlEKSk7CisKKyAgICAgICAgaWYgKGluZGV4RWRnZS5ub2RlKCkgPT0gcHJv
cGVydHlOYW1lRWRnZS5ub2RlKCkpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBiYWRTdHJ1Y3R1cmVTbG93UGF0aCA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goaGFzRW51bWVyYXRvclN0cnVjdHVyZSwg
dXN1YWxseShjaGVja0lubGluZU9yT3V0T2ZMaW5lQmxvY2spLCByYXJlbHkoZ2VuZXJpY0lDQmxv
Y2spKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oYmFkU3RydWN0dXJlU2xvd1BhdGgp
OworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwg
b3BlcmF0aW9uRW51bWVyYXRvclJlY292ZXJOYW1lQW5kR2V0QnlWYWwsIHdlYWtQb2ludGVyKGds
b2JhbE9iamVjdCksIGJhc2UsIGluZGV4LCBlbnVtZXJhdG9yKSkpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChoYXNFbnVtZXJhdG9yU3RydWN0dXJlLCB1c3VhbGx5
KGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayksIHJhcmVseShnZW5lcmljSUNCbG9jaykpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNoZWNrSW5saW5lT3JPdXRPZkxpbmVCbG9jayk7Cisg
ICAgICAgIExWYWx1ZSBpbmxpbmVDYXBhY2l0eSA9IG51bGxwdHI7CisgICAgICAgIGJvb2wgaGFz
Tm9PdXRPZkxpbmVQcm9wZXJ0aWVzID0gZmFsc2U7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpIHsK
KyAgICAgICAgICAgIGhhc05vT3V0T2ZMaW5lUHJvcGVydGllcyA9ICFzdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCk7CisgICAgICAgICAgICBpbmxpbmVDYXBhY2l0eSA9IG1fb3V0LmNvbnN0
SW50MzIoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIWlubGluZUNhcGFjaXR5KQorICAgICAgICAgICAgaW5saW5lQ2FwYWNpdHkgPSBtX291dC5s
b2FkMzIoZW51bWVyYXRvciwgbV9oZWFwcy5KU1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVk
SW5saW5lQ2FwYWNpdHkpOworICAgICAgICBMVmFsdWUgaXNJbmxpbmUgPSBoYXNOb091dE9mTGlu
ZVByb3BlcnRpZXMgPyBtX291dC5pbnQzMk9uZSA6IG1fb3V0LmJlbG93KGluZGV4LCBpbmxpbmVD
YXBhY2l0eSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0lubGluZSwgdW5zdXJlKGlubGluZUxv
YWRCbG9jayksIHVuc3VyZShvdXRPZkxpbmVMb2FkQmxvY2spKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhpbmxpbmVMb2FkQmxvY2spOworICAgICAgICByZXN1bHRzLmFwcGVuZChtX291dC5h
bmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVhcHMu
cHJvcGVydGllcy5hdEFueU51bWJlcigpLAorICAgICAgICAgICAgICAgIGJhc2UsIG1fb3V0Lnpl
cm9FeHQoaW5kZXgsIEludDY0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5l
U3RvcmFnZSgpKSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG91dE9mQm91bmRzLCBjb250aW51YXRpb24pOwotICAgICAgICBW
YWx1ZUZyb21CbG9jayBvdXRPZkJvdW5kc1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25z
dEludDY0KEpTVmFsdWU6OlZhbHVlTnVsbCkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhvdXRP
ZkxpbmVMb2FkQmxvY2spOworICAgICAgICBpZiAoIXN0b3JhZ2UpCisgICAgICAgICAgICBzdG9y
YWdlID0gbV9vdXQubG9hZFB0cihiYXNlLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSk7CisK
KyAgICAgICAgTFZhbHVlIHJlYWxJbmRleCA9IG1fb3V0LnNpZ25FeHQzMlRvNjQoCisgICAgICAg
ICAgICBtX291dC5uZWcobV9vdXQuc3ViKGluZGV4LCBpbmxpbmVDYXBhY2l0eSkpKTsKKyAgICAg
ICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihv
ZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQobV9vdXQuYW5jaG9yKAorICAgICAgICAg
ICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlO
dW1iZXIoKSwgc3RvcmFnZSwgcmVhbEluZGV4LCBTY2FsZUVpZ2h0LCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkpKSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGluQm91bmRzUmVzdWx0LCBvdXRPZkJvdW5kc1Jl
c3VsdCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGdlbmVyaWNJQ0Jsb2NrKTsKKyAgICAg
ICAgTFZhbHVlIGdlbmVyaWNSZXN1bHQgPSBjb21waWxlR2V0QnlWYWxJbXBsKCk7CisgICAgICAg
IFR5cGVkQXJyYXlUeXBlIHR5cGUgPSBtX25vZGUtPmFycmF5TW9kZSgpLnR5cGVkQXJyYXlUeXBl
KCk7CisgICAgICAgIGlmIChpc0ludCh0eXBlKSkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnRT
aXplKHR5cGUpIDwgNCB8fCBpc1NpZ25lZCh0eXBlKSkKKyAgICAgICAgICAgICAgICBnZW5lcmlj
UmVzdWx0ID0gYm94SW50MzIoZ2VuZXJpY1Jlc3VsdCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgZ2VuZXJpY1Jlc3VsdCA9IHN0cmljdEludDUyVG9KU1ZhbHVlKGdlbmVyaWNS
ZXN1bHQpOworICAgICAgICB9IGVsc2UgaWYgKGdlbmVyaWNSZXN1bHQtPnR5cGUoKSA9PSBEb3Vi
bGUpCisgICAgICAgICAgICBnZW5lcmljUmVzdWx0ID0gYm94RG91YmxlKGdlbmVyaWNSZXN1bHQp
OworCisgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1fb3V0LmFuY2hvcihnZW5lcmljUmVzdWx0KSk7
CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24pOworICAgICAgICBBU1NFUlQocmVzdWx0cy5zaXplKCkpOworICAg
ICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQucGhpKEludDY0LCByZXN1bHRzKTsKKyAgICAgICAg
c2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KIAotICAgIHZvaWQgY29tcGlsZUdldEVudW1lcmF0
b3JHZW5lcmljUG5hbWUoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFNsb3dQYXRoRnVuY3Rpb25U
eXBlPgorICAgIHZvaWQgY29tcGlsZUVudW1lcmF0b3JIYXNQcm9wZXJ0eShTbG93UGF0aEZ1bmN0
aW9uVHlwZSBzbG93UGF0aEZ1bmN0aW9uKQogICAgIHsKLSAgICAgICAgTFZhbHVlIGVudW1lcmF0
b3IgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBMVmFsdWUgaW5kZXggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgRWRnZSBiYXNlRWRnZSA9IG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKTsKKyAg
ICAgICAgTFZhbHVlIGJhc2UgPSBiYXNlRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSA/IGxvd0Nl
bGwoYmFzZUVkZ2UpIDogbG93SlNWYWx1ZShiYXNlRWRnZSk7CisgICAgICAgIExWYWx1ZSBwcm9w
ZXJ0eU5hbWUgPSBsb3dKU1ZhbHVlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxKSk7Cisg
ICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2Rl
LCAyKSk7CisgICAgICAgIExWYWx1ZSBtb2RlID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDMpKTsKKyAgICAgICAgTFZhbHVlIGVudW1lcmF0b3IgPSBsb3dDZWxsKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCA0KSk7CiAKLSAgICAgICAgTEJhc2ljQmxvY2sgaW5Cb3Vu
ZHMgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBvdXRPZkJvdW5kcyA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzTmFtZWRCbG9jayA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbEJsb2NrID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbWF0Y2hlc1N0cnVjdHVyZUJsb2NrID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgb3BlcmF0aW9uQmxvY2sgPSBt
X291dC5uZXdCbG9jaygpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291
dC5uZXdCbG9jaygpOwogCi0gICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iZWxvdyhpbmRleCwg
bV9vdXQubG9hZDMyKGVudW1lcmF0b3IsIG1faGVhcHMuSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
X2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KSksCi0gICAgICAgICAgICB1c3VhbGx5KGluQm91bmRz
KSwgcmFyZWx5KG91dE9mQm91bmRzKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC50ZXN0
Tm9uWmVybzMyKG1vZGUsIG1fb3V0LmNvbnN0SW50MzIoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpPd25TdHJ1Y3R1cmVNb2RlKSksIHVuc3VyZShpc05hbWVkQmxvY2spLCB1bnN1cmUob3BlcmF0
aW9uQmxvY2spKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNOYW1lZEJsb2NrKTsKIAotICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGluQm91bmRzLCBvdXRP
ZkJvdW5kcyk7Ci0gICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQubG9hZFB0cihlbnVtZXJh
dG9yLCBtX2hlYXBzLkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yKTsKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5Cb3VuZHNSZXN1bHQgPSBtX291dC5h
bmNob3IoCi0gICAgICAgICAgICBtX291dC5sb2FkUHRyKG1fb3V0LmJhc2VJbmRleChtX2hlYXBz
LkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yQ29udGVu
dHMsIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHRQdHIoaW5kZXgpKSkpOworICAgICAgICBtX291dC5i
cmFuY2goaXNDZWxsKGJhc2UsIHByb3ZlblR5cGUoYmFzZUVkZ2UpKSwgdW5zdXJlKGlzQ2VsbEJs
b2NrKSwgdW5zdXJlKG9wZXJhdGlvbkJsb2NrKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
aXNDZWxsQmxvY2spOworICAgICAgICBMVmFsdWUgc3RydWN0dXJlSUQgPSBtX291dC5sb2FkMzIo
YmFzZSwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlSUQpOworICAgICAgICBtX291dC5icmFuY2go
bV9vdXQuZXF1YWwoc3RydWN0dXJlSUQsIG1fb3V0LmxvYWQzMihlbnVtZXJhdG9yLCBtX2hlYXBz
LkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcl9jYWNoZWRTdHJ1Y3R1cmVJRCkpLAorICAgICAgICAg
ICAgdXN1YWxseShtYXRjaGVzU3RydWN0dXJlQmxvY2spLCByYXJlbHkob3BlcmF0aW9uQmxvY2sp
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhtYXRjaGVzU3RydWN0dXJlQmxvY2spOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBuYW1lZFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29s
ZWFuVHJ1ZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAotICAgICAgICBt
X291dC5hcHBlbmRUbyhvdXRPZkJvdW5kcywgY29udGludWF0aW9uKTsKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgb3V0T2ZCb3VuZHNSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjpWYWx1ZU51bGwpKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3BlcmF0aW9u
QmxvY2spOworICAgICAgICBWYWx1ZUZyb21CbG9jayBvcGVyYXRpb25SZXN1bHQgPSBtX291dC5h
bmNob3IodW5ib3hCb29sZWFuKHZtQ2FsbChJbnQ2NCwgc2xvd1BhdGhGdW5jdGlvbiwgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgYmFzZSwgcHJvcGVydHlOYW1lLCBpbmRleCwgbW9kZSkpKTsK
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKEludDY0LCBpbkJvdW5kc1Jlc3VsdCwgb3V0T2ZCb3VuZHNSZXN1bHQpKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOworICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShJbnQzMiwgbmFtZWRSZXN1bHQsIG9wZXJhdGlvblJlc3VsdCkpOwogICAgIH0K
LSAgICAKLSAgICB2b2lkIGNvbXBpbGVUb0luZGV4U3RyaW5nKCkKKworICAgIHZvaWQgY29tcGls
ZUVudW1lcmF0b3JJbkJ5VmFsKCkKICAgICB7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX29yaWdpbi5zZW1hbnRpYyk7Ci0g
ICAgICAgIExWYWx1ZSBpbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBzZXRKU1ZhbHVlKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uVG9JbmRleFN0cmluZywgd2Vha1Bv
aW50ZXIoZ2xvYmFsT2JqZWN0KSwgaW5kZXgpKTsKKyAgICAgICAgY29tcGlsZUVudW1lcmF0b3JI
YXNQcm9wZXJ0eShvcGVyYXRpb25FbnVtZXJhdG9ySW5CeVZhbCk7CisgICAgfQorCisgICAgdm9p
ZCBjb21waWxlRW51bWVyYXRvckhhc093blByb3BlcnR5KCkKKyAgICB7CisgICAgICAgIGNvbXBp
bGVFbnVtZXJhdG9ySGFzUHJvcGVydHkob3BlcmF0aW9uRW51bWVyYXRvckhhc093blByb3BlcnR5
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGUo
KQpAQCAtMTczNDQsNyArMTc0NjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0SW50MzIo
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKKwogICAg
ICAgICBpZiAobV9ub2RlLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpICYmIGNhblNwZWN1bGF0ZSkg
ewogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIE92ZXJmbG93LCBub1Zh
bHVlKCksIG51bGxwdHIsIG1fb3V0Lmxlc3NUaGFuKHJlc3VsdCwgbV9vdXQuaW50MzJaZXJvKSk7
CkBAIC0yMDI5Niw2ICsyMDQxNiwyNyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC51bnJlYWNo
YWJsZSgpOwogICAgIH0KIAorICAgIC8vIFRoaXMgb25seSB3b3JrcyBmb3IgaW50cyByaWdodCBu
b3cuCisgICAgUGF0Y2hwb2ludFZhbHVlKiBkYXRhTG9nRm9yRGVidWdnaW5nKGNvbnN0IGNoYXIq
IHByZWZpeCwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgUGF0Y2hwb2ludFZhbHVlKiBy
ZXN1bHQgPSBtX291dC5wYXRjaHBvaW50KFZvaWQpOworICAgICAgICByZXN1bHQtPmVmZmVjdHMu
d3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC0+YXBwZW5kKHZhbHVlLCBW
YWx1ZVJlcDo6cmVnKEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAgIFR5cGUgdmFsdWVUeXBlID0g
dmFsdWUtPnR5cGUoKTsKKyAgICAgICAgcmVzdWx0LT5zZXRHZW5lcmF0b3IoWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgY29uc3QgU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zJikgeworICAgICAgICAg
ICAgQWxsb3dNYWNyb1NjcmF0Y2hSZWdpc3RlclVzYWdlIGFsbG93U2NyYXRjaChqaXQpOworCisg
ICAgICAgICAgICBqaXQucHJvYmVEZWJ1ZyhbPV0gKFByb2JlOjpDb250ZXh0JiBjb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PSBJbnQzMikKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZ0xuKHByZWZpeCwgY29udGV4dC5ncHI8aW50MzJfdD4oR1BSSW5mbzo6cmVn
VDApKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2dM
bihwcmVmaXgsIGNvbnRleHQuZ3ByPEpTVmFsdWU+KEdQUkluZm86OnJlZ1QwKSk7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
ICAgICBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eU1hcCgpIHsgcmV0dXJuIG1fYXZhaWxh
YmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eTsgfQogICAgIAogICAgIFZNJiB2bSgpIHsg
cmV0dXJuIG1fZ3JhcGgubV92bTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgK
aW5kZXggMmRmZGU4NmY3MmJlZDczZDczZGM4YWViNWQ0YjJiMzZjOGIyMDUwZS4uMjIzNmRjMGMz
MmFjMTZhNmQzZTZlYWU2YzE0NDc5Njk4OGZjNWY5MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMy0y
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTQ1LDYgKzE0NSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZElu
Y29taW5nVG9QaGkoTFZhbHVlIHBoaSwgVmFsdWVGcm9tQmxvY2spOwogICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIFBhcmFtcz4KICAgICB2b2lkIGFkZEluY29taW5nVG9QaGkoTFZhbHVlIHBoaSwg
VmFsdWVGcm9tQmxvY2ssIFBhcmFtcy4uLiB0aGVSZXN0KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBQYXJhbXM+CisgICAgdm9pZCBhZGRJbmNvbWluZ1RvUGhpSWZTZXQoTFZhbHVlIHBoaSwg
UGFyYW1zLi4uIHRoZVJlc3QpOwogICAgIAogICAgIExWYWx1ZSBvcGFxdWUoTFZhbHVlKTsKIApA
QCAtNDgwLDYgKzQ4Miw3IEBAIGlubGluZSBMVmFsdWUgT3V0cHV0OjpwaGkoTFR5cGUgdHlwZSwg
VmFsdWVGcm9tQmxvY2sgdmFsdWUsIFBhcmFtcy4uLiB0aGVSZXN0KQogdGVtcGxhdGU8dHlwZW5h
bWUgVmVjdG9yVHlwZT4KIGlubGluZSBMVmFsdWUgT3V0cHV0OjpwaGkoTFR5cGUgdHlwZSwgY29u
c3QgVmVjdG9yVHlwZSYgdmVjdG9yKQogeworICAgIEFTU0VSVCh2ZWN0b3Iuc2l6ZSgpKTsKICAg
ICBMVmFsdWUgcGhpTm9kZSA9IHBoaSh0eXBlKTsKICAgICBmb3IgKGNvbnN0IFZhbHVlRnJvbUJs
b2NrJiB2YWx1ZUZyb21CbG9jayA6IHZlY3RvcikKICAgICAgICAgYWRkSW5jb21pbmdUb1BoaShw
aGlOb2RlLCB2YWx1ZUZyb21CbG9jayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZ2VuZXJhdG9yL0RTTC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNM
LnJiCmluZGV4IDczMTcxMDA5NmNmM2UyNDk4YWU0NWRkYTI2YWE4MmU3OWNkNDZhNGUuLjY5N2Rl
OGQ5OGYxOWRlMzllNDFjNDI0YWI1ODQwOWY0ZjUxOWIwNjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvRFNMLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9nZW5lcmF0b3IvRFNMLnJiCkBAIC0xMzgsNiArMTM4LDcgQEAgbW9kdWxlIERTTAogI2luY2x1
ZGUgIkdldEJ5VmFsSGlzdG9yeS5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVk
ZSAiSXRlcmF0aW9uTW9kZU1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCiAjaW5jbHVkZSAiUHJpdmF0ZUZpZWxkUHV0
S2luZC5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3Rlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKaW5kZXggNDQ0NjM1ZTk4MGQ5MGFmODM3ZWJkNjNi
OTYyZmFlZGUyZWM1MzUwMy4uZDg3OWM5MGJlMzExNzg2MjMzZjUyNmIxODNlZGYxY2IzYzdiYjM4
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVy
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVyLmgKQEAg
LTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEFMV0FZU19JTkxJTkUgUmVn
aXN0ZXImIG9wZXJhdG9yPShDYWxsRnJhbWUqKTsKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdp
c3RlciYgb3BlcmF0b3I9KENvZGVCbG9jayopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lz
dGVyJiBvcGVyYXRvcj0oSlNTY29wZSopOwotICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVy
JiBvcGVyYXRvcj0oSlNPYmplY3QqKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYg
b3BlcmF0b3I9KEpTQ2VsbCopOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVyJiBvcGVy
YXRvcj0oRW5jb2RlZEpTVmFsdWUpOwogCiAgICAgICAgIGludDMyX3QgaSgpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5l
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1JlZ2lzdGVySW5saW5lcy5o
CmluZGV4IGM1NmVmNWU0NTU0Y2IxMDNhYmViZTcyZTYyOThmOGM0OGFhZDk4NjAuLjU5M2VmNjY2
OGRlMmUwM2E2NTliMzlmMzFhZjYwZjg4YzI3ODM5ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9SZWdpc3RlcklubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJJbmxpbmVzLmgKQEAgLTYzLDcgKzYzLDcg
QEAgQUxXQVlTX0lOTElORSBSZWdpc3RlciYgUmVnaXN0ZXI6Om9wZXJhdG9yPShDb2RlQmxvY2sq
IGNvZGVCbG9jaykKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLUFMV0FZU19JTkxJTkUgUmVnaXN0
ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNPYmplY3QqIG9iamVjdCkKK0FMV0FZU19JTkxJTkUg
UmVnaXN0ZXImIFJlZ2lzdGVyOjpvcGVyYXRvcj0oSlNDZWxsKiBvYmplY3QpCiB7CiAgICAgdS52
YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKG9iamVjdCkpOwogICAgIHJldHVybiAqdGhp
czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCmluZGV4IGFj
OGI1MTM3ZDg1MzU0NTA2YWVlZGNlZGJkMWM1YmQ3NzI1NzljMDEuLjBiNGMyYjliZTBmNWZmZjE1
MWEzYjA3ZTlhYTI0ZmNjZjkwNTAzOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaApAQCAtMTg4LDcgKzE4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgc3Rv
cmUzMihyZWdzLnRhZ0dQUigpLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGFkZHJlc3MpICsgVGFnT2Zmc2V0KSk7CiAjZW5kaWYKICAgICB9Ci0gICAgCisKICAg
ICB2b2lkIGxvYWRWYWx1ZShBZGRyZXNzIGFkZHJlc3MsIEpTVmFsdWVSZWdzIHJlZ3MpCiAgICAg
ewogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC04ODksNyArODg5LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYnJhbmNoOCgKICAgICAgICAgICAgIEJlbG93LCBBZGRyZXNzKGNlbGxHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpOwog
ICAgIH0KLSAgICAKKwogICAgIC8vIE5vdGUgdGhhdCBmaXJzdCBhbmQgbGFzdCBhcmUgaW5jbHVz
aXZlLgogICAgIEp1bXAgYnJhbmNoSWZUeXBlKEdQUlJlZyBjZWxsR1BSLCBKU1R5cGVSYW5nZSBy
YW5nZSkKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggNDJiOGNhZjVmNWNi
OGM0YjVmM2FkZWIzZWRhNDdhYjI2OTBkNDkwNC4uYzliMDFjMGQwNWE1ZDZmMGMxMWQwYTM3Mzgx
YzJkOThlZmE0NzEzMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtMzA4LDEwICsz
MDgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklO
RV9TTE9XX09QKG5ld19hcnJheV93aXRoX3NwcmVhZCkKICAgICAgICAgREVGSU5FX1NMT1dfT1Ao
bmV3X2FycmF5X2J1ZmZlcikKICAgICAgICAgREVGSU5FX1NMT1dfT1Aoc3ByZWFkKQotICAgICAg
ICBERUZJTkVfU0xPV19PUChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCi0gICAgICAgIERFRklORV9T
TE9XX09QKGhhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfU0xPV19PUChn
ZXRfcHJvcGVydHlfZW51bWVyYXRvcikKLSAgICAgICAgREVGSU5FX1NMT1dfT1AodG9faW5kZXhf
c3RyaW5nKQogICAgICAgICBERUZJTkVfU0xPV19PUChjcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykK
ICAgICAgICAgREVGSU5FX1NMT1dfT1AoY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpCiAgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9jbG9uZWRfYXJndW1lbnRzKQpAQCAtMzY1LDYgKzM2Miwx
MCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9P
UChvcF9nZXRfYnlfaWRfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lk
X2RpcmVjdCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV92YWwpCisgICAgICAgIERFRklO
RV9PUChvcF9lbnVtZXJhdG9yX25leHQpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9y
X2dldF9ieV92YWwpCisgICAgICAgIERFRklORV9PUChvcF9lbnVtZXJhdG9yX2luX2J5X3ZhbCkK
KyAgICAgICAgREVGSU5FX09QKG9wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eSkKICAgICAg
ICAgREVGSU5FX09QKG9wX2dldF9wcml2YXRlX25hbWUpCiAgICAgICAgIERFRklORV9PUChvcF9z
ZXRfcHJpdmF0ZV9icmFuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2NoZWNrX3ByaXZhdGVfYnJh
bmQpCkBAIC00NzMsMTQgKzQ3NCw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNz
KCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9mcm9tX2FyZ3VtZW50cykKICAgICAgICAgREVG
SU5FX09QKG9wX3B1dF90b19hcmd1bWVudHMpCiAKLSAgICAgICAgREVGSU5FX09QKG9wX2hhc19l
bnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9oYXNfZW51
bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9PUChvcF9oYXNfb3du
X3N0cnVjdHVyZV9wcm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eSkKLSAgICAgICAgREVGSU5FX09QKG9wX2dldF9kaXJlY3RfcG5hbWUpCi0gICAgICAg
IERFRklORV9PUChvcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSkKLSAgICAgICAgREVGSU5F
X09QKG9wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSkKLSAgICAgICAgICAgIAogICAgICAgICBE
RUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVf
T1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAKQEAgLTU3OCw2ICs1NzEsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xPV0NBU0Vf
T1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9w
X2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9PUChvcF9nZXRfYnlf
dmFsKQorICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZW51bWVyYXRvcl9nZXRfYnlfdmFs
KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3BfZ2V0X3ByaXZhdGVfbmFtZSkKICAgICAg
ICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3NldF9wcml2YXRlX2JyYW5kKQogICAgICAgICBERUZJ
TkVfU0xPV0NBU0VfT1Aob3BfY2hlY2tfcHJpdmF0ZV9icmFuZCkKQEAgLTYwOSw3ICs2MDMsNiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMoKQogICAgICAgICBERUZJTkVfU0xP
V0NBU0VfT1Aob3BfZGVsX2J5X3ZhbCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX2Rl
bF9ieV9pZCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX09QKG9wX3N1YikKLSAgICAgICAgREVG
SU5FX1NMT1dDQVNFX09QKG9wX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJvcGVydHkpCiAjaWYg
IUVOQUJMRShFWFRSQV9DVElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfT1Aob3Bf
Z2V0X2Zyb21fc2NvcGUpCiAjZW5kaWYKQEAgLTY0MiwxMSArNjM1LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlU2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
bm90KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChzdHJpY3RlcSkKICAgICAgICAg
REVGSU5FX1NMT1dDQVNFX1NMT1dfT1AobnN0cmljdGVxKQotICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChnZXRfZGlyZWN0X3BuYW1lKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xP
V19PUChnZXRfcHJvdG90eXBlX29mKQotICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCho
YXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi0gICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotICAgICAgICBERUZJTkVfU0xP
V0NBU0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAjaWYgIUVOQUJMRShFWFRSQV9D
VElfVEhVTktTKQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChyZXNvbHZlX3Njb3Bl
KQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA0ODdhNWFjNWI4ZTVkOGE5ZDgw
YjJjNmQzMDZlMDgxNTIxYjgyODE0Li40ZGE3YTJmZDY2ZjE1MGNmY2QzNTkwMmZlOTNlNTRmZWQy
YTVhZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTQ1Myw2ICs0NTMsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyIHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKICAgICAgICAgdm9pZCBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CisgICAg
ICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgY29uc3QgSlNWYWx1ZSBjb25zdGFu
dCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgICAgIGludDMy
X3QgZ2V0T3BlcmFuZENvbnN0YW50SW50KFZpcnR1YWxSZWdpc3RlciBzcmMpOwogICAgICAgICBk
b3VibGUgZ2V0T3BlcmFuZENvbnN0YW50RG91YmxlKFZpcnR1YWxSZWdpc3RlciBzcmMpOwpAQCAt
NDY5LDcgKzQ3MCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRMb2FkMihW
aXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgdGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgVmly
dHVhbFJlZ2lzdGVyLCBSZWdpc3RlcklEIHRhZzIsIFJlZ2lzdGVySUQgcGF5bG9hZDIpOwogCiAg
ICAgICAgIHZvaWQgZW1pdFN0b3JlKFZpcnR1YWxSZWdpc3RlciwgUmVnaXN0ZXJJRCB0YWcsIFJl
Z2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0gY2FsbEZyYW1lUmVnaXN0ZXIpOwot
ICAgICAgICB2b2lkIGVtaXRTdG9yZShWaXJ0dWFsUmVnaXN0ZXIsIGNvbnN0IEpTVmFsdWUgY29u
c3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKICAgICAgICAgdm9p
ZCBlbWl0U3RvcmVJbnQzMihWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9v
bCBpbmRleElzSW50MzIgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoVmly
dHVhbFJlZ2lzdGVyLCBUcnVzdGVkSW1tMzIgcGF5bG9hZCwgYm9vbCBpbmRleElzSW50MzIgPSBm
YWxzZSk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChWaXJ0dWFsUmVnaXN0ZXIsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZhbHNlKTsKQEAgLTY3MCwyMSArNjcw
LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfdW5leHBlY3RlZF9s
b2FkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF91bnNpZ25lZChj
b25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfdXJzaGlmdChjb25zdCBJ
bnN0cnVjdGlvbiopOwotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3BDb2RlVHlwZT4KLSAg
ICAgICAgdm9pZCBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsKGNvbnN0IEluc3Ry
dWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3By
b3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9oYXNfZW51
bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAg
dm9pZCBlbWl0X29wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9u
Kik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBlbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9lbnVtZXJh
dG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2dldF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfcHV0X2ludGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rp
b24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNvbnN0
IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19wcm9wZXJ0eV9rZXkoY29u
c3QgSW5zdHJ1Y3Rpb24qKTsKIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcGNvZGVUeXBl
PgorICAgICAgICB2b2lkIGdlbmVyYXRlR2V0QnlWYWxTbG93Q2FzZShjb25zdCBPcGNvZGVUeXBl
JiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOworCisgICAgICAgIHZvaWQgZW1p
dF9vcF9lbnVtZXJhdG9yX25leHQoY29uc3QgSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOworICAgICAg
ICB2b2lkIGVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBlbmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KKyAg
ICAgICAgdm9pZCBlbWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVj
dGlvbiosIGNvbnN0IE9wY29kZVR5cGUmLCBTbG93UGF0aEZ1bmN0aW9uVHlwZSk7CisgICAgICAg
IHZvaWQgZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiopOwor
ICAgICAgICB2b2lkIGVtaXRfb3BfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KGNvbnN0IElu
c3RydWN0aW9uKik7CisKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9hZGQoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CiAgICAgICAgIHZvaWQg
ZW1pdFNsb3dfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CkBAIC03MzUs
NyArNzM4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKICAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9wdXRfcHJpdmF0ZV9uYW1lKGNvbnN0IElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2
b2lkIGVtaXRTbG93X29wX3N1Yihjb25zdCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImKTsKLSAgICAgICAgdm9pZCBlbWl0U2xvd19vcF9oYXNfZW51bWVyYWJs
ZV9pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYpOwogCiAgICAgICAgIHZvaWQgZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNv
bnN0IEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfZnJvbV9zY29wZShj
b25zdCBJbnN0cnVjdGlvbiopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKaW5kZXggZjZkYjNmNTljNGFhNGUwMjdhMTU2MTFlZGJiYTI2MWNhZDhlZmVkNi4uOWJhMTBl
ZDY3NzJmYWVjM2YyMGU2MzRiYWJlMTRhZGQ5YTEwODkwNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCkBAIC0xNjkyLDQ2ICsxNjkyLDEyIEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19hcnJheV93aXRoX3NpemUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcENv
ZGVUeXBlPgotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcENvZGVUeXBlPigpOwotICAgIFZpcnR1YWxSZWdp
c3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5
dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2Rl
Lm1fZW51bWVyYXRvcjsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDAp
OwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAot
ICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwg
cmVnVDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJlX3By
b3BlcnR5SW1wbDxPcEhhc0VudW1lcmFibGVTdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3Ry
dWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVy
dHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0X29w
X2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzT3duU3RydWN0dXJlUHJvcGVydHk+KGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX3N0cnVjdHVyZV9w
cm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVt
aXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGw8T3BJblN0cnVjdHVyZVByb3BlcnR5Pihj
dXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRl
eGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7Ci0gICAgCisKICAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7Ci0gICAgCisKICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5
cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KICAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KICAgICBKdW1wTGlzdCBzbG93Q2FzZXMg
PSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFk
VHlwZSwgbnVsbHB0cik7CkBAIC0xNzM5LDcgKzE3MDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdAogICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKIAogICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIG1fY29kZUJsb2NrLCBMaW5rQnVmZmVyOjpQcm9maWxlOjpJbmxpbmVDYWNoZSk7
Ci0gICAgCisKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIGJ5VmFsSW5mby0+c2xvd1Bh
dGhUYXJnZXQpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBieVZhbEluZm8tPnNs
b3dQYXRoVGFyZ2V0KTsKIApAQCAtMTc0OCw3ICsxNzE0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHQKICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RV
QigKICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRh
ZywKICAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRleGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFk
ZHJlc3MudW50YWdnZWRWYWx1ZSgpKTsKLSAgICAKKwogICAgIGlmIChKSVRDb2RlOjp1c2VEYXRh
SUMoSklUVHlwZTo6QmFzZWxpbmVKSVQpKSB7CiAgICAgICAgIGJ5VmFsSW5mby0+bV9iYWRUeXBl
SnVtcFRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZh
bEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKICAgICAgICAgYnlWYWxJbmZvLT5t
X3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljOwpAQCAt
MTc1OCwxNzEgKzE3MjQsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJv
cGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIH0KIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsK
LSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKLSAg
ICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lz
dGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5
ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0gICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMSk7Ci0KLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDEpOwotCi0gICAgLy8gVGhpcyBpcyB0ZWNobmljYWxs
eSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBw
YXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlm
IGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwg
YWx3YXlzIGZhaWwgaWYKLSAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxl
bmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRp
b24KLSAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4
dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQot
ICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRk
cmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgotICAgIC8v
IGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBp
biB0aGUgc2xvdyBjYXNlLgotICAgIHplcm9FeHRlbmQzMlRvV29yZChyZWdUMSwgcmVnVDEpOwot
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0
QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7Ci0KLSAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVz
IGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUsIGJ5
VmFsSW5mbyk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0KLSAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCi0gICAgICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7
Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi0gICAgTGFiZWwgbmV4
dEhvdFBhdGggPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZUluZGV4LCBQYXRj
aGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3Bl
cnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVy
YWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0g
ICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsK
LSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0KLSAgICBDYWxsIGNhbGw7Ci0g
ICAgaWYgKEpJVENvZGU6OnVzZURhdGFJQyhKSVRUeXBlOjpCYXNlbGluZUpJVCkpIHsKLSAgICAg
ICAgYnlWYWxJbmZvLT5tX3Nsb3dPcGVyYXRpb24gPSBvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVy
dHlEZWZhdWx0OwotICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb248ZGVjbHR5cGUob3BlcmF0aW9u
SGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCk+KEFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwg
QnlWYWxJbmZvOjpvZmZzZXRPZlNsb3dPcGVyYXRpb24oKSksIGRzdCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCwgcmVnVDEsIEdQUkluZm86Om5vbkFy
Z0dQUjApOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDAsIHJlZ1QxLCBieVZhbEluZm8pOwotCi0gICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJn
ZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleCsrOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBi
eXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9p
bmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVy
YXRvcjsKLQotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2UpOwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBD
b21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdU
MSk7Ci0gICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVk
IGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0
T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgp
KSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9y
YWdlKCkpLCByZWdUMCk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAg
ICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAg
ICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQg
b2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1
YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5l
Q2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4
dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdU
MCk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVy
YXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNv
ZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3IgPSBieXRlY29kZS5tX2Vu
dW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsK
LQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0g
YnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5
TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdU
MCwgcmVnVDApOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0
KSwgcmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
PigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2RzdDsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51
bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVn
VDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1By
b3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLSAg
ICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSks
IHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwotICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0K
IHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHJvZmlsZVR5cGU+KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMzMl82NC5jcHAKaW5kZXggNGQ3NDEyNmJlMWUzZGU0MzBkM2E2ZDljYjdmZGRiNmRjODZm
N2ViNC4uY2EzMmRjMWM1NmU2MjdhYjZlMGU2MjY5ZTUzOTgxM2NlZWU3ZDBhZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApAQCAtMTE0Miw0NyAr
MTE0MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CiB9CiAKLXRlbXBsYXRlIDx0eXBlbmFtZSBPcENvZGVUeXBlPgotdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eUltcGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcENvZGVUeXBlPigpOwotICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBieXRlY29kZS5tX2Rz
dDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIGVt
aXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLQot
ICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0
KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBlbWl0
U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfZW51bWVy
YWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBlbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHlJbXBsPE9wSGFzRW51
bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eUltcGw8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oY3VycmVudEluc3RydWN0aW9uKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5fc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdF9vcF9oYXNfc3RydWN0dXJl
X3Byb3BlcnR5SW1wbDxPcEluU3RydWN0dXJlUHJvcGVydHk+KGN1cnJlbnRJbnN0cnVjdGlvbik7
Ci19Ci0KIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1v
ZGUgYXJyYXlNb2RlKQogewogICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKLSAgICAKKwogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICAKKwog
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5
cyBhbmQgQXJndW1lbnRzLgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MDM0LgogICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlN
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlLCBudWxscHRyKTsKQEAg
LTExOTAsNyArMTE1NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9w
ZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0CiAgICAgSnVtcCBkb25l
ID0ganVtcCgpOwogCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxv
Y2ssIExpbmtCdWZmZXI6OlByb2ZpbGU6OklubGluZUNhY2hlKTsKLSAgICAKKwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoYmFkVHlwZSwgYnlWYWxJbmZvLT5zbG93UGF0aFRhcmdldCk7CiAgICAgcGF0
Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIGJ5VmFsSW5mby0+c2xvd1BhdGhUYXJnZXQpOwogCkBA
IC0xMTk5LDE3MCArMTE2NCwxMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAogICAgICAgICBtX2Nv
ZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAogICAgICAgICAiQmFz
ZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIs
IHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy51bnRhZ2dlZFZh
bHVlKCkpOwotICAgIAorCiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5m
by0+bV9iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+
KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxSZXR1cm5BZGRyZXNzUHRyVGFnPihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8UmV0dXJuQWRkcmVzc1B0clRhZz4ocmV0dXJuQWRkcmVzcykp
LCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0
eUdlbmVyaWMpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhl
ZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzRW51bWVyYWJsZUlu
ZGV4ZWRQcm9wZXJ0eT4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7
Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVh
bFJlZ2lzdGVyIHByb3BlcnR5ID0gYnl0ZWNvZGUubV9wcm9wZXJ0eTsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKG1fYnl0ZWNvZGVJbmRleCk7Ci0g
ICAgCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJl
Z1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0KLSAgICAv
LyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAtIHdlJ3JlIHplcm8tZXh0ZW5kaW5nIGFu
IGludDMyLiBPbiB0aGUgaG90IHBhdGggdGhpcyBkb2Vzbid0IG1hdHRlci4KLSAgICAvLyBXZSBj
aGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWludDMyIGFnYWluc3QgdGhlIG1fdmVjdG9y
TGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBpZgotICAgIC8vIG51bWJlciB3YXMgc2ln
bmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5cyBsZXNzIHRoYW4gaW50bWF4IChzaW5j
ZSB0aGUgdG90YWwgYWxsb2NhdGlvbgotICAgIC8vIHNpemUgaXMgYWx3YXlzIGxlc3MgdGhhbiA0
R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwgaGF2ZSBiZWVuIGNvcnJlY3QgKGFuZCBl
eHRlbmRpbmcgdGhlIHZhbHVlCi0gICAgLy8gdG8gNjQtYml0cyBpcyBuZWNlc3Nhcnkgc2luY2Ug
aXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0aW9uLiBXZSB6ZXJvIGV4dGVuZCByYXRo
ZXIgdGhhbiBzaWduCi0gICAgLy8gZXh0ZW5kaW5nIHNpbmNlIGl0IG1ha2VzIGl0IGVhc2llciB0
byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNhc2UuCi0gICAgemVyb0V4dGVuZDMyVG9X
b3JkKHJlZ1QxLCByZWdUMSk7Ci0KLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdT
aGFwZU1hc2spLCByZWdUMik7Ci0KLSAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5
TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0KLSAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3Vt
ZW50cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAz
NC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUsIGJ5VmFsSW5mbyk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAg
Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLQotICAgIExhYmVsIG5leHRIb3RQYXRo
ID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZh
bENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVJbmRleCwgUGF0Y2hhYmxlSnVt
cCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2VudW1lcmFibGVfaW5kZXhlZF9wcm9wZXJ0eShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0VudW1lcmFibGVJbmRl
eGVkUHJvcGVydHk+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0
OwotICAgIFZpcnR1YWxSZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOwotICAgIFZpcnR1
YWxSZWdpc3RlciBwcm9wZXJ0eSA9IGJ5dGVjb2RlLm1fcHJvcGVydHk7Ci0gICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0g
ICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwg
cmVnVDMsIHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBi
eVZhbEluZm8pOwotCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAg
ICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
ZGlyZWN0X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFt
ZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmly
dHVhbFJlZ2lzdGVyIGJhc2UgPSBieXRlY29kZS5tX2Jhc2U7Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IGluZGV4ID0gYnl0ZWNvZGUubV9pbmRleDsKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgZW51bWVyYXRv
ciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKLQotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBh
IGNlbGwKLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKLQotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAg
ICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBD
b21wdXRlIHRoZSBvZmZzZXQKLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QyKTsKLSAg
ICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5l
IHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVB
Y2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSks
IHJlZ1QwKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgbG9h
ZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUg
PSBqdW1wKCk7Ci0KLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9m
TGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHJlZ1QyKTsKLSAgICBuZWczMihyZWdUMik7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJv
cGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9m
TGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkMzIoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgbG9hZDMy
KEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0
eSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsK
LSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkp
OwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGRz
dCA9IGJ5dGVjb2RlLm1fZHN0OwotICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0
ZWNvZGUubV9lbnVtZXJhdG9yOwotICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2Rl
Lm1faW5kZXg7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKLSAgICBlbWl0
TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFu
Y2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7Ci0KLSAgICBtb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGlu
ayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAg
bG9hZFB0cihCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciksIHJlZ1QwKTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDIpOwotCi0gICAgZG9uZS5s
aW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBWaXJ0dWFsUmVnaXN0
ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGVudW1lcmF0b3Ig
PSBieXRlY29kZS5tX2VudW1lcmF0b3I7Ci0gICAgVmlydHVhbFJlZ2lzdGVyIGluZGV4ID0gYnl0
ZWNvZGUubV9pbmRleDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwotICAg
IGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9
IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjplbmRHZW5lcmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7Ci0KLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZElt
bTMyKDApLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMu
bGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0g
ICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBTY2FsZVB0ciksIHJlZ1QwKTsKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDIpOwotICAgIAotICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFByb2ZpbGVUeXBlPigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCAxNWUxZDM0NTc5YjZkNGM4YzE3MGQyMzUwYzZjMzY0
NDNmZmVhNDE1Li5kMzliYzZkNzUzZDY0ZDZlZjczYTc4YTQ1ZjhiOWY2NTgyNTM3MjNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAt
MzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIlByaXZhdGVGaWVsZFB1dEtpbmQuaCIKKyNpbmNs
dWRlICJQcm9iZUNvbnRleHQuaCIKICNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVTdHViSW5mby5oIgogI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgpAQCAt
ODYsMTAgKzg3LDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordGVtcGxhdGU8dHlwZW5hbWUgT3Bjb2Rl
VHlwZT4KK3ZvaWQgSklUOjpnZW5lcmF0ZUdldEJ5VmFsU2xvd0Nhc2UoY29uc3QgT3Bjb2RlVHlw
ZSYgYnl0ZWNvZGUsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgaWYgKGhhc0FueVNsb3dDYXNlcyhpdGVyKSkgewotICAgICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOwogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgZHN0ID0gYnl0ZWNvZGUubV9kc3Q7CiAgICAgICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwogICAgICAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CkBAIC0xMzYsNiArMTM3LDExIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTCiAgICAgfQogfQogCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGdlbmVyYXRlR2V0QnlWYWxTbG93
Q2FzZShjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCksIGl0ZXIpOworfQorCiAj
aWYgRU5BQkxFKEVYVFJBX0NUSV9USFVOS1MpCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1
bmtQdHJUYWc+IEpJVDo6c2xvd19vcF9nZXRfYnlfdmFsX3ByZXBhcmVDYWxsR2VuZXJhdG9yKFZN
JiB2bSkKIHsKQEAgLTI5NzcsNiArMjk4MywxOTMgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2lu
dGVybmFsX2ZpZWxkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIHRl
bXBsYXRlIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbD4oY29uc3QgSW5z
dHJ1Y3Rpb24qKTsKIAordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9uZXh0KGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yTmV4dD4oKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKworICAgIFZpcnR1YWxSZWdp
c3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBtb2RlID0g
Ynl0ZWNvZGUubV9tb2RlOworICAgIFZpcnR1YWxSZWdpc3RlciBpbmRleCA9IGJ5dGVjb2RlLm1f
aW5kZXg7CisgICAgVmlydHVhbFJlZ2lzdGVyIHByb3BlcnR5TmFtZSA9IGJ5dGVjb2RlLm1fcHJv
cGVydHlOYW1lOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVtZXJhdG9yID0gYnl0ZWNvZGUubV9l
bnVtZXJhdG9yOworCisgICAgSnVtcExpc3QgZG9uZTsKKyAgICBKdW1wTGlzdCBvcGVyYXRpb25D
YXNlczsKKworICAgIEdQUlJlZyBtb2RlR1BSID0gcmVnVDA7CisgICAgR1BSUmVnIGluZGV4R1BS
ID0gcmVnVDE7CisgICAgR1BSUmVnIGJhc2VHUFIgPSByZWdUMjsKKworICAgIC8vIFRoaXMgaXMg
dGhlIG1vc3QgY29tbW9uIG1vZGUgc2V0IHdlIHRlbmQgdG8gc2VlLCBzbyBzcGVjaWFsIGNhc2Ug
aXQgaWYgd2UgcHJvZmlsZSBpdCBpbiB0aGUgTExJbnQuCisgICAgaWYgKG1ldGFkYXRhLm1fZW51
bWVyYXRvck1ldGFkYXRhID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJl
TW9kZSkgeworICAgICAgICBHUFJSZWcgZW51bWVyYXRvckdQUiA9IHJlZ1QzOworICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIGVudW1lcmF0b3JHUFIpOworICAgICAg
ICBvcGVyYXRpb25DYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKE5vblplcm8sIEFkZHJlc3MoZW51
bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptb2RlU2V0T2Zmc2V0KCkpLCBU
cnVzdGVkSW1tMzIofkpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkp
KTsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBiYXNlR1BSKTsKKyAgICAg
ICAgbG9hZDMyKEFkZHJlc3MoZW51bWVyYXRvckdQUiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSwgaW5kZXhHUFIpOworICAgICAgICBvcGVyYXRp
b25DYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGJhc2VH
UFIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG1vZGUsIG1vZGVHUFIpOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGluZGV4LCBpbmRleEdQUik7CisgICAgICAgIEp1bXAgbm90SW5pdCA9IGJyYW5jaFRlc3Qz
MihaZXJvLCBtb2RlR1BSKTsKKyAgICAgICAgLy8gTmVlZCB0byB1c2UgYWRkNjQgc2luY2UgdGhp
cyBpcyBhIEpTVmFsdWUgaW50MzIuCisgICAgICAgIGFkZDY0KFRydXN0ZWRJbW0zMigxKSwgaW5k
ZXhHUFIpOworICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCBpbmRleEdQUik7
CisgICAgICAgIG5vdEluaXQubGluayh0aGlzKTsKKyAgICAgICAgc3RvcmVUcnVzdGVkVmFsdWUo
anNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpP
d25TdHJ1Y3R1cmVNb2RlKSksIGFkZHJlc3NGb3IobW9kZSkpOworCisgICAgICAgIEp1bXAgb3V0
T2ZCb3VuZHMgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBBZGRyZXNzKGVudW1l
cmF0b3JHUFIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJ
bmRleE9mZnNldCgpKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhlbnVtZXJhdG9yR1BSLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQo
KSksIGVudW1lcmF0b3JHUFIpOworICAgICAgICAvLyBXZSBuZWVkIHRvIGNsZWFyIHRoZSBoaWdo
IGJpdHMgZnJvbSB0aGUgbnVtYmVyIGVuY29kaW5nLgorICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoLTEpLCBpbmRleEdQUik7CisgICAgICAgIGxvYWRQdHIoQmFzZUluZGV4KGVudW1lcmF0b3JH
UFIsIGluZGV4R1BSLCBTY2FsZVB0ciksIGVudW1lcmF0b3JHUFIpOworCisgICAgICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHlOYW1lLCBlbnVtZXJhdG9yR1BSKTsKKyAgICAgICAg
ZG9uZS5hcHBlbmQoanVtcCgpKTsKKworICAgICAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwor
ICAgICAgICBzdG9yZVRydXN0ZWRWYWx1ZShqc051bGwoKSwgYWRkcmVzc0Zvcihwcm9wZXJ0eU5h
bWUpKTsKKyAgICAgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKKyAgICB9CisKKyAgICBvcGVyYXRp
b25DYXNlcy5saW5rKHRoaXMpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0
aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnVtZXJhdG9yX25leHQpOworICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wRW51bWVyYXRvckdldEJ5VmFsPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFZpcnR1YWxSZWdpc3RlciBkc3QgPSBi
eXRlY29kZS5tX2RzdDsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbW9kZSA9IGJ5dGVjb2RlLm1fbW9k
ZTsKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgYmFzZSA9IGJ5dGVjb2RlLm1fYmFzZTsKKyAgICBWaXJ0
dWFsUmVnaXN0ZXIgaW5kZXggPSBieXRlY29kZS5tX2luZGV4OworICAgIFZpcnR1YWxSZWdpc3Rl
ciBwcm9wZXJ0eU5hbWUgPSBieXRlY29kZS5tX3Byb3BlcnR5TmFtZTsKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgZW51bWVyYXRvciA9IGJ5dGVjb2RlLm1fZW51bWVyYXRvcjsKKyAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGU7CisKKyAgICBKdW1wTGlzdCBk
b25lQ2FzZXM7CisKKyAgICBhdXRvIHJlc3VsdEdQUiA9IHJlZ1QwOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlciht
b2RlLCByZWdUMik7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eU5hbWUsIHJl
Z1QxKTsKKworICAgIG9yOChyZWdUMiwgQWJzb2x1dGVBZGRyZXNzKCZtZXRhZGF0YS5tX2VudW1l
cmF0b3JNZXRhZGF0YSkpOworCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7CisgICAgLy8gVGhpcyBpcyBhbHdheXMgYW4gaW50MzIgZW5jb2RlZCB2YWx1ZS4KKyAgICBK
dW1wIGlzTm90T3duU3RydWN0dXJlTW9kZSA9IGJyYW5jaFRlc3QzMihOb25aZXJvLCByZWdUMiwg
VHJ1c3RlZEltbTMyKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6SW5kZXhlZE1vZGUgfCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlKSk7CisKKyAgICAvLyBDaGVjayB0aGUg
c3RydWN0dXJlCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7
CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QzKTsKKyAgICBKdW1wIHN0cnVjdHVyZU1pc21hdGNoID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QzLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKTsKKworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldC4KKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMyk7CisgICAgLy8gSWYgaW5kZXggaXMg
bGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0
J3MgYW4gaW5saW5lIGFjY2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMywgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgc2ln
bkV4dGVuZDMyVG9QdHIocmVnVDMsIHJlZ1QzKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMywgVGltZXNFaWdodCksIHJlc3VsdEdQUik7CisKKyAgICBkb25lQ2FzZXMuYXBwZW5k
KGp1bXAoKSk7CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQorICAgIG91dE9m
TGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSks
IHJlZ1QzKTsKKyAgICBuZWczMihyZWdUMyk7CisgICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDMs
IHJlZ1QzKTsKKyAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QzLCBU
aW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZXN1bHRHUFIpOworICAgIGRvbmVD
YXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIHN0cnVjdHVyZU1pc21hdGNoLmxpbmsodGhpcyk7
CisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Okhhc1Nl
ZW5Pd25TdHJ1Y3R1cmVNb2RlU3RydWN0dXJlTWlzbWF0Y2gpLCAmbWV0YWRhdGEubV9lbnVtZXJh
dG9yTWV0YWRhdGEpOworCisgICAgaXNOb3RPd25TdHJ1Y3R1cmVNb2RlLmxpbmsodGhpcyk7Cisg
ICAgSnVtcCBpc05vdEluZGV4ZWQgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDIsIFRydXN0ZWRJ
bW0zMihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlKSk7CisgICAgLy8gUmVw
bGFjZSB0aGUgc3RyaW5nIHdpdGggdGhlIGluZGV4LgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW5kZXgsIHJlZ1QxKTsKKworICAgIGlzTm90SW5kZXhlZC5saW5rKHRoaXMpOworICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworCisg
ICAgSklUR2V0QnlWYWxHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgSklUVHlw
ZTo6QmFzZWxpbmVKSVQsIENvZGVPcmlnaW4obV9ieXRlY29kZUluZGV4KSwgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlSW5kZXgpLCBBY2Nlc3NUeXBlOjpHZXRCeVZhbCwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVzdWx0R1BSKSwgcmVnVDIpOworICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBpZiAoIUpJVENvZGU6OnVzZURhdGFJQyhK
SVRUeXBlOjpCYXNlbGluZUpJVCkpCisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7CisgICAgZWxzZQorICAgICAgICBhZGRTbG93Q2FzZSgpOworICAgIG1fZ2V0QnlWYWxz
LmFwcGVuZChnZW4pOworCisgICAgZG9uZUNhc2VzLmxpbmsodGhpcyk7CisKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKG1ldGFkYXRhLCBKU1ZhbHVlUmVncyhyZXN1bHRHUFIpKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9l
bnVtZXJhdG9yX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBnZW5lcmF0
ZUdldEJ5VmFsU2xvd0Nhc2UoY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JHZXRC
eVZhbD4oKSwgaXRlcik7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcGNvZGVUeXBlLCB0eXBl
bmFtZSBTbG93UGF0aEZ1bmN0aW9uVHlwZT4KK3ZvaWQgSklUOjplbWl0X2VudW1lcmF0b3JfaGFz
X3Byb3BlcnR5SW1wbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBjb25z
dCBPcGNvZGVUeXBlJiBieXRlY29kZSwgU2xvd1BhdGhGdW5jdGlvblR5cGUgZ2VuZXJhbENhc2Up
Cit7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgVmlydHVhbFJlZ2lzdGVyIGRzdCA9IGJ5dGVjb2RlLm1fZHN0OworICAgIFZpcnR1YWxS
ZWdpc3RlciBiYXNlID0gYnl0ZWNvZGUubV9iYXNlOworICAgIFZpcnR1YWxSZWdpc3RlciBlbnVt
ZXJhdG9yID0gYnl0ZWNvZGUubV9lbnVtZXJhdG9yOworICAgIFZpcnR1YWxSZWdpc3RlciBtb2Rl
ID0gYnl0ZWNvZGUubV9tb2RlOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihtb2RlLCByZWdUMCk7CisgICAgb3I4KHJlZ1QwLCBBYnNvbHV0
ZUFkZHJlc3MoJm1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFkYXRhKSk7CisKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZSkpKTsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
Zk5vdENlbGwocmVnVDApKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRv
ciwgcmVnVDEpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVk
U3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93Q2FzZXMubGlu
ayh0aGlzKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBnZW5lcmFsQ2FzZSk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKwor
ICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9p
bl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
bWl0X2VudW1lcmF0b3JfaGFzX3Byb3BlcnR5SW1wbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9ySW5CeVZhbD4oKSwgc2xvd19wYXRoX2VudW1l
cmF0b3JfaW5fYnlfdmFsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9oYXNf
b3duX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdF9lbnVtZXJhdG9yX2hhc19wcm9wZXJ0eUltcGwoY3VycmVudEluc3RydWN0aW9uLCBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckhhc093blByb3BlcnR5PigpLCBzbG93
X3BhdGhfZW51bWVyYXRvcl9oYXNfb3duX3Byb3BlcnR5KTsKK30KKwogI2Vsc2UgLy8gVVNFKEpT
VkFMVUU2NCkKIAogdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoVmlydHVhbFJlZ2lzdGVyIG93
bmVyLCBWaXJ0dWFsUmVnaXN0ZXIgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CmluZGV4IDU4ZTVkNTJmZTViMDhhZTI5ZTNlNWRkZGUzZDc0Njc5NjdmMjMwMTkuLjc1ZDBiZDdm
NmVmMzVjNzYyNzMxM2YyNmJhNjVhMTY4ZDgzYjk0NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtMTUwNSw2ICsx
NTA1LDM1IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9pbnRlcm5hbF9maWVsZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB0ZW1wbGF0ZSB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsPE9wUHV0QnlWYWw+KGNvbnN0IEluc3RydWN0aW9uKik7CiAKK3ZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfbmV4dChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKKyAgICBzbG93UGF0aENh
bGwuY2FsbCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dldF9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2Vu
dW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQoreworICAgIFVOUkVBQ0hBQkxF
X0ZPUl9QTEFURk9STSgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2luX2J5
X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfZW51bWVyYXRvcl9pbl9ieV92YWwpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfaGFzX293bl9wcm9wZXJ0eShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW51bWVyYXRvcl9o
YXNfb3duX3Byb3BlcnR5KTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXggMzdi
NmRmMzBmMTBjM2EwMDFhNTY1NWVhMWJiMWRiNTk1NzNjZjYwOC4uZTcxODNhNzJhMzY4ZjFhMjgw
NDY4NGQyYjA3NjQ3ZjIyMDY4ZjEyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtMTk5MiwxOSArMTk5MiwxNCBAQCBz
bG93UGF0aE9wKGNyZWF0ZV9nZW5lcmF0b3IpCiBzbG93UGF0aE9wKGNyZWF0ZV9hc3luY19nZW5l
cmF0b3IpCiBzbG93UGF0aE9wKGRlZmluZV9hY2Nlc3Nvcl9wcm9wZXJ0eSkKIHNsb3dQYXRoT3Ao
ZGVmaW5lX2RhdGFfcHJvcGVydHkpCi1zbG93UGF0aE9wKGVudW1lcmF0b3JfZ2VuZXJpY19wbmFt
ZSkKLXNsb3dQYXRoT3AoZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpCiBzbG93UGF0aE9wKGdl
dF9ieV92YWxfd2l0aF90aGlzKQotc2xvd1BhdGhPcChnZXRfZGlyZWN0X3BuYW1lKQotc2xvd1Bh
dGhPcChnZXRfZW51bWVyYWJsZV9sZW5ndGgpCiBzbG93UGF0aE9wKGdldF9wcm9wZXJ0eV9lbnVt
ZXJhdG9yKQotc2xvd1BhdGhPcChoYXNfZW51bWVyYWJsZV9pbmRleGVkX3Byb3BlcnR5KQotc2xv
d1BhdGhPcChoYXNfZW51bWVyYWJsZV9wcm9wZXJ0eSkKK3Nsb3dQYXRoT3AoZW51bWVyYXRvcl9u
ZXh0KQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2dldF9ieV92YWwpCitzbG93UGF0aE9wKGVudW1l
cmF0b3JfaW5fYnlfdmFsKQorc2xvd1BhdGhPcChlbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkp
CiAKIGlmIG5vdCBKU1ZBTFVFNjQKLSAgICBzbG93UGF0aE9wKGhhc19lbnVtZXJhYmxlX3N0cnVj
dHVyZV9wcm9wZXJ0eSkKLSAgICBzbG93UGF0aE9wKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5
KQotICAgIHNsb3dQYXRoT3AoaW5fc3RydWN0dXJlX3Byb3BlcnR5KQogICAgIHNsb3dQYXRoT3Ao
Z2V0X3Byb3RvdHlwZV9vZikKIGVuZAogCkBAIC0yMDIxLDcgKzIwMTYsNiBAQCBzbG93UGF0aE9w
KHJlc29sdmVfc2NvcGVfZm9yX2hvaXN0aW5nX2Z1bmNfZGVjbF9pbl9ldmFsKQogc2xvd1BhdGhP
cChzcHJlYWQpCiBzbG93UGF0aE9wKHN0cmNhdCkKIHNsb3dQYXRoT3AodGhyb3dfc3RhdGljX2Vy
cm9yKQotc2xvd1BhdGhPcCh0b19pbmRleF9zdHJpbmcpCiBzbG93UGF0aE9wKHR5cGVvZikKIHNs
b3dQYXRoT3AodHlwZW9mX2lzX29iamVjdCkKIHNsb3dQYXRoT3AodHlwZW9mX2lzX2Z1bmN0aW9u
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQppbmRleCBiZDg4NTVlYmZkNmZjMTliMTVjMWI1ODg2ZDRmYTU1NjQzODJkODdk
Li44YTVmN2QyM2U2NDc2M2JhMjU5ZTFiMmM1ZDg3ZjhkMTZiODI5YWRhIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQpA
QCAtMzE0MSwzNCArMzE0MSw2IEBAIGxsaW50T3Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWws
IE9wTG9nU2hhZG93Q2hpY2tlblRhaWwsIG1hY3JvIChzaXplLCBnZXQsIGRpCiAgICAgZGlzcGF0
Y2goKQogZW5kKQogCi1tYWNybyBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBk
aXNwYXRjaCwgcmV0dXJuLCBzbG93UGF0aENhbGwpCi0gICAgZ2V0KG1fYmFzZSwgdDApCi0gICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZShzaXplLCB0MCwgdDEpCi0gICAgYnRxbnogdDEsIG5vdENl
bGxNYXNrLCAuc2xvd1BhdGgKLQotICAgIGxvYWRWYXJpYWJsZShnZXQsIG1fZW51bWVyYXRvciwg
dDApCi0gICAgbG9hZGkgSlNDZWxsOjptX3N0cnVjdHVyZUlEW3QxXSwgdDEKLSAgICBiaW5lcSB0
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjptX2NhY2hlZFN0cnVjdHVyZUlEW3QwXSwgLnNs
b3dQYXRoCi0KLSAgICByZXR1cm4oVmFsdWVUcnVlKQotCi0uc2xvd1BhdGg6Ci0gICAgY2FsbFNs
b3dQYXRoKHNsb3dQYXRoQ2FsbCkKLSAgICBkaXNwYXRjaCgpCi1lbmQKLQotbGxpbnRPcFdpdGhS
ZXR1cm4ob3BfaGFzX2VudW1lcmFibGVfc3RydWN0dXJlX3Byb3BlcnR5LCBPcEhhc0VudW1lcmFi
bGVTdHJ1Y3R1cmVQcm9wZXJ0eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikK
LSAgICBoYXNTdHJ1Y3R1cmVQcm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVy
biwgX3Nsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1cmVfcHJvcGVydHkpCi1lbmQpCi0K
LWxsaW50T3BXaXRoUmV0dXJuKG9wX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5LCBPcEhhc093
blN0cnVjdHVyZVByb3BlcnR5LCBtYWNybyAoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgcmV0dXJuKQot
ICAgIGhhc1N0cnVjdHVyZVByb3BlcnR5SW1wbChzaXplLCBnZXQsIGRpc3BhdGNoLCAgcmV0dXJu
LCBfc2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQotZW5kKQotCi1sbGludE9w
V2l0aFJldHVybihvcF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHksIE9wSW5TdHJ1Y3R1cmVQcm9wZXJ0
eSwgbWFjcm8gKHNpemUsIGdldCwgZGlzcGF0Y2gsIHJldHVybikKLSAgICBoYXNTdHJ1Y3R1cmVQ
cm9wZXJ0eUltcGwoc2l6ZSwgZ2V0LCBkaXNwYXRjaCwgIHJldHVybiwgX3Nsb3dfcGF0aF9pbl9z
dHJ1Y3R1cmVfcHJvcGVydHkpCi1lbmQpCi0KIG9wKGZ1enplcl9yZXR1cm5fZWFybHlfZnJvbV9s
b29wX2hpbnQsIG1hY3JvICgpCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCiAgICAgbG9h
ZHAgQ29kZUJsb2NrOjptX2dsb2JhbE9iamVjdFt0MF0sIHQwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAppbmRleCAxMTI5NTRiYjliNmU1
MDEzNjg4M2I3NDU2Y2IxZTgzMThmYjVhNTExLi4wYTFhNDczMjJlZjVjZDNjODVmMWI0NGYyMmUx
Y2M2NjBlNzBmMGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAKQEAgLTk2MiwxNjEgKzk2MiwxMzcgQEAgSlNDX0RFRklORV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0eV9rZXkpCiAgICAgUkVUVVJOKEdFVF9D
KGJ5dGVjb2RlLm1fc3JjKS5qc1ZhbHVlKCkudG9Qcm9wZXJ0eUtleVZhbHVlKGdsb2JhbE9iamVj
dCkpOwogfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9lbnVt
ZXJhYmxlX2xlbmd0aCkKK0pTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0
X3Byb3BlcnR5X2VudW1lcmF0b3IpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wR2V0RW51bWVyYWJsZUxlbmd0aD4oKTsKLSAgICBKU1ZhbHVlIGVudW1lcmF0
b3JWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotICAgIGlmIChlbnVt
ZXJhdG9yVmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgUkVUVVJOKGpzTnVtYmVy
KDApKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0UHJvcGVydHlFbnVtZXJhdG9y
PigpOworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1Zh
bHVlKCk7CisgICAgaWYgKGJhc2VWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBS
RVRVUk4odm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpOwogCi0gICAgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcio+KGVudW1lcmF0b3JWYWx1ZS5hc0NlbGwoKSk7CisgICAgSlNPYmplY3QqIGJhc2UgPSBi
YXNlVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBDSEVDS19FWENFUFRJT04oKTsK
IAotICAgIFJFVFVSTihqc051bWJlcihlbnVtZXJhdG9yLT5pbmRleGVkTGVuZ3RoKCkpKTsKKyAg
ICBSRVRVUk4ocHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2UpKTsKIH0K
IAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9p
bmRleGVkX3Byb3BlcnR5KQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9l
bnVtZXJhdG9yX25leHQpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMt
PmFzPE9wSGFzRW51bWVyYWJsZUluZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gcGMtPmFzPE9wRW51bWVyYXRvck5leHQ+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShjb2RlQmxvY2spOwotICAgIEpTT2JqZWN0KiBiYXNlID0gR0VUX0MoYnl0
ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKLSAgICBDSEVD
S19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJv
cGVydHkpLmpzVmFsdWUoKTsKLSAgICBtZXRhZGF0YS5tX2FycmF5UHJvZmlsZS5vYnNlcnZlU3Ry
dWN0dXJlKGJhc2UtPnN0cnVjdHVyZSh2bSkpOwotICAgIEFTU0VSVChwcm9wZXJ0eS5pc1VJbnQz
MkFzQW55SW50KCkpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzRW51bWVyYWJsZVBy
b3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHkuYXNVSW50MzJBc0FueUludCgpKSkpOwotfQor
ICAgIFJlZ2lzdGVyJiBtb2RlUmVnaXN0ZXIgPSBHRVQoYnl0ZWNvZGUubV9tb2RlKTsKKyAgICBS
ZWdpc3RlciYgaW5kZXhSZWdpc3RlciA9IEdFVChieXRlY29kZS5tX2luZGV4KTsKKyAgICBSZWdp
c3RlciYgbmFtZVJlZ2lzdGVyID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHlOYW1lKTsKIAotSlND
X0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9oYXNfZW51bWVyYWJsZV9zdHJ1Y3R1
cmVfcHJvcGVydHkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFz
PE9wSGFzRW51bWVyYWJsZVN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIEpTT2JqZWN0KiBiYXNl
ID0gR0VUX0MoYnl0ZWNvZGUubV9iYXNlKS5qc1ZhbHVlKCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0
KTsKLSAgICBDSEVDS19FWENFUFRJT04oKTsKLSAgICBKU1ZhbHVlIHByb3BlcnR5ID0gR0VUKGJ5
dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBSRUxFQVNFX0FTU0VSVChwcm9wZXJ0
eS5pc1N0cmluZygpKTsKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iq
PihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkuYXNDZWxsKCkpOwotICAgIGlm
IChiYXNlLT5zdHJ1Y3R1cmUodm0pLT5pZCgpID09IGVudW1lcmF0b3ItPmNhY2hlZFN0cnVjdHVy
ZUlEKCkpCi0gICAgICAgIFJFVFVSTihqc0Jvb2xlYW4odHJ1ZSkpOwotI2VuZGlmCi0gICAgSlNT
dHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5TmFt
ZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7Ci0gICAgUkVUVVJOKGpzQm9vbGVhbihiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHko
Z2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKSk7Ci19CisgICAgYXV0byBtb2RlID0gc3RhdGlj
X2Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpNb2RlPihtb2RlUmVnaXN0ZXIuanNWYWx1
ZSgpLmFzVUludDMyKCkpOworICAgIHVpbnQzMl90IGluZGV4ID0gaW5kZXhSZWdpc3Rlci5qc1Zh
bHVlKCkuYXNVSW50MzIoKTsKIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9oYXNfb3duX3N0cnVjdHVyZV9wcm9wZXJ0eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BIYXNPd25TdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKLSAgICBKU1Zh
bHVlIGJhc2UgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLQotI2lmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0g
anNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0
b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgaWYgKGJhc2UuaXNDZWxsKCkgJiYgYmFzZS5h
c0NlbGwoKS0+c3RydWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1
cmVJRCgpKQotICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKLSNlbmRpZgorICAgIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2FzdDxKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5qc1ZhbHVlKCkpOworICAg
IEpTVmFsdWUgYmFzZVZhbHVlID0gR0VUKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOworICAg
IEFTU0VSVCghYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpOworICAgIEpTT2JqZWN0KiBi
YXNlID0gYmFzZVZhbHVlLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgQ0hFQ0tfRVhDRVBU
SU9OKCk7CisgICAgbWV0YWRhdGEubV9hcnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZUlEKGJh
c2UtPnN0cnVjdHVyZUlEKCkpOwogCi0gICAgSlNWYWx1ZSBwcm9wZXJ0eSA9IEdFVChieXRlY29k
ZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQocHJvcGVydHkuaXNT
dHJpbmcoKSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHByb3BlcnR5KTsKLSAg
ICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGdsb2JhbE9iamVjdCk7
CisgICAgSlNTdHJpbmcqIG5hbWUgPSBlbnVtZXJhdG9yLT5jb21wdXRlTmV4dChnbG9iYWxPYmpl
Y3QsIGJhc2UsIGluZGV4LCBtb2RlKTsKICAgICBDSEVDS19FWENFUFRJT04oKTsKIAotICAgIFJF
VFVSTihqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVydHkoZ2xvYmFsT2JqZWN0
LCBiYXNlLCBwcm9wZXJ0eU5hbWUpKSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRh
dGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSk7CisgICAgbW9kZVJlZ2lzdGVyID0ganNO
dW1iZXIoc3RhdGljX2Nhc3Q8dWludDhfdD4obW9kZSkpOworICAgIGluZGV4UmVnaXN0ZXIgPSBq
c051bWJlcihpbmRleCk7CisgICAgbmFtZVJlZ2lzdGVyID0gbmFtZSA/IG5hbWUgOiBqc051bGwo
KTsKKyAgICBFTkQoKTsKIH0KIAotSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0
aF9pbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCitKU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BBVEgoc2xv
d19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCkKIHsKICAgICBCRUdJTigpOwotICAgIGF1dG8g
Ynl0ZWNvZGUgPSBwYy0+YXM8T3BJblN0cnVjdHVyZVByb3BlcnR5PigpOwotICAgIEpTVmFsdWUg
YmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpOwotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVtZXJhdG9yID0ganNDYXN0
PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5tX2VudW1lcmF0b3IpLmpz
VmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgaWYgKGJhc2UuaXNDZWxsKCkgJiYgYmFzZS5hc0NlbGwo
KS0+c3RydWN0dXJlKHZtKS0+aWQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgp
KQotICAgICAgICBSRVRVUk4oanNCb29sZWFuKHRydWUpKTsKLSNlbmRpZgotICAgIEpTVmFsdWUg
cHJvcGVydHkgPSBHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eSkuanNWYWx1ZSgpOwotICAgIFJFTEVB
U0VfQVNTRVJUKHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIFJFVFVSTihqc0Jvb2xlYW4oQ29t
bW9uU2xvd1BhdGhzOjpvcEluQnlWYWwoZ2xvYmFsT2JqZWN0LCBiYXNlLCBhc1N0cmluZyhwcm9w
ZXJ0eSkpKSk7Ci19CisgICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEVudW1lcmF0b3JHZXRC
eVZhbD4oKTsKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSku
anNWYWx1ZSgpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEoY29kZUJs
b2NrKTsKKyAgICBhdXRvIG1vZGUgPSBzdGF0aWNfY2FzdDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3I6Ok1vZGU+KEdFVChieXRlY29kZS5tX21vZGUpLmpzVmFsdWUoKS5hc1VJbnQzMigpKTsKKyAg
ICBtZXRhZGF0YS5tX2VudW1lcmF0b3JNZXRhZGF0YSB8PSBzdGF0aWNfY2FzdDx1aW50OF90Piht
b2RlKTsKKworICAgIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciogZW51bWVyYXRvciA9IGpzQ2Fz
dDxKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqPihHRVQoYnl0ZWNvZGUubV9lbnVtZXJhdG9yKS5q
c1ZhbHVlKCkpOworICAgIHVuc2lnbmVkIGluZGV4ID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpz
VmFsdWUoKS5hc0ludDMyKCk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOiB7CisgICAgICAgIGlmIChMSUtFTFkoYmFz
ZVZhbHVlLmlzQ2VsbCgpKSkKKyAgICAgICAgICAgIG1ldGFkYXRhLm1fYXJyYXlQcm9maWxlLm9i
c2VydmVTdHJ1Y3R1cmVJRChiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkpOworICAg
ICAgICBSRVRVUk5fUFJPRklMRUQoYmFzZVZhbHVlLmdldChnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbmRleCkpKTsKKyAgICB9CisgICAgY2FzZSBKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGU6IHsKKyAgICAgICAgaWYgKExJS0VMWShiYXNlVmFs
dWUuaXNDZWxsKCkpICYmIGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlSUQoKSA9PSBlbnVt
ZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKSB7CisgICAgICAgICAgICAvLyBXZSdsbCBvbmx5
IG1hdGNoIHRoZSBzdHJ1Y3R1cmUgSUQgaWYgdGhlIGJhc2UgaXMgYW4gb2JqZWN0LgorICAgICAg
ICAgICAgQVNTRVJUKGluZGV4IDwgZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eCgpKTsKKyAgICAgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0T2JqZWN0KCkt
PmdldERpcmVjdChpbmRleCA8IGVudW1lcmF0b3ItPmNhY2hlZElubGluZUNhcGFjaXR5KCkgPyBp
bmRleCA6IGluZGV4IC0gZW51bWVyYXRvci0+Y2FjaGVkSW5saW5lQ2FwYWNpdHkoKSArIGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbWV0YWRhdGEu
bV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWludDhfdD4oSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpIYXNTZWVuT3duU3RydWN0dXJlTW9kZVN0cnVjdHVyZU1pc21hdGNoKTsK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KQotewotICAgIEJFR0lOKCk7Ci0g
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEhhc0VudW1lcmFibGVQcm9wZXJ0eT4oKTsKLSAg
ICBKU09iamVjdCogYmFzZSA9IEdFVF9DKGJ5dGVjb2RlLm1fYmFzZSkuanNWYWx1ZSgpLnRvT2Jq
ZWN0KGdsb2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgSlNWYWx1ZSBw
cm9wZXJ0eSA9IEdFVChieXRlY29kZS5tX3Byb3BlcnR5KS5qc1ZhbHVlKCk7Ci0gICAgQVNTRVJU
KHByb3BlcnR5LmlzU3RyaW5nKCkpOwotICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhw
cm9wZXJ0eSk7Ci0gICAgYXV0byBwcm9wZXJ0eU5hbWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihn
bG9iYWxPYmplY3QpOwotICAgIENIRUNLX0VYQ0VQVElPTigpOwotICAgIFJFVFVSTihqc0Jvb2xl
YW4oYmFzZS0+aGFzRW51bWVyYWJsZVByb3BlcnR5KGdsb2JhbE9iamVjdCwgcHJvcGVydHlOYW1l
KSkpOwotfQorICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpHZW5lcmljTW9kZTog
eworICAgICAgICBpZiAoYmFzZVZhbHVlLmlzQ2VsbCgpICYmIG1vZGUgIT0gSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpPd25TdHJ1Y3R1cmVNb2RlKQorICAgICAgICAgICAgbWV0YWRhdGEubV9h
cnJheVByb2ZpbGUub2JzZXJ2ZVN0cnVjdHVyZUlEKGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlSUQoKSk7CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNv
ZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgICAgIGF1dG8gcHJvcGVydHlOYW1l
ID0gc3RyaW5nLT50b0lkZW50aWZpZXIoZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgQ0hFQ0tfRVhD
RVBUSU9OKCk7CisgICAgICAgIFJFVFVSTl9QUk9GSUxFRChiYXNlVmFsdWUuZ2V0KGdsb2JhbE9i
amVjdCwgcHJvcGVydHlOYW1lKSk7CisgICAgfQogCi1KU0NfREVGSU5FX0NPTU1PTl9TTE9XX1BB
VEgoc2xvd19wYXRoX2dldF9kaXJlY3RfcG5hbWUpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBhdXRv
IGJ5dGVjb2RlID0gcGMtPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7Ci0gICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFsdWUoKTsKLSAgICBKU1ZhbHVlIHBy
b3BlcnR5ID0gR0VUKGJ5dGVjb2RlLm1fcHJvcGVydHkpLmpzVmFsdWUoKTsKLSAgICBBU1NFUlQo
cHJvcGVydHkuaXNTdHJpbmcoKSk7Ci0gICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHBy
b3BlcnR5KTsKLSAgICBhdXRvIHByb3BlcnR5TmFtZSA9IHN0cmluZy0+dG9JZGVudGlmaWVyKGds
b2JhbE9iamVjdCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKCk7Ci0gICAgUkVUVVJOKGJhc2VWYWx1
ZS5nZXQoZ2xvYmFsT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Owor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X3Byb3BlcnR5X2VudW1lcmF0b3IpCitKU0NfREVGSU5F
X0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfaW5fYnlfdmFsKQogewogICAg
IEJFR0lOKCk7Ci0gICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcEdldFByb3BlcnR5RW51bWVy
YXRvcj4oKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckluQnlWYWw+
KCk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5tX2Jhc2UpLmpzVmFs
dWUoKTsKLSAgICBpZiAoYmFzZVZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIFJF
VFVSTih2bS5lbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3IoKSk7CisgICAgYXV0byYgbWV0YWRh
dGEgPSBieXRlY29kZS5tZXRhZGF0YShjb2RlQmxvY2spOworICAgIGF1dG8gbW9kZSA9IHN0YXRp
Y19jYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT4oR0VUKGJ5dGVjb2RlLm1fbW9k
ZSkuanNWYWx1ZSgpLmFzVUludDMyKCkpOworICAgIG1ldGFkYXRhLm1fZW51bWVyYXRvck1ldGFk
YXRhIHw9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KG1vZGUpOwogCi0gICAgSlNPYmplY3QqIGJhc2Ug
PSBiYXNlVmFsdWUudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKICAgICBDSEVDS19FWENFUFRJT04o
KTsKKyAgICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1
ZSgpKTsKKyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3QoKSkgeworICAg
ICAgICBpZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1v
ZGUgJiYgYmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJ
RCgpKQorICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAKLSAgICBSRVRVUk4o
cHJvcGVydHlOYW1lRW51bWVyYXRvcihnbG9iYWxPYmplY3QsIGJhc2UpKTsKLX0KLQotSlNDX0RF
RklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFt
ZSkKLXsKLSAgICBCRUdJTigpOwotICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJh
dG9yU3RydWN0dXJlUG5hbWU+KCk7Ci0gICAgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKiBlbnVt
ZXJhdG9yID0ganNDYXN0PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcio+KEdFVChieXRlY29kZS5t
X2VudW1lcmF0b3IpLmpzVmFsdWUoKS5hc0NlbGwoKSk7Ci0gICAgdWludDMyX3QgaW5kZXggPSBH
RVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyQXNBbnlJbnQoKTsKKyAgICAg
ICAgaWYgKG1vZGUgPT0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpJbmRleGVkTW9kZSkKKyAg
ICAgICAgICAgIFJFVFVSTihqc0Jvb2xlYW4oYmFzZS0+aGFzUHJvcGVydHkoZ2xvYmFsT2JqZWN0
LCBHRVQoYnl0ZWNvZGUubV9pbmRleCkuanNWYWx1ZSgpLmFzVUludDMyKCkpKSk7CisgICAgfQog
Ci0gICAgSlNTdHJpbmcqIHByb3BlcnR5TmFtZSA9IG51bGxwdHI7Ci0gICAgaWYgKGluZGV4IDwg
ZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpKQotICAgICAgICBwcm9wZXJ0
eU5hbWUgPSBlbnVtZXJhdG9yLT5wcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKLSAgICBSRVRV
Uk4ocHJvcGVydHlOYW1lID8gcHJvcGVydHlOYW1lIDoganNOdWxsKCkpOworICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBhc1N0cmluZyhHRVQoYnl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUo
KSk7CisgICAgUkVUVVJOKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6Om9wSW5CeVZhbChnbG9i
YWxPYmplY3QsIGJhc2VWYWx1ZSwgc3RyaW5nLCAmbWV0YWRhdGEubV9hcnJheVByb2ZpbGUpKSk7
CiB9CiAKLUpTQ19ERUZJTkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9n
ZW5lcmljX3BuYW1lKQorSlNDX0RFRklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVt
ZXJhdG9yX2hhc19vd25fcHJvcGVydHkpCiB7CiAgICAgQkVHSU4oKTsKLSAgICBhdXRvIGJ5dGVj
b2RlID0gcGMtPmFzPE9wRW51bWVyYXRvckdlbmVyaWNQbmFtZT4oKTsKLSAgICBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpLmFzQ2VsbCgpKTsKLSAg
ICB1aW50MzJfdCBpbmRleCA9IEdFVChieXRlY29kZS5tX2luZGV4KS5qc1ZhbHVlKCkuYXNVSW50
MzJBc0FueUludCgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBwYy0+YXM8T3BFbnVtZXJhdG9ySGFz
T3duUHJvcGVydHk+KCk7CisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBHRVRfQyhieXRlY29kZS5t
X2Jhc2UpLmpzVmFsdWUoKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KGNvZGVCbG9jayk7CisgICAgYXV0byBtb2RlID0gc3RhdGljX2Nhc3Q8SlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpNb2RlPihHRVQoYnl0ZWNvZGUubV9tb2RlKS5qc1ZhbHVlKCkuYXNVSW50MzIo
KSk7CisgICAgbWV0YWRhdGEubV9lbnVtZXJhdG9yTWV0YWRhdGEgfD0gc3RhdGljX2Nhc3Q8dWlu
dDhfdD4obW9kZSk7CiAKLSAgICBKU1N0cmluZyogcHJvcGVydHlOYW1lID0gbnVsbHB0cjsKLSAg
ICBpZiAoZW51bWVyYXRvci0+ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleCgpIDw9IGluZGV4ICYm
IGluZGV4IDwgZW51bWVyYXRvci0+ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKSkKLSAgICAgICAg
cHJvcGVydHlOYW1lID0gZW51bWVyYXRvci0+cHJvcGVydHlOYW1lQXRJbmRleChpbmRleCk7Ci0g
ICAgUkVUVVJOKHByb3BlcnR5TmFtZSA/IHByb3BlcnR5TmFtZSA6IGpzTnVsbCgpKTsKLX0KKyAg
ICBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IqIGVudW1lcmF0b3IgPSBqc0Nhc3Q8SlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yKj4oR0VUKGJ5dGVjb2RlLm1fZW51bWVyYXRvcikuanNWYWx1ZSgpKTsK
KyAgICBpZiAoYXV0byogYmFzZSA9IGJhc2VWYWx1ZS5nZXRPYmplY3QoKSkgeworICAgICAgICBp
ZiAobW9kZSA9PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGUgJiYg
YmFzZS0+c3RydWN0dXJlSUQoKSA9PSBlbnVtZXJhdG9yLT5jYWNoZWRTdHJ1Y3R1cmVJRCgpKQor
ICAgICAgICAgICAgUkVUVVJOKGpzQm9vbGVhbih0cnVlKSk7CiAKLUpTQ19ERUZJTkVfQ09NTU9O
X1NMT1dfUEFUSChzbG93X3BhdGhfdG9faW5kZXhfc3RyaW5nKQotewotICAgIEJFR0lOKCk7Ci0g
ICAgYXV0byBieXRlY29kZSA9IHBjLT5hczxPcFRvSW5kZXhTdHJpbmc+KCk7Ci0gICAgSlNWYWx1
ZSBpbmRleFZhbHVlID0gR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKTsKLSAgICBBU1NF
UlQoaW5kZXhWYWx1ZS5pc1VJbnQzMkFzQW55SW50KCkpOwotICAgIFJFVFVSTihqc1N0cmluZyh2
bSwgSWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXhWYWx1ZS5hc1VJbnQzMkFzQW55SW50KCkpLnN0
cmluZygpKSk7CisgICAgICAgIGlmIChtb2RlID09IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6
SW5kZXhlZE1vZGUpCisgICAgICAgICAgICBSRVRVUk4oanNCb29sZWFuKGJhc2UtPmhhc093blBy
b3BlcnR5KGdsb2JhbE9iamVjdCwgR0VUKGJ5dGVjb2RlLm1faW5kZXgpLmpzVmFsdWUoKS5hc1VJ
bnQzMigpKSkpOworICAgIH0KKworICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyhHRVQo
Ynl0ZWNvZGUubV9wcm9wZXJ0eU5hbWUpLmpzVmFsdWUoKSk7CisgICAgYXV0byBwcm9wZXJ0eU5h
bWUgPSBzdHJpbmctPnRvSWRlbnRpZmllcihnbG9iYWxPYmplY3QpOworICAgIENIRUNLX0VYQ0VQ
VElPTigpOworICAgIFJFVFVSTihqc0Jvb2xlYW4ob2JqZWN0UHJvdG90eXBlSGFzT3duUHJvcGVy
dHkoZ2xvYmFsT2JqZWN0LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSkpKTsKIH0KIAogSlNDX0RF
RklORV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9wcm9maWxlX3R5cGVfY2xlYXJfbG9nKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAppbmRl
eCBkOGQxNTAxZmIzNWJhYzI3OTRjNmQ5NDEwMjcxYmI2OGY0Y2MwNTdlLi5hNWUwMTVkNTNhNjll
NjA1M2FmNGRiYjMxYjJjOGYyNTdjMGRiMWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaApAQCAtMjU0LDE3ICsyNTQsMTEgQEAgSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaXNfY29uc3RydWN0b3IpOwogSlNDX0RF
Q0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfc3RyY2F0KTsKIEpTQ19ERUNMQVJFX0NP
TU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX3RvX3ByaW1pdGl2ZSk7CiBKU0NfREVDTEFSRV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF90b19wcm9wZXJ0eV9rZXkpOwotSlNDX0RFQ0xBUkVfQ09N
TU9OX1NMT1dfUEFUSChzbG93X3BhdGhfZ2V0X2VudW1lcmFibGVfbGVuZ3RoKTsKLUpTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX2luZGV4ZWRfcHJv
cGVydHkpOwotSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfaGFzX2VudW1l
cmFibGVfc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgo
c2xvd19wYXRoX2hhc19lbnVtZXJhYmxlX3Byb3BlcnR5KTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9T
TE9XX1BBVEgoc2xvd19wYXRoX2hhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KTsKLUpTQ19ERUNM
QVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2luX3N0cnVjdHVyZV9wcm9wZXJ0eSk7Ci1K
U0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9nZXRfZGlyZWN0X3BuYW1lKTsK
IEpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2dldF9wcm9wZXJ0eV9lbnVt
ZXJhdG9yKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19wYXRoX2VudW1lcmF0
b3Jfc3RydWN0dXJlX3BuYW1lKTsKLUpTQ19ERUNMQVJFX0NPTU1PTl9TTE9XX1BBVEgoc2xvd19w
YXRoX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk7Ci1KU0NfREVDTEFSRV9DT01NT05fU0xPV19Q
QVRIKHNsb3dfcGF0aF90b19pbmRleF9zdHJpbmcpOworSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1df
UEFUSChzbG93X3BhdGhfZW51bWVyYXRvcl9uZXh0KTsKK0pTQ19ERUNMQVJFX0NPTU1PTl9TTE9X
X1BBVEgoc2xvd19wYXRoX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCk7CitKU0NfREVDTEFSRV9DT01N
T05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2luX2J5X3ZhbCk7CitKU0NfREVDTEFS
RV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9lbnVtZXJhdG9yX2hhc19vd25fcHJvcGVydHkp
OwogSlNDX0RFQ0xBUkVfQ09NTU9OX1NMT1dfUEFUSChzbG93X3BhdGhfcHJvZmlsZV90eXBlX2Ns
ZWFyX2xvZyk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF91bnJlYWNo
YWJsZSk7CiBKU0NfREVDTEFSRV9DT01NT05fU0xPV19QQVRIKHNsb3dfcGF0aF9jcmVhdGVfbGV4
aWNhbF9lbnZpcm9ubWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2VudC5jcHAKaW5kZXggZTJjYTE2MmUwYjU0ZTI1Y2YwNjll
ZWE4Yzg3ZTFlZWEyZTRjZDViZS4uMWIwMzEzMGYwYTVjMDdjMzM1Y2M1ODU2ODNiYjY0NWVlNTNl
MDhiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2Vk
RnV6emVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVC
YXNlZEZ1enplckFnZW50LmNwcApAQCAtOTAsNyArOTAsNiBAQCBTcGVjdWxhdGVkVHlwZSBGaWxl
QmFzZWRGdXp6ZXJBZ2VudDo6Z2V0UHJlZGljdGlvbkludGVybmFsKENvZGVCbG9jayogY29kZUJs
b2NrLAogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbF93aXRoX3RoaXM6
Ci0gICAgY2FzZSBvcF9nZXRfZGlyZWN0X3BuYW1lOgogICAgIGNhc2Ugb3BfY29uc3RydWN0Ogog
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6
ZXJBZ2VudEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRmlsZUJhc2Vk
RnV6emVyQWdlbnRCYXNlLmNwcAppbmRleCBmMTM5ZDRhNDQ3YjI3MGY5ZWQzM2Y3ZGZkMzVlMDJh
ZmZjMzFjNzAzLi4xNzBmMWE2MGRhYmIyNTY3MWMwZWQ2Y2QzNzVjMGI5YjEyOGQxNjY1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GaWxlQmFzZWRGdXp6ZXJBZ2Vu
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ZpbGVCYXNlZEZ1
enplckFnZW50QmFzZS5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
OS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTIsNyArNTIsNyBAQCBPcGNvZGVJRCBGaWxlQmFzZWRGdXp6ZXJB
Z2VudEJhc2U6Om9wY29kZUFsaWFzRm9yTG9va3VwS2V5KGNvbnN0IE9wY29kZUlEJiBvcGNvZAog
ewogICAgIGlmIChvcGNvZGVJZCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSWQgPT0gb3Bf
Y2FsbF9ldmFsIHx8IG9wY29kZUlkID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJZCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncykKICAgICAgICAgcmV0dXJuIG9wX2NhbGw7Ci0gICAgaWYgKG9wY29k
ZUlkID09IG9wX2dldF9kaXJlY3RfcG5hbWUgfHwgb3Bjb2RlSWQgPT0gb3BfZ2V0X2J5X3ZhbF93
aXRoX3RoaXMpCisgICAgaWYgKG9wY29kZUlkID09IG9wX2VudW1lcmF0b3JfZ2V0X2J5X3ZhbCB8
fCBvcGNvZGVJZCA9PSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpcykKICAgICAgICAgcmV0dXJuIG9w
X2dldF9ieV92YWw7CiAgICAgaWYgKG9wY29kZUlkID09IG9wX2NvbnN0cnVjdF92YXJhcmdzKQog
ICAgICAgICByZXR1cm4gb3BfY29uc3RydWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCmluZGV4IDI0ZmNmMDgxNWUyNTA0OTVlMDMxNzk0
YTA2ZTRiMzEwNWM3ODRmYjQuLjE1ZjViMDY0ZWNiZmM2NThhOTkwZDJlYjU5NjM1YmYyYmRiZTg4
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKQEAgLTE0NjEsNiArMTQ2MSwxMCBAQCBjYXBpdGFsTmFtZSAjIyBDb25zdHJ1Y3Rvciog
bG93ZXJOYW1lICMjIENvbnN0cnVjdG9yID0gZmVhdHVyZUZsYWcgPyBjYXBpdGFsTmFtZQogICAg
ICAgICB9KTsKICNlbmRpZgogCisgICAgbV9saW5rVGltZUNvbnN0YW50c1tzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oTGlua1RpbWVDb25zdGFudDo6ZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKV0u
aW5pdExhdGVyKFtdIChjb25zdCBJbml0aWFsaXplcjxKU0NlbGw+JiBpbml0KSB7CisgICAgICAg
IGluaXQuc2V0KGluaXQudm0uZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKCkpOworICAgIH0p
OworCiAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZVByb2ZpbGVyc09uR2xvYmFsT2JqZWN0KCkpIHsK
ICNpZiBFTkFCTEUoU0FNUExJTkdfUFJPRklMRVIpCiAgICAgICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiX19lbmFibGVTYW1wbGlu
Z1Byb2ZpbGVyIiksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIGVu
YWJsZVNhbXBsaW5nUHJvZmlsZXIpLCBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gfCBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSB8IFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yLmNwcAppbmRleCAyMWM3MGEyN2I2OTFiZTA1NjkwYTJmYWU3N2M2OTkx
MmFlZWMxMTlkLi4wNjZjMTNhMGM3OTY0MmNhNDQwNGU0MmNiZDlkMGEwZDI1Y2E5N2JmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5jcHAKQEAgLTU2LDYgKzU2LDEyIEBAIEpTUHJvcGVydHlOYW1lRW51bWVy
YXRvcjo6SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsCiAgICAgLCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KHByb3BlcnR5TmFtZXNTaXplKQog
ICAgICwgbV9jYWNoZWRJbmxpbmVDYXBhY2l0eShzdHJ1Y3R1cmUgPyBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkgOiAwKQogeworICAgIGlmIChtX2luZGV4ZWRMZW5ndGgpCisgICAgICAgIG1f
bW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkluZGV4ZWRNb2RlOworICAgIGlm
IChtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAgIG1fbW9kZVNldCB8PSBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6Ok93blN0cnVjdHVyZU1vZGU7CisgICAgaWYgKG1fZW5kR2Vu
ZXJpY1Byb3BlcnR5SW5kZXggLSBtX2VuZFN0cnVjdHVyZVByb3BlcnR5SW5kZXgpCisgICAgICAg
IG1fbW9kZVNldCB8PSBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OkdlbmVyaWNNb2RlOwogfQog
CiB2b2lkIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBS
ZWZQdHI8UHJvcGVydHlOYW1lQXJyYXlEYXRhPiYmIGlkZW50aWZpZXJzKQpAQCAtMTQ4LDQgKzE1
NCw3MCBAQCB2b2lkIGdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTT2JqZWN0KiBiYXNlLCBQcgogICAgIH0KIH0KIAorSlNTdHJpbmcqIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y29tcHV0ZU5leHQoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNPYmplY3QqIGJhc2UsIHVpbnQzMl90JiBpbmRleCwgTW9kZSYgbW9kZSwgYm9v
bCBzaG91bGRBbGxvY2F0ZUluZGV4ZWROYW1lU3RyaW5nKQoreworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisKKyAgICBBU1NFUlQoaW5kZXhlZExlbmd0aCgpIHx8IHNpemVPZlByb3BlcnR5TmFtZXMoKSk7
CisKKyAgICBpbmRleCsrOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSW5pdE1vZGU6
IHsKKyAgICAgICAgbW9kZSA9IEluZGV4ZWRNb2RlOworICAgICAgICBpbmRleCA9IDA7CisgICAg
ICAgIEZBTExUSFJPVUdIOworICAgIH0KKworICAgIGNhc2UgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yOjpJbmRleGVkTW9kZTogeworICAgICAgICB3aGlsZSAoaW5kZXggPCBpbmRleGVkTGVuZ3Ro
KCkgJiYgIWJhc2UtPmhhc0VudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxPYmplY3QsIGluZGV4KSkg
eworICAgICAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBpbmRleCsrOworICAgICAgICB9CisgICAgICAgIHNjb3BlLmFzc2VydE5vRXhjZXB0
aW9uKCk7CisKKyAgICAgICAgaWYgKGluZGV4IDwgaW5kZXhlZExlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHNob3VsZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPyBqc1N0cmluZyh2bSwg
SWRlbnRpZmllcjo6ZnJvbSh2bSwgaW5kZXgpLnN0cmluZygpKSA6IG51bGxwdHI7CisKKyAgICAg
ICAgaWYgKCFzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBtb2RlID0gT3duU3RydWN0dXJlTW9kZTsKKyAgICAgICAgaW5kZXggPSAw
OworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICB9CisKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6T3duU3RydWN0dXJlTW9kZToKKyAgICBjYXNlIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6R2VuZXJpY01vZGU6IHsKKyAgICAgICAgSlNTdHJpbmcqIG5hbWUgPSBudWxscHRy
OworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgaWYgKGluZGV4ID49IHNpemVP
ZlByb3BlcnR5TmFtZXMoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG5h
bWUgPSBwcm9wZXJ0eU5hbWVBdEluZGV4KGluZGV4KTsKKyAgICAgICAgICAgIGlmICghbmFtZSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IGVuZFN0cnVj
dHVyZVByb3BlcnR5SW5kZXgoKSAmJiBiYXNlLT5zdHJ1Y3R1cmVJRCgpID09IGNhY2hlZFN0cnVj
dHVyZUlEKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhdXRvIGlkID0g
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgbmFtZS0+dmFsdWUoZ2xvYmFsT2JqZWN0KSk7Cisg
ICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIGlmIChiYXNlLT5oYXNFbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsT2JqZWN0LCBpZCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKKyAgICAgICAgICAgIG5hbWUgPSBudWxscHRyOworICAgICAgICAgICAg
aW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICBzY29wZS5hc3NlcnROb0V4Y2VwdGlvbigpOwor
CisgICAgICAgIGlmIChpbmRleCA+PSBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4KCkgJiYgaW5k
ZXggPCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkpCisgICAgICAgICAgICBtb2RlID0gR2VuZXJpY01v
ZGU7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKaW5k
ZXggMDIwMTFkNDFjN2Y2NmRhZDg4M2FlOGQ3NzBiNWQzZDI4NmNkNTA4Ny4uN2Q0ODFlODlmMjRk
OTNjZDRjOWQzOWU4MTFjYmI3MTFiZDM4YzBkOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgKQEAgLTI4LDcg
KzI4LDcgQEAKICNpbmNsdWRlICJKU0Nhc3QuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAj
aW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmVDaGFpbi5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzcsNiAr
MzcsMTcgQEAgcHVibGljOgogICAgIHVzaW5nIEJhc2UgPSBKU0NlbGw7CiAgICAgc3RhdGljIGNv
bnN0ZXhwciB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwg
U3RydWN0dXJlSXNJbW1vcnRhbDsKIAorICAgIGVudW0gTW9kZSA6IHVpbnQ4X3QgeworICAgICAg
ICBJbml0TW9kZSA9IDAsCisgICAgICAgIEluZGV4ZWRNb2RlID0gMSA8PCAwLAorICAgICAgICBP
d25TdHJ1Y3R1cmVNb2RlID0gMSA8PCAxLAorICAgICAgICBHZW5lcmljTW9kZSA9IDEgPDwgMiwK
KyAgICAgICAgLy8gUHJvZmlsaW5nIE9ubHkKKyAgICAgICAgSGFzU2Vlbk93blN0cnVjdHVyZU1v
ZGVTdHJ1Y3R1cmVNaXNtYXRjaCA9IDEgPDwgMywKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
ZXhwciB1aW50OF90IGVudW1lcmF0aW9uTW9kZU1hc2sgPSAoR2VuZXJpY01vZGUgPDwgMSkgLSAx
OworCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2VsbFR5cGUsIFN1YnNwYWNlQWNjZXNzIG1vZGU+
CiAgICAgc3RhdGljIElzb1N1YnNwYWNlKiBzdWJzcGFjZUZvcihWTSYgdm0pCiAgICAgewpAQCAt
NzQsMTYgKzg1LDIwIEBAIHB1YmxpYzoKICAgICB1aW50MzJfdCBlbmRHZW5lcmljUHJvcGVydHlJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXg7IH0KICAgICB1
aW50MzJfdCBjYWNoZWRJbmxpbmVDYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW5s
aW5lQ2FwYWNpdHk7IH0KICAgICB1aW50MzJfdCBzaXplT2ZQcm9wZXJ0eU5hbWVzKCkgY29uc3Qg
eyByZXR1cm4gZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXgoKTsgfQorICAgIHVpbnQzMl90IG1vZGVT
ZXQoKSBjb25zdCB7IHJldHVybiBtX21vZGVTZXQ7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IGNh
Y2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvciwgbV9jYWNoZWRTdHJ1Y3R1cmVJRCk7IH0KICAgICBzdGF0aWMgcHRy
ZGlmZl90IGluZGV4ZWRMZW5ndGhPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2luZGV4ZWRMZW5ndGgpOyB9CiAgICAgc3RhdGljIHB0
cmRpZmZfdCBlbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEpTUHJvcGVydHlOYW1lRW51bWVyYXRvciwgbV9lbmRTdHJ1Y3R1cmVQcm9wZXJ0
eUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhP
ZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LCBtX2VuZEdlbmVyaWNQcm9wZXJ0eUluZGV4KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3QgY2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLCBtX2NhY2hlZElubGluZUNhcGFjaXR5KTsgfQorICAgIHN0YXRp
YyBwdHJkaWZmX3QgbW9kZVNldE9mZnNldCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fbW9kZVNldCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90
IGNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKQogICAgIHsKICAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IsIG1fcHJvcGVydHlOYW1l
cyk7CiAgICAgfQogCisgICAgSlNTdHJpbmcqIGNvbXB1dGVOZXh0KEpTR2xvYmFsT2JqZWN0Kiwg
SlNPYmplY3QqIGJhc2UsIHVpbnQzMl90JiBjdXJyZW50SW5kZXgsIE1vZGUmLCBib29sIHNob3Vs
ZEFsbG9jYXRlSW5kZXhlZE5hbWVTdHJpbmcgPSB0cnVlKTsKKwogICAgIERFQ0xBUkVfVklTSVRf
Q0hJTERSRU47CiAKIHByaXZhdGU6CkBAIC05OSw2ICsxMTQsNyBAQCBwcml2YXRlOgogICAgIHVp
bnQzMl90IG1fZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleDsKICAgICB1aW50MzJfdCBtX2VuZEdl
bmVyaWNQcm9wZXJ0eUluZGV4OwogICAgIHVpbnQzMl90IG1fY2FjaGVkSW5saW5lQ2FwYWNpdHk7
CisgICAgdWludDMyX3QgbV9tb2RlU2V0IHsgMCB9OwogfTsKIAogdm9pZCBnZXRFbnVtZXJhYmxl
UHJvcGVydHlOYW1lcyhKU0dsb2JhbE9iamVjdCosIEpTT2JqZWN0KiwgUHJvcGVydHlOYW1lQXJy
YXkmLCB1aW50MzJfdCYgaW5kZXhlZExlbmd0aCwgdWludDMyX3QmIHN0cnVjdHVyZVByb3BlcnR5
Q291bnQpOwpAQCAtMTM0LDcgKzE1MCwxMCBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJh
dG9yKiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAg
ICAgICBudW1iZXJTdHJ1Y3R1cmVQcm9wZXJ0aWVzID0gMDsKICAgICB9CiAKLSAgICBlbnVtZXJh
dG9yID0gSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjcmVhdGUodm0sIHN0cnVjdHVyZUFmdGVy
R2V0dGluZ1Byb3BlcnR5TmFtZXMsIGluZGV4ZWRMZW5ndGgsIG51bWJlclN0cnVjdHVyZVByb3Bl
cnRpZXMsIFdURk1vdmUocHJvcGVydHlOYW1lcykpOworICAgIGlmICghaW5kZXhlZExlbmd0aCAm
JiAhcHJvcGVydHlOYW1lcy5zaXplKCkpCisgICAgICAgIGVudW1lcmF0b3IgPSB2bS5lbXB0eVBy
b3BlcnR5TmFtZUVudW1lcmF0b3IoKTsKKyAgICBlbHNlCisgICAgICAgIGVudW1lcmF0b3IgPSBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNyZWF0ZSh2bSwgc3RydWN0dXJlQWZ0ZXJHZXR0aW5n
UHJvcGVydHlOYW1lcywgaW5kZXhlZExlbmd0aCwgbnVtYmVyU3RydWN0dXJlUHJvcGVydGllcywg
V1RGTW92ZShwcm9wZXJ0eU5hbWVzKSk7CiAgICAgaWYgKCFpbmRleGVkTGVuZ3RoICYmIHN1Y2Nl
c3NmdWxseU5vcm1hbGl6ZWRDaGFpbiAmJiBzdHJ1Y3R1cmVBZnRlckdldHRpbmdQcm9wZXJ0eU5h
bWVzID09IHN0cnVjdHVyZSkgewogICAgICAgICBlbnVtZXJhdG9yLT5zZXRDYWNoZWRQcm90b3R5
cGVDaGFpbih2bSwgc3RydWN0dXJlLT5wcm90b3R5cGVDaGFpbihnbG9iYWxPYmplY3QsIGJhc2Up
KTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2FuQ2FjaGVQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KHZtKSkKQEAgLTE0Myw0ICsxNjIsNiBAQCBpbmxpbmUgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
KiBwcm9wZXJ0eU5hbWVFbnVtZXJhdG9yKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHJl
dHVybiBlbnVtZXJhdG9yOwogfQogCit1c2luZyBFbnVtZXJhdG9yTWV0YWRhdGEgPSBzdGQ6OnVu
ZGVybHlpbmdfdHlwZV90PEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6TW9kZT47CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ByZWRpY3Rpb25GaWxlQ3JlYXRpbmdGdXp6ZXJBZ2VudC5jcHAKaW5kZXgg
Y2RjZmE5OWQ0OWE2OTE3NDAxZDY4MzE2OGJhMTlhYmRlYmFlOWE0ZC4uYzdhOGUzMWY3ZTQ3YmQ2
OTExZmU0YWM0NWZkZjc3ZDY4Mzk2NDEwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJlZGljdGlvbkZpbGVDcmVhdGluZ0Z1enplckFnZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QcmVkaWN0aW9uRmlsZUNyZWF0aW5nRnV6emVy
QWdlbnQuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTUyLDcgKzUyLDcgQEAgU3BlY3VsYXRlZFR5cGUgUHJlZGljdGlvbkZpbGVDcmVh
dGluZ0Z1enplckFnZW50OjpnZXRQcmVkaWN0aW9uSW50ZXJuYWwoQ29kZUJsb2MKICAgICBjYXNl
IG9wX2dldF9ieV9pZDoKICAgICBjYXNlIG9wX2dldF9ieV9pZF93aXRoX3RoaXM6CiAgICAgY2Fz
ZSBvcF9nZXRfYnlfdmFsX3dpdGhfdGhpczoKLSAgICBjYXNlIG9wX2dldF9kaXJlY3RfcG5hbWU6
CisgICAgY2FzZSBvcF9lbnVtZXJhdG9yX2dldF9ieV92YWw6CiAgICAgY2FzZSBvcF9jb25zdHJ1
Y3Q6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczoKICAgICBjYXNlIG9wX2NhbGw6CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDc1
ZDQwNTkwMWRkMjNiYTMzMjhmN2YyMWFlNjRmZmY2ZjkxMjM1NDMuLmRkNWZiMDI4NzcxOTU4MTNj
YWE4ZGZlNjM1MGFiMDQxYzU5ZDE2ZWYgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMjEtMDgtMDcgIEtlaXRo
IE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CisKKyAgICAgICAgZm9yLWluIHNob3Vs
ZCBvbmx5IGVtaXQgb25lIGxvb3AgaW4gYnl0ZWNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IFl1
c3VrZSBTdXp1a2kuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1h
cnJheS13aXRoLW93bi1uYW1lZC5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAgICAgICAg
KiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS5qczogQWRkZWQuCisgICAgICAg
ICh0ZXN0KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWdldHRlcnMuanM6IEFk
ZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1p
bnQzMi1hcnJheS13aXRoLW93bi1uYW1lZC5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAg
ICAgICAgKiBtaWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLWFycmF5LmpzOiBBZGRlZC4KKyAg
ICAgICAgKHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2Jq
ZWN0LXdpdGgtb3duLW5hbWVkLWFuZC1nZXR0ZXJzLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3Qp
OgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3du
LW5hbWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIG1pY3JvYmVuY2ht
YXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHN1
bSk6CisgICAgICAgIChvcGFxdWVTZXQpOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9mb3It
aW4tc3RyaW5nLWFycmF5LmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QpOgorICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1hcnJheS1tYXAtc2V0LmpzOiBBZGRlZC4KKyAg
ICAgICAgKHN1bSk6CisgICAgICAgIChsZXQuZ2VuZXJhdG9yKToKKyAgICAgICAgKiBzdHJlc3Mv
Zm9yLWluLWFycmF5LW1vZGUuanM6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBzdHJlc3Mv
Zm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qczoKKyAgICAgICAgKiBzdHJlc3MvZm9yLWlu
LWRlbGV0ZS1kdXJpbmctaXRlcmF0aW9uLmpzOgorICAgICAgICAqIHN0cmVzcy9mb3ItaW4tcHJp
bWl0aXZlLWluZGV4LW9uLXByb3RvdHlwZS5qczogQWRkZWQuCisgICAgICAgICh0ZXN0KToKKyAg
ICAgICAgKiBzdHJlc3MvZm9yLWluLXRlc3RzLmpzOgorICAgICAgICAqIHN0cmVzcy9oYXMtb3du
LXByb3BlcnR5LXN0cnVjdHVyZS1mb3ItaW4tbG9vcC1jb3JyZWN0bmVzcy5qczoKKyAgICAgICAg
KHRlc3Q1KToKKwogMjAyMS0wOC0wMiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgogCiAgICAgICAgIFtKU0NdIFlhcnIgQm95ZXJNb29yZSBzZWFyY2ggc2hvdWxkIHN1cHBvcnQg
Y2hhcmFjdGVyLWNsYXNzCmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3It
aW4tZG91YmxlLWFycmF5LXdpdGgtb3duLW5hbWVkLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFy
a3MvZm9yLWluLWRvdWJsZS1hcnJheS13aXRoLW93bi1uYW1lZC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNThi
ZjQzZmU1YWYwZmYxZDMwMTM4YmE3N2UzNzM4MDQ3NDM1Yzk1Ci0tLSAvZGV2L251bGwKKysrIGIv
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWRvdWJsZS1hcnJheS13aXRoLW93bi1uYW1l
ZC5qcwpAQCAtMCwwICsxLDE0IEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9
IDA7CisgICAgZm9yICh2YXIgaSBpbiBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07
CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5lKHRlc3QpOworCitmb3IgKGxldCBpID0gMDsg
aSA8IDFlNTsgKytpKSB7CisgICAgdmFyIG8gPSBBcnJheSgxMDApLmZpbGwoMS4xMjMyMTQyMzEp
OworICAgIG8uYSA9IDA7CisgICAgby5iID0gInN1cnByaXNlIHN0cmluZyI7CisgICAgdGVzdChv
KTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1kb3VibGUt
YXJyYXkuanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFycmF5Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc0YTBjM2M3MWQ2ZTY5MTA1OGEzMWRhY2JiNTA2NmZmMjRhNDA1YmIKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZG91YmxlLWFy
cmF5LmpzCkBAIC0wLDAgKzEsMTAgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3Vt
ID0gMDsKKyAgICBmb3IgKHZhciBpIGluIG9iamVjdCkKKyAgICAgICAgc3VtICs9IG9iamVjdFtp
XTsKKyAgICByZXR1cm4gc3VtOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAw
OyBpIDwgMWU1OyArK2kpCisgICAgdGVzdChBcnJheSgxMDApLmZpbGwoMS4xMjMxMjQxKSk7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZ2V0dGVycy5qcyBiL0pT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1nZXR0ZXJzLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0ZmEz
NjQ4NjBhNmIwMDlkYTMxODg5NTIzMDhjNTMwZTAwMmIxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tZ2V0dGVycy5qcwpAQCAtMCwwICsxLDE1IEBA
CitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9IDA7CisgICAgZm9yICh2YXIgaSBp
biBvYmplY3QpCisgICAgICAgIHN1bSArPSBvYmplY3RbaV07CisgICAgcmV0dXJuIHN1bTsKK30K
K25vSW5saW5lKHRlc3QpOworCitsZXQgbyA9IHsgfTsKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShv
LCAicHJvdG9WYWx1ZSIsIHsgZ2V0KCkgeyByZXR1cm4gInN0cmluZyI7IH0sIGVudW1lcmFibGU6
IHRydWUgfSk7CitPYmplY3QuZGVmaW5lUHJvcGVydHkobywgInByb3RvVmFsdWUyIiwgeyBnZXQo
KSB7IHJldHVybiAic3RyaW5nMSI7IH0sIGVudW1lcmFibGU6IHRydWUgfSk7CitPYmplY3QuZGVm
aW5lUHJvcGVydHkobywgInByb3RvVmFsdWUzIiwgeyBnZXQoKSB7IHJldHVybiAic3RyaW5nMiI7
IH0sIGVudW1lcmFibGU6IHRydWUgfSk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kp
CisgICAgdGVzdChvKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1p
bi1pbnQzMi1hcnJheS13aXRoLW93bi1uYW1lZC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2Zvci1pbi1pbnQzMi1hcnJheS13aXRoLW93bi1uYW1lZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTJkZGJk
MmYwNWRiNGVjY2U5ZmQ5YmE0NTY5ZjZiMDYyNGFhMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLWludDMyLWFycmF5LXdpdGgtb3duLW5hbWVkLmpz
CkBAIC0wLDAgKzEsMTQgQEAKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsK
KyAgICBmb3IgKHZhciBpIGluIG9iamVjdCkKKyAgICAgICAgc3VtICs9IG9iamVjdFtpXTsKKyAg
ICByZXR1cm4gc3VtOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAobGV0IGkgPSAwOyBpIDwg
MWU1OyArK2kpIHsKKyAgICB2YXIgbyA9IEFycmF5KDEwMCkuZmlsbCgxKTsKKyAgICBvLmEgPSAw
OworICAgIG8uYiA9IDI7CisgICAgdGVzdChvKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1hcnJheS5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2Zvci1pbi1pbnQzMi1hcnJheS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmFlNWMxYjQyNTg5NDY2MGQ5
Njk4MzVlNGY0Y2Q2YTgxZWVkNTEwCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvZm9yLWluLWludDMyLWFycmF5LmpzCkBAIC0wLDAgKzEsMTUgQEAKKwordmFyIGNv
dW50ID0gMDsKK2Z1bmN0aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsKKyAgICBmb3Ig
KHZhciBpIGluIG9iamVjdCkKKyAgICAgICAgc3VtICs9IG9iamVjdFtpXTsKKyAgICByZXR1cm4g
c3VtOworfQorbm9JbmxpbmUodGVzdCk7CisKKwordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwMCk7
CithcnJheS5maWxsKDEpOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICB0ZXN0
KGFycmF5KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQz
Mi1vYmplY3Qtd2l0aC1vd24tbmFtZWQtYW5kLWdldHRlcnMuanMgYi9KU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9mb3ItaW4taW50MzItb2JqZWN0LXdpdGgtb3duLW5hbWVkLWFuZC1nZXR0ZXJzLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmI1ZWY3ZWJkZDI0MzI5NDRmZGViMTRmYWZmOGI0MjZkYzQ0NjNhYzkKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4taW50MzItb2Jq
ZWN0LXdpdGgtb3duLW5hbWVkLWFuZC1nZXR0ZXJzLmpzCkBAIC0wLDAgKzEsMTUgQEAKK2Z1bmN0
aW9uIHRlc3Qob2JqZWN0KSB7CisgICAgc3VtID0gMDsKKyAgICBmb3IgKHZhciBpIGluIG9iamVj
dCkKKyAgICAgICAgc3VtICs9IG9iamVjdFtpXTsKKyAgICByZXR1cm4gc3VtOworfQorbm9Jbmxp
bmUodGVzdCk7CisKK09iamVjdC5kZWZpbmVQcm9wZXJ0eShPYmplY3QucHJvdG90eXBlLCAicHJv
dG9WYWx1ZSIsIHsgZ2V0KCkgeyByZXR1cm4gInN0cmluZyI7IH0sIGVudW1lcmFibGU6IHRydWUg
fSk7Cit2YXIgbyA9IHsgbGVuZ3RoOiAxMDAgfQorQXJyYXkucHJvdG90eXBlLmZpbGwuY2FsbChv
LCAxKTsKK28uYSA9IDA7CitvLmIgPSAyOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkK
KyAgICB0ZXN0KG8pOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWlu
LWludDMyLW9iamVjdC13aXRoLW93bi1uYW1lZC5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2Zvci1pbi1pbnQzMi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzU3MGZk
MGY1MTZkY2Q1NzU1YjNmMmViOTY5Yzk4OWI1MTVkNzZjNAotLS0gL2Rldi9udWxsCisrKyBiL0pT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1pbnQzMi1vYmplY3Qtd2l0aC1vd24tbmFtZWQu
anMKQEAgLTAsMCArMSwxNyBAQAorZnVuY3Rpb24gdGVzdChvYmplY3QpIHsKKyAgICBzdW0gPSAw
OworICAgIGZvciAodmFyIGkgaW4gb2JqZWN0KSB7CisgICAgICAgIHZhciB2ID0gb2JqZWN0W2ld
OworICAgICAgICBzdW0gKz0gdjsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30KK25vSW5saW5l
KHRlc3QpOworCitmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgdmFyIG8gPSB7
IGxlbmd0aDogMTAwIH07CisgICAgQXJyYXkucHJvdG90eXBlLmZpbGwuY2FsbChvLCAxKTsKKyAg
ICBvLmEgPSAwOworICAgIG8uYiA9IDI7CisgICAgdGVzdChvKTsKK30KZGlmZiAtLWdpdCBhL0pT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2Zvci1pbi1vYmplY3Qtd2l0aC1vd24tbmFtZWQuanMgYi9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgtb3duLW5hbWVkLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQ1ZjRlMGY0NjAwMmVhODgwNDI0YTg4NGUyMmM0MGFjMjM4YWZlNWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tb2JqZWN0LXdpdGgt
b3duLW5hbWVkLmpzCkBAIC0wLDAgKzEsMTcgQEAKK2Z1bmN0aW9uIHN1bShvKSB7CisgICAgbGV0
IHN1bSA9IDA7CisgICAgZm9yIChsZXQgcCBpbiBvKQorICAgICAgICBzdW0gKz0gb1twXTsKKyAg
ICByZXR1cm4gc3VtOworfQorCitmdW5jdGlvbiBvcGFxdWVTZXQobykgeworICAgIG8ueiA9IDM7
Cit9CisKK2xldCBvYmplY3QgPSB7IHg6IDEsIHk6IDIgfTsKK29wYXF1ZVNldChvYmplY3QpOwor
Zm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIGlmIChzdW0ob2JqZWN0KSAhPT0g
NikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgc3VtIik7Cit9CmRpZmYgLS1naXQgYS9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3ItaW4tc3RyaW5nLWFycmF5LmpzIGIvSlNUZXN0cy9t
aWNyb2JlbmNobWFya3MvZm9yLWluLXN0cmluZy1hcnJheS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NzI3NGZi
YzEzOTAyYTY5MWEyMjhlZTdmYzYzZjc1MDJlYjhhOGFjCi0tLSAvZGV2L251bGwKKysrIGIvSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvZm9yLWluLXN0cmluZy1hcnJheS5qcwpAQCAtMCwwICsxLDEw
IEBACitmdW5jdGlvbiB0ZXN0KG9iamVjdCkgeworICAgIHN1bSA9ICIiOworICAgIGZvciAodmFy
IGkgaW4gb2JqZWN0KQorICAgICAgICBzdW0gKz0gb2JqZWN0W2ldOworICAgIHJldHVybiBzdW07
Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAg
ICB0ZXN0KEFycmF5KDEwMCkuZmlsbCgiYSIpKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL2Zvci1vZi1pdGVyYXRlLWFycmF5LW1hcC1zZXQuanMgYi9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1hcnJheS1tYXAtc2V0LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1
ZDRhMDI0NDI4OWM3MmVhYzhhNmFiMzJkMDk3MGY1ODJmZWY1NjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9mb3Itb2YtaXRlcmF0ZS1hcnJheS1tYXAtc2V0Lmpz
CkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHN1bShvYmopIHsKKyAgICBsZXQgcmVzdWx0ID0g
MDsKKyAgICBmb3IgKGxldCB4IG9mIG9iaikgeworICAgICAgICBpZiAodHlwZW9mIHggPT0gIm51
bWJlciIpCisgICAgICAgICAgICByZXN1bHQgKz0geDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVzdWx0ICs9IHhbMF07CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9Citub0lubGlu
ZShzdW0pOworCitsZXQgYXJyYXkgPSBbMSwyLDMsNCw1XTsKK2xldCBzZXQgPSBuZXcgU2V0KGFy
cmF5KTsKK2xldCBtYXAgPSBuZXcgTWFwKGFycmF5Lm1hcCh4ID0+IFt4LCB4XSkpOworbGV0IGdl
bmVyYXRvciA9IGZ1bmN0aW9uKiAoYXJyYXkpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFy
cmF5Lmxlbmd0aDsgKytpKQorICAgICAgICB5aWVsZCBhcnJheVtpXTsKK30KKworZm9yIChsZXQg
aSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIGlmIChzdW0oc2V0KSAhPT0gMTUpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigpOworICAgIGlmIChzdW0oZ2VuZXJhdG9yKGFycmF5KSkgIT09IDE1
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3Ry
ZXNzL2Zvci1pbi1hcnJheS1tb2RlLmpzIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWFycmF5LW1v
ZGUuanMKaW5kZXggOTAwMmI5NDBhZDU5NmI3NTQ4MWYwMjU0MGU1MGFjOWU5Y2JiNTA4OC4uM2Qy
ZGE2MzlkODEwZjhhYjk3YTNlMjY5ZmFlMTA3MjEwYjVjZTc1YyAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9zdHJlc3MvZm9yLWluLWFycmF5LW1vZGUuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWlu
LWFycmF5LW1vZGUuanMKQEAgLTI2LDggKzI2LDkgQEAKIHZhciBmdW5jQXJnQW5kQm9keVN0ciA9
CiAiKGFycikgeyIgKyAiXG4iICsKICIgICAgdmFyIHN1bSA9IDA7IiArICJcbiIgKwotIiAgICBm
b3IgKHZhciBpIGluIGFycikiICsgIlxuIiArCisiICAgIGZvciAodmFyIGkgaW4gYXJyKSB7IiAr
ICJcbiIgKwogIiAgICAgICAgc3VtICs9IGFycltpXTsiICsgIlxuIiArCisiICAgIH0gIiArCiAi
ICAgIHJldHVybiBzdW07IiArICJcbiIgKwogIn0iOwogCkBAIC03NSw2ICs3Niw3IEBAIGZ1bmN0
aW9uIHRlc3QobmFtZSwgZGF0YSkgewogCiAgICAgICAgIGlmICgoYWN0dWFsICE9IGV4cGVjdGVk
KSAmJiAoYWN0dWFsICE9IHByZXZpb3VzUmVzdWx0KSkgewogICAgICAgICAgICAgcHJpbnQoIkZB
SUw6ICIgKyBuYW1lICsgIjogZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZCArICIsIGFjdHVhbDogIiAr
IGFjdHVhbCArICIsIHN0YXJ0aW5nIEAgbG9vcCBpdGVyYXRpb24gIiArIGkpOworICAgICAgICAg
ICAgJHZtLmJyZWFrcG9pbnQoKTsKICAgICAgICAgICAgIHByZXZpb3VzUmVzdWx0ID0gYWN0dWFs
OwogICAgICAgICAgICAgZmFpbGVkID0gdHJ1ZTsKICAgICAgICAgICAgIG51bWJlck9mRmFpbHVy
ZXMrKzsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQt
bGF0ZXIuanMgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tYmFzZS1yZWFzc2lnbmVkLWxhdGVyLmpz
CmluZGV4IDgzMTE1YjQ5NzNjODM3Y2E2ZDNmZjA2ZWE2ZmYxMzFjMzQ1MTFlNjIuLjA5ZjgxZDk1
NjUzYmFhMTUwNmU1ZGRhMDYyZmEyZTM1ZjE1OGJmMzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3Ry
ZXNzL2Zvci1pbi1iYXNlLXJlYXNzaWduZWQtbGF0ZXIuanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
Zm9yLWluLWJhc2UtcmVhc3NpZ25lZC1sYXRlci5qcwpAQCAtMTQsNSArMTQsNSBAQCBub0lubGlu
ZShmb28pOwogZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CiAgICAgdmFyIHJlc3Vs
dCA9IGZvbyh7MDowLCAxOjEsIGE6MiwgYjozfSk7CiAgICAgaWYgKHJlc3VsdCAhPSA3KQotICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiYmFkIHJlc3VsdDogIiArIHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9KU1Rl
c3RzL3N0cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMgYi9KU1Rlc3RzL3N0
cmVzcy9mb3ItaW4tZGVsZXRlLWR1cmluZy1pdGVyYXRpb24uanMKaW5kZXggNWFkMzU2NmZkMGQz
NjEwMjVhMWU1ZjMzNjVkMGJhZDM3NGQ1MTIwMi4uZDExNDY5MzFiMTQ3NWQ4OGM0NzM5NDllYWRh
MmRkYTBmZDM5MzBhNSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZm9yLWluLWRlbGV0ZS1k
dXJpbmctaXRlcmF0aW9uLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1kZWxldGUtZHVy
aW5nLWl0ZXJhdGlvbi5qcwpAQCAtMTIsOCArMTIsOSBAQAogICAgIH07CiAgICAgbm9JbmxpbmUo
Zm9vKTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKLSAgICAgICAgaWYg
KGZvbygpICE9PSAiMTIzNSIpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1
bHQiKTsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGZvbygpOworICAgICAgICBpZiAocmVzdWx0ICE9
PSAiMTIzNSIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCByZXN1bHQgZ290OiAi
ICsgcmVzdWx0KTsKICAgICB9CiAgICAgZm9vKG51bGwpOwogfSkoKTsKQEAgLTM2LDggKzM3LDkg
QEAKICAgICB9OwogICAgIG5vSW5saW5lKGZvbyk7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7Ci0gICAgICAgIGlmIChmb28oKSAhPT0gInh6IikKLSAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOworICAgICAgICB2YXIgcmVzdWx0ID0gZm9vKCk7
CisgICAgICAgIGlmIChyZXN1bHQgIT09ICJ4eiIpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoImJhZCByZXN1bHQ6ICIgKyByZXN1bHQpOwogICAgIH0KIH0pKCk7CiAoZnVuY3Rpb24oKSB7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcHJpbWl0aXZlLWluZGV4LW9uLXBy
b3RvdHlwZS5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi1wcmltaXRpdmUtaW5kZXgtb24tcHJv
dG90eXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRlYTNkMjkzNDIxYmYzNDg2OTFlZjcwYzk2OTViNjg5YzU5
YWZiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4tcHJpbWl0aXZl
LWluZGV4LW9uLXByb3RvdHlwZS5qcwpAQCAtMCwwICsxLDIzIEBACitmdW5jdGlvbiB0ZXN0KHYp
IHsKKyAgICBsZXQgc3VtID0gMDsKKyAgICBmb3IgKHZhciBwIGluIHYpCisgICAgICAgIHN1bSAr
PSB2W3BdOworICAgIHJldHVybiBzdW07Cit9CisKK051bWJlci5wcm90b3R5cGVbMl0gPSA0Owor
Zm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIGlmICh0ZXN0KDApICE9PSA0KQor
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KKworU3RyaW5nLnByb3RvdHlwZVsyXSA9IDU7
Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IHRlc3Qo
IiIpOworICAgIGlmIChyZXN1bHQgIT09IDUpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigpOwor
CisgICAgcmVzdWx0ID0gdGVzdCgiYSIpOworICAgIGlmIChyZXN1bHQgIT09ICIwYTUiKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Zv
ci1pbi10ZXN0cy5qcyBiL0pTVGVzdHMvc3RyZXNzL2Zvci1pbi10ZXN0cy5qcwppbmRleCAyZTRk
NmI4NDJhMjQyZWI3MTU5ODYwMGVlNTI4YWUxNGI5Yzg5Y2U0Li42ODk2MDk4MTg1MWVlMzQ0ZTNh
YTdmNTMyMzE1MWIyMjUxZjY1ZDkwIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mb3ItaW4t
dGVzdHMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZm9yLWluLXRlc3RzLmpzCkBAIC0xMDUsNiAr
MTA1LDcgQEAgZnVuY3Rpb24gc2hvdWxkVGhyb3dTeW50YXhFcnJvcihzY3JpcHQpIHsKICAgICAg
ICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIHJlc3VsdCIpOwogICAgIH0KIH0pKCk7CisKIChm
dW5jdGlvbigpIHsKICAgICB2YXIgZm9vID0gZnVuY3Rpb24oYSwgYikgewogICAgICAgICBmb3Ig
KHZhciBwIGluIGIpIHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2hhcy1vd24tcHJvcGVy
dHktc3RydWN0dXJlLWZvci1pbi1sb29wLWNvcnJlY3RuZXNzLmpzIGIvSlNUZXN0cy9zdHJlc3Mv
aGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMKaW5k
ZXggOTljNTlhYzEwNTY4Y2U4YTc5MDg1MjI5ODIwNmZkYzdlMGUwZjg5Yy4uZTBhZGUwNzFhMmU0
YjhkMDI3OGQ5NWNjOTMzZTI0ZjE4YmJlZTA1OCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3Mv
aGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3AtY29ycmVjdG5lc3MuanMKKysr
IGIvSlNUZXN0cy9zdHJlc3MvaGFzLW93bi1wcm9wZXJ0eS1zdHJ1Y3R1cmUtZm9yLWluLWxvb3At
Y29ycmVjdG5lc3MuanMKQEAgLTEzMiw3ICsxMzIsMTAgQEAgZnVuY3Rpb24gdGVzdDUoKSB7CiAg
ICAgby5fX3Byb3RvX18gPSBwOwogCiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwOyArK2kp
IHsKLSAgICAgICAgYXNzZXJ0KGNvdW50KG8pID09PSAwKTsKKyAgICAgICAgdmFyIGMgPSBjb3Vu
dChvKTsKKyAgICAgICAgaWYgKGMpCisgICAgICAgICAgICBwcmludChjKTsKKyAgICAgICAgYXNz
ZXJ0KGMgPT09IDApOwogICAgIH0KIH0KIHRlc3Q1KCk7Cg==
</data>
<flag name="commit-queue"
          id="457852"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>